← Tous les articles

Découvrez Music Understanding : l'analyse audio sur l'appareil

À la WWDC 2026, l’équipe Final Cut Pro d’Apple a livré deux fonctionnalités bâties sur un seul framework : une détection de tempo qui révèle la grille de battements d’un morceau pour que les monteurs alignent leurs coupes sur les mesures et les battements, et une fonction de montage sur iPad qui synchronise automatiquement les clips avec la musique.1 Toutes deux reposent sur Music Understanding, un nouveau framework qui vous remet l’intelligence musicale d’un morceau (tonalité, rythme, structure, allure, activité des instruments et sonie) sans exiger la moindre connaissance en traitement du signal ou en apprentissage automatique. Il s’exécute entièrement sur l’appareil, si bien que l’audio que vous analysez reste privé et fonctionne hors ligne.1 Cet article parcourt le framework sous forme d’atelier pratique : les six domaines d’analyse, la manière dont une MusicUnderstandingSession les produit, et l’AsyncSequence de sonie en flux continu qui rend possibles les visuels réactifs au son.

En bref

  • Music Understanding analyse six domaines d’un morceau (tonalité, rythme, structure, allure, activité des instruments et sonie) sur l’appareil, sans aucune expertise en traitement du signal ni en apprentissage automatique.1
  • Vous créez une MusicUnderstandingSession à partir d’un AVAsset ou d’un fournisseur audio personnalisé, puis vous appelez analyze() pour tout obtenir, ou analyze(for:) pour cibler des types précis et éviter des calculs inutiles.1
  • Les résultats arrivent dans une structure SessionResult où chaque caractéristique est un champ optionnel ; l’appel général analyze() les renseigne tous, tandis que l’appel ciblé analyze(for:) laisse le reste à nil.1
  • Deux types tenant compte du temps traversent toute l’API : un TimedValue associe une valeur à un CMTime, et un RangedValue associe une valeur à un CMTimeRange.1
  • MusicUnderstandingSession expose aussi une API de sonie en flux continu qui livre des valeurs via une AsyncSequence pour chaque tranche de 100 ms d’audio analysée, ce qui constitue la base pour piloter une animation réactive au son en temps réel.1

Pourquoi l’intelligence musicale sur l’appareil change la donne

Watch on Apple Developer ↗

Conner, de la Computational Music Team d’Apple, énumère les six domaines d’analyse du framework à partir de 1:39.

La promesse est étroite et honnête : le framework « prend en charge à votre place tout le traitement du signal et l’inférence du modèle, de sorte que vous n’avez besoin d’aucune expertise en traitement du signal ni en apprentissage automatique pour l’utiliser ».1 Cela retire la partie de l’analyse audio que la plupart des développeurs d’applications n’ont jamais voulu assumer. Détecter un tempo, segmenter un morceau en un refrain et un couplet, ou mesurer la sonie perçue revenait autrefois soit à acquérir une licence pour un moteur tiers, soit à construire à la main un pipeline DSP.

L’exécution sur l’appareil change aussi l’équation de la confidentialité. Parce que le framework « s’exécute entièrement sur l’appareil, l’audio que vous analysez reste privé et fonctionne hors ligne ».1 Un morceau ne quitte jamais le téléphone pour être analysé, et l’analyse fonctionne dans un avion sans réseau. Pour une appli de DJ qui trie une bibliothèque par tempo, ou un éditeur vidéo qui cale ses coupes sur les battements, cette combinaison (aucune dépendance réseau et aucun audio quittant l’appareil) constitue le véritable déblocage en pratique.

Apple présente les six domaines comme les briques élémentaires d’un morceau. Le rythme est la pulsation, portée par des battements individuels qui s’assemblent en mesures ; le nombre de battements en une minute correspond aux beats per minute, soit le bpm.1 Les mesures forment des phrases (des phrases musicales), les phrases se combinent en segments, et les segments construisent des sections comme un refrain, un couplet, une intro ou un pont.1 Des instruments tels qu’une batterie, une basse ou des voix jouent à des moments et des intensités différents autour d’un ensemble de notes commun appelé la tonalité.1 Un morceau peut maintenir un bpm constant alors que différentes parties semblent plus lentes ou plus rapides, ce qu’Apple nomme l’allure, et le morceau gagne en volume à certains endroits plus qu’à d’autres.1 Ces six concepts correspondent un à un aux types de résultats du framework.

La session : un seul objet, deux façons d’interroger

Les applications interagissent avec une MusicUnderstandingSession, qu’elles initialisent « soit avec un AVAsset, soit avec un fournisseur audio personnalisé ».1 Pour lancer l’analyse, vous appelez analyze et attendez les résultats. Le comportement par défaut consiste à analyser tous les types, et Apple est explicite sur le levier de performance : « Pour des performances optimales, vous pouvez préciser les types d’analyse qui vous intéressent afin d’éviter des calculs inutiles. »1 Ne calculer que ce que vous affichez fait toute la différence entre un outil réactif et un outil qui rame à chaque chargement.

L’application d’exemple, Music Understanding Lab, montre le chemin du fichier de bout en bout. Un fileImporter SwiftUI sélectionne un morceau et renvoie son URL, et cette URL devient un AVURLAsset. Apple signale un réglage déterminant : définissez PreferPreciseDurationAndTimingKey sur true « afin de garantir les résultats les plus précis ».1 Vous créez ensuite la session à partir de l’asset, vous appelez analyze et attendez le retour des résultats de la session.

Ces résultats atterrissent dans une structure SessionResult, où « chaque caractéristique analysée par Music Understanding dispose de son propre champ de résultats. Ce sont tous des optionnels. »1 Les deux points d’entrée diffèrent par ce qu’ils renseignent. L’API générale analyze() rend tous les résultats disponibles. L’API ciblée analyze(for:) ne renvoie que les résultats demandés, et « le reste sera nil ».1 L’optionnalité n’est donc pas un hasard de conception d’API : c’est ainsi que le framework vous indique le travail qu’il a réellement effectué.

Deux types reviennent partout dans le framework pour rattacher le temps à une valeur. Un TimedValue associe une valeur à un CMTime (un instant unique), et un RangedValue associe un CMTimeRange (une plage) à une valeur.1 Presque tous les résultats ci-dessous s’expriment sous l’une de ces deux formes ; les apprendre une fois est donc rentable sur l’ensemble des six domaines.

Parcours des six résultats

Tonalité. Pour l’analyse de la tonalité, le framework renvoie une structure KeyResult, qui « contient un tableau de plages associant une KeySignature à une plage de temps précise au moyen d’un RangedValue ».1 Une KeySignature détient une tonique et un mode. La tonique « peut être n’importe laquelle des hauteurs chromatiques standard » et représente la note fondamentale (comme do ou sol) autour de laquelle le morceau est bâti ; le mode « est soit majeur, soit mineur ».1 Comme le résultat est un tableau de plages plutôt qu’une valeur unique, l’API prend en compte les morceaux qui changent de tonalité en cours de route.

Rythme. L’analyse du rythme produit un RhythmResult. La structure vous donne « les horodatages de chaque battement et de chaque mesure sous forme de tableaux de CMTime », ainsi que le tempo global via beatsPerMinute.1 Un détail compte pour les interfaces en temps réel : beatsPerMinute est optionnel, « car si le framework n’a pas traité assez d’audio pour trouver au moins deux battements, le bpm sera défini sur nil ».1 Il faut deux battements pour mesurer un intervalle ; ce nil est donc le framework qui refuse de deviner.

Structure. Demander l’analyse de la structure renvoie un StructureResult doté de trois propriétés, « pour les sections, les segments et les phrases », et pour chacune vous obtenez un tableau de CMTimeRange.1 Les trois niveaux s’imbriquent : une section se compose d’un ou plusieurs segments, et chaque segment se compose de phrases.1 C’est cette hiérarchie qui permet à un monteur de caler une coupe sur la frontière d’un refrain plutôt que sur un horodatage arbitraire.

Allure. L’allure « vous indique à quel point la musique paraît rapide à l’auditeur », les parties plus énergiques portant une valeur plus élevée que les plus lentes.1 Sa demande renvoie un PaceResult, une structure dotée d’« une seule propriété contenant un tableau de valeurs avec plage ».1 L’allure se distingue du bpm : le tempo peut rester constant tandis que l’énergie ressentie monte et descend.

Activité des instruments. Demander l’activité des instruments renvoie un InstrumentActivityResult doté de deux propriétés, l’une pour les plages et l’autre pour l’activité.1 L’API Ranges « fournit un dictionnaire associant chaque Instrument à » une valeur par instrument (la transcription s’interrompt avant de nommer le type de cette valeur), et Apple présente les plages comme le bon choix lorsque « vous voulez simplement savoir si un instrument est présent ou non ».1 La propriété activity porte davantage de détails : elle « associe un instrument à un TimedValue de Float », et ces valeurs « expriment avec quelle intensité un instrument joue au fil du temps ».1 Apple qualifie le résultat d’activité de « excellente source pour piloter des animations réactives au son », car une intensité par instant et par instrument est exactement ce à quoi un visualiseur veut se relier.1

Sonie. Le framework mesure la sonie en Loudness Units Full Scale (LUFS), « la norme du secteur pour modéliser la façon dont l’oreille humaine perçoit le volume ».1 Demander l’analyse de la sonie produit une structure LoudnessResult qui prend en charge les sonies integrated, momentary et shortTerm.1 La sonie integrated est une valeur unique pour la sonie globale de l’audio. Les sonies momentary et shortTerm fournissent toutes deux des valeurs horodatées toutes les 100 millisecondes, mais sur des fenêtres différentes : momentary utilise une fenêtre de 400 millisecondes et capte « les pics de sonie brefs et soudains », tandis que shortTerm utilise une fenêtre de 3 secondes pour « une vue plus lissée de la tendance de la sonie dans le temps ».1 Le résultat porte également une valeur de crête, le volume audio absolu le plus élevé, mesuré en décibels.1

L’AsyncSequence de sonie en flux continu

Les API par lots ci-dessus analysent un fichier terminé. Pour le travail en direct, MusicUnderstandingSession « fournit aussi une API de flux continu pour la sonie », où « les valeurs sont livrées via une AsyncSequence pour chaque tranche de 100 ms d’audio analysée par le framework ».1 Une nouvelle mesure de sonie toutes les 100 ms, c’est la cadence à laquelle tourne un visualiseur en temps réel, et c’est pourquoi c’est cette API, et non celle par lots, qui occupe le centre de la scène pour une interface réactive au son.

Le schéma d’utilisation repose sur deux tâches concurrentes. Vous initialisez la session comme précédemment, puis vous « configurez deux tâches : l’une pour consommer les résultats de sonie à mesure qu’ils sont livrés, et l’autre pour lancer l’analyse ».1 Une tâche attend les valeurs issues de la séquence et les pousse dans votre animation ; l’autre fait avancer l’analyse. Le producteur et le consommateur fonctionnent côte à côte au lieu de se bloquer mutuellement.

Alimenter l’analyse en audio en direct suppose de fournir un AudioProvider. Un AudioProvider « se conforme à AsyncSequence et produit des objets AVReadOnlyAudioPCMBuffer ».1 Apple souligne explicitement le contrat de fin : lorsque le fournisseur « a envoyé tous les tampons audio, il doit envoyer un dernier nil pour signaler l’achèvement ».1 Oubliez le nil final et la tâche consommatrice attend pour toujours un audio qui ne finit jamais. Le fait que le fournisseur soit lui-même une AsyncSequence constitue la part élégante : votre source audio et la sortie de sonie du framework parlent le même langage d’itération asynchrone, de bout en bout.

Deux autres capacités de session complètent le tableau. Chaque résultat de Music Understanding est codable, si bien qu’exporter une analyse complète revient à « simplement créer un JSONEncoder et encoder les résultats de la session ».1 Et la tuile Video de l’application d’exemple montre les résultats qui se composent : elle « utilise la structure et l’allure pour créer une vidéo synchronisée avec la musique », en repérant les plages de temps des sections, puis en se servant de l’allure de chaque section (un taux d’événements par minute divisé par 60 secondes) pour décider combien de clips tiennent dans cette plage, avec des clips plus courts et plus rapides dans les parties énergiques et des clips plus longs et plus lents dans les parties calmes.1

Points clés à retenir

Pour les développeurs d’applications audio et multimédias :

  • Partez de analyze(for:), et non de analyze() : ne nommez que les types d’analyse que vous affichez, pour que le framework saute le reste, puisque les résultats non demandés reviennent de toute façon à nil.1
  • Traitez beatsPerMinute comme véritablement optionnel dans votre interface ; un nil signifie que le framework n’a pas encore vu deux battements, alors affichez un état d’attente plutôt qu’un tempo factice.1
  • Définissez PreferPreciseDurationAndTimingKey sur true pour l’AVURLAsset avant de créer la session, car Apple lie l’exactitude des résultats à ce drapeau.1

Pour le travail en temps réel et les visualiseurs :

  • Construisez l’animation réactive au son en direct sur l’AsyncSequence de sonie (une valeur toutes les 100 ms) et sur la propriété activity des instruments, qui associe chaque instrument à un TimedValue d’intensité au fil du temps.1
  • Exécutez une tâche consommatrice et une tâche d’analyse en parallèle, et faites en sorte que votre AudioProvider personnalisé envoie un dernier nil après le dernier AVReadOnlyAudioPCMBuffer, pour que le flux se termine proprement.1

Pour les équipes catalogue et outillage :

  • Triez ou regroupez une bibliothèque musicale par tonalité ou par tempo grâce à KeyResult et RhythmResult, et conservez les analyses en encodant le SessionResult codable en JSON pour les réutiliser.1

FAQ

Qu’analyse le framework Music Understanding d’Apple ?

Il analyse six domaines d’un morceau : la tonalité, le rythme, la structure, l’allure, l’activité des instruments et la sonie. Chacun correspond à un type de résultat (KeyResult, RhythmResult, StructureResult, PaceResult, InstrumentActivityResult et LoudnessResult) renvoyé à l’intérieur d’un SessionResult. Le framework prend en charge le traitement du signal et l’inférence du modèle ; aucune expertise en DSP ou en apprentissage automatique n’est donc requise.1

Music Understanding s’exécute-t-il sur l’appareil ou dans le cloud ?

Sur l’appareil. Apple précise que le framework « s’exécute entièrement sur l’appareil », de sorte que l’audio que vous analysez reste privé et fonctionne hors ligne. L’analyse fonctionne sur l’ensemble des plateformes Apple sans aucune dépendance réseau.1

Comment obtenir uniquement l’analyse dont j’ai besoin ?

Appelez analyze(for:) plutôt que l’appel général analyze(). L’appel général renseigne chaque champ du SessionResult ; l’appel ciblé ne renvoie que les types demandés et laisse le reste à nil. Apple recommande de préciser les types « pour des performances optimales » afin d’éviter des calculs inutiles.1

Quelle est la différence entre TimedValue et RangedValue ?

Un TimedValue associe une valeur à un instant CMTime unique, tandis qu’un RangedValue associe une valeur à une plage CMTimeRange. Les deux types apparaissent partout dans le framework : les armatures de tonalité arrivent par exemple sous forme de valeurs avec plage, et l’activité par instrument sous forme de valeurs horodatées.1

Comment construire un visualiseur réactif au son en direct avec ce framework ?

Utilisez l’API de sonie en flux continu de MusicUnderstandingSession, qui livre des valeurs via une AsyncSequence pour chaque tranche de 100 ms d’audio analysée. Exécutez deux tâches concurrentes (l’une consommant les résultats, l’autre pilotant l’analyse), et alimentez l’audio en direct au moyen d’un AudioProvider personnalisé qui se conforme à AsyncSequence, produit des objets AVReadOnlyAudioPCMBuffer et envoie un dernier nil pour signaler l’achèvement.1


L’analyse audio sur l’appareil prend place aux côtés des autres formes d’intelligence multimédia livrées par Apple cette année : voyez comment l’IA sur l’appareil arrive dans Spotlight et les médias sur iOS 27 et comment le framework Speech se compare à SFSpeechRecognizer pour le volet audio-vers-texte du même problème. Lorsque vous dépassez entièrement les modèles intégrés d’Apple, exécuter vos propres modèles sur Apple silicon avec Core AI constitue l’étape suivante. Le carrefour complet de la série est la Apple Ecosystem Series.

Références


  1. Apple, WWDC 2026 session 253, Meet the Music Understanding framework. Source du cadrage sur l’exécution sur l’appareil, la confidentialité et le mode hors ligne ; des fonctionnalités de détection de tempo dans Final Cut Pro et de montage sur iPad ; des six domaines d’analyse (tonalité, rythme, structure, allure, activité des instruments et sonie) et des définitions des briques élémentaires d’un morceau ; de la MusicUnderstandingSession initialisée à partir d’un AVAsset ou d’un fournisseur audio ; de analyze() face à analyze(for:) et du SessionResult composé de champs optionnels ; de la configuration de l’AVURLAsset et de PreferPreciseDurationAndTimingKey via le fileImporter SwiftUI ; des types TimedValue/CMTime et RangedValue/CMTimeRange ; des types KeyResult/KeySignature (tonique et mode), RhythmResult/beatsPerMinute (optionnel en deçà de deux battements), StructureResult (sections, segments, phrases), PaceResult, InstrumentActivityResult (ranges et activity, activity sous forme de TimedValue de Float) et LoudnessResult (LUFS, fenêtres integrated/momentary/shortTerm, crête en décibels) ; de l’AsyncSequence de sonie en flux continu livrant des valeurs toutes les 100 ms avec deux tâches concurrentes ; de l’AudioProvider se conformant à AsyncSequence, produisant des objets AVReadOnlyAudioPCMBuffer et envoyant un dernier nil ; des résultats codables et de l’export par JSONEncoder ; et de l’algorithme de la tuile Video fondé sur la structure et l’allure. 

Articles connexes

Ce que l'équipe Swift d'Apple a dit lors du lab de la WWDC26

Le Swift Group Lab d'Apple à la WWDC26 s'est déroulé sans sous-titres. Nous l'avons transcrit en local. Réponses franche…

14 min de lecture

Les nouveautés de Swift (2026) : la mise à jour de la WWDC26

Swift 6.3 et 6.4 issus de la WWDC26 : disponibilité anyAppleOS, sélecteurs de module, accesseurs borrow/mutate, le proto…

19 min de lecture

The Robots Are Taking Exams in My Search Console

First-party GSC data: 91% of 3.8M impressions fail a human-query filter. Exam questions, pasted errors, and agent sweeps…

10 min de lecture