Music Understanding vorgestellt: On-Device-Audioanalyse
Auf der WWDC 2026 hat das Final-Cut-Pro-Team von Apple zwei Funktionen vorgestellt, die auf einem einzigen Framework aufbauen: eine Beat-Erkennung, die das Beat-Raster eines Songs sichtbar macht, damit Editoren Schnitte an Takten und Beats ausrichten können, sowie eine Montagefunktion auf dem iPad, die Clips automatisch mit der Musik synchronisiert.1 Beide laufen auf Music Understanding, einem neuen Framework, das Ihnen die musikalische Intelligenz eines Songs (Tonart, Rhythmus, Struktur, Tempo, Instrumentaktivität und Lautstärke) liefert, ohne dass Sie irgendetwas über Signalverarbeitung oder maschinelles Lernen wissen müssen. Es läuft vollständig auf dem Gerät, sodass die analysierten Audiodaten privat bleiben und auch offline funktionieren.1 Dieser Beitrag durchläuft das Framework Schritt für Schritt: die sechs Analysebereiche, wie eine MusicUnderstandingSession sie erzeugt, und die Streaming-Lautstärke-AsyncSequence, die audioreaktive Visualisierungen praktikabel macht.
Kurz gefasst
- Music Understanding analysiert sechs Bereiche eines Songs (Tonart, Rhythmus, Struktur, Tempo, Instrumentaktivität und Lautstärke) direkt auf dem Gerät, ganz ohne Fachwissen in Signalverarbeitung oder maschinellem Lernen.1
- Sie erstellen eine
MusicUnderstandingSessionaus einemAVAssetoder einem eigenen Audio-Provider und rufen dannanalyze()für alles oderanalyze(for:)auf, um gezielt bestimmte Typen anzufordern und unnötige Berechnungen zu vermeiden.1 - Die Ergebnisse kommen in einer
SessionResult-Struktur an, in der jedes Merkmal ein optionales Feld ist; das allgemeineanalyze()füllt sie alle, das gezielteanalyze(for:)lässt den Rest aufnil.1 - Zwei zeitbezogene Typen ziehen sich durch die API: Ein
TimedValuekoppelt einen Wert mit einerCMTime, einRangedValuekoppelt einen Wert mit einerCMTimeRange.1 MusicUnderstandingSessionstellt außerdem eine Streaming-Lautstärke-API bereit, die für je 100 ms analysierten Audios Werte über eineAsyncSequenceliefert — die Grundlage für eine live laufende, audioreaktive Animation.1
Warum musikalische Intelligenz auf dem Gerät wichtig ist
Conner aus Apples Computational Music Team führt ab Minute 1:39 die sechs Analysebereiche des Frameworks auf.
Das Versprechen ist eng gefasst und ehrlich: Das Framework „erledigt die gesamte Signalverarbeitung und Modellinferenz für Sie, sodass Sie keinerlei Fachwissen in Signalverarbeitung oder maschinellem Lernen benötigen, um es zu nutzen”.1 Damit entfällt genau der Teil der Audioanalyse, den die meisten App-Entwickler nie selbst verantworten wollten. Ein Tempo zu erkennen, einen Song in Refrain und Strophe zu zerlegen oder die wahrgenommene Lautstärke zu messen — all das bedeutete früher entweder die Lizenzierung einer Drittanbieter-Engine oder den Aufbau einer DSP-Pipeline von Hand.
Auch die Datenschutzrechnung ändert sich, wenn alles auf dem Gerät läuft. Da das Framework „vollständig auf dem Gerät läuft, bleiben die analysierten Audiodaten privat und funktionieren offline”.1 Ein Song verlässt das Telefon nie zur Analyse, und die Analyse funktioniert auch im Flugzeug ohne Empfang. Für eine DJ-App, die eine Bibliothek nach Tempo sortiert, oder einen Videoeditor, der Schnitte an Beats ausrichtet, ist genau diese Kombination — keine Netzwerkabhängigkeit und keine Audiodaten, die das Gerät verlassen — der entscheidende Vorteil in der Praxis.
Apple beschreibt die sechs Bereiche als die Bausteine eines Songs. Der Rhythmus ist der Puls, getragen von einzelnen Beats, die sich zu Takten aufbauen; die Anzahl der Beats pro Minute ist die Beats per Minute, kurz bpm.1 Takte bilden Phrasen (musikalische Sätze), Phrasen verbinden sich zu Segmenten, und Segmente bauen Abschnitte wie Refrain, Strophe, Intro oder Bridge auf.1 Instrumente wie Schlagzeug, Bass oder Gesang erklingen zu unterschiedlichen Zeiten und in unterschiedlicher Intensität rund um einen gemeinsamen Satz von Noten, die als Tonart bezeichnet werden.1 Ein Song kann ein gleichbleibendes bpm halten, während sich einzelne Teile langsamer oder schneller anfühlen — das nennt Apple Tempo (pace) —, und an manchen Stellen wird der Song lauter als an anderen.1 Diese sechs Konzepte bilden sich eins zu eins auf die Ergebnistypen des Frameworks ab.
Die Session: ein Objekt, zwei Arten zu fragen
Apps interagieren mit einer MusicUnderstandingSession, die „entweder mit einem AVAsset oder einem eigenen Audio-Provider” initialisiert wird.1 Um die Analyse auszuführen, rufen Sie analyze auf und warten auf die Ergebnisse. Standardmäßig wird für alle Typen analysiert, und Apple benennt den Performance-Hebel deutlich: „Für höchste Performance können Sie angeben, an welchen Analysetypen Sie interessiert sind, um unnötige Berechnungen zu vermeiden.”1 Nur das zu berechnen, was Sie auch darstellen, macht den Unterschied zwischen einem reaktionsschnellen Werkzeug und einem, das bei jedem Laden ins Stocken gerät.
Die Beispiel-App, Music Understanding Lab, zeigt den Dateipfad von Anfang bis Ende. Ein SwiftUI-fileImporter wählt einen Song aus und gibt dessen URL zurück, und aus dieser URL wird ein AVURLAsset. Apple weist auf eine Einstellung als entscheidend hin: Setzen Sie PreferPreciseDurationAndTimingKey auf true, „um die genauesten Ergebnisse sicherzustellen”.1 Anschließend erstellen Sie die Session aus dem Asset, rufen analyze auf und warten auf die Rückgabe der Session-Ergebnisse.
Diese Ergebnisse landen in einer SessionResult-Struktur, in der „jedes von Music Understanding analysierte Merkmal sein eigenes Ergebnisfeld erhält. Dies sind allesamt Optionals.”1 Die beiden Einstiegspunkte unterscheiden sich darin, was sie füllen. Die allgemeine analyze()-API stellt alle Ergebnisse bereit. Die gezielte analyze(for:)-API gibt nur die angeforderten Ergebnisse zurück, und „der Rest wird nil sein”.1 Die Optionalität ist also kein Zufall des API-Designs; sie ist die Art und Weise, wie Ihnen das Framework mitteilt, welche Arbeit es tatsächlich erledigt hat.
Zwei Typen tauchen im gesamten Framework immer wieder auf, um einem Wert eine Zeit zuzuordnen. Ein TimedValue verknüpft einen Wert mit einer CMTime (einem einzelnen Zeitpunkt), ein RangedValue verknüpft eine CMTimeRange mit einem Wert (einer Zeitspanne).1 Nahezu jedes Ergebnis weiter unten wird in einer dieser beiden Formen ausgedrückt — wer sie einmal lernt, profitiert davon über alle sechs Bereiche hinweg.
Ein Gang durch die sechs Ergebnisse
Tonart. Für die Tonartanalyse gibt das Framework eine KeyResult-Struktur zurück, die „ein Array von Bereichen enthält, das eine KeySignature über einen RangedValue auf einen bestimmten Zeitbereich abbildet”.1 Eine KeySignature enthält einen Grundton (tonic) und einen Modus (mode). Der Grundton „kann jede der standardmäßigen chromatischen Tonhöhen sein” und steht für den Grundton (etwa C oder G), um den der Song aufgebaut ist; der Modus „ist entweder Dur oder Moll”.1 Da das Ergebnis ein Array von Bereichen ist und kein einzelner Wert, kommt die API auch mit Songs zurecht, die mitten im Stück die Tonart wechseln.
Rhythmus. Die Analyse auf Rhythmus liefert ein RhythmResult. Die Struktur gibt Ihnen „die Zeitstempel für jeden Beat und jeden Takt als Arrays von CMTime” sowie das globale Gesamttempo über beatsPerMinute.1 Ein Detail ist für Live-UIs wichtig: beatsPerMinute ist optional, „denn wenn das Framework noch nicht genug Audio verarbeitet hat, um mindestens zwei Beats zu finden, wird das bpm auf nil gesetzt”.1 Für ein Intervall braucht es zwei Beats — das nil ist also die Weigerung des Frameworks, zu raten.
Struktur. Eine Anforderung der Strukturanalyse gibt ein StructureResult mit drei Eigenschaften zurück, „für sections, segments und phrases”, und für jede erhalten Sie ein Array von CMTimeRanges.1 Die drei Ebenen sind verschachtelt: Ein Abschnitt besteht aus einem oder mehreren Segmenten, und jedes Segment besteht aus Phrasen.1 Diese Hierarchie ist es, die einem Editor erlaubt, einen Schnitt an einer Refraingrenze einrasten zu lassen statt an einem beliebigen Zeitstempel.
Tempo (pace). Tempo „sagt Ihnen, wie schnell sich die Musik für den Hörer anfühlt”, wobei energiegeladenere Teile einen höheren Wert tragen als langsamere.1 Die Anforderung liefert ein PaceResult, eine Struktur mit „einer einzigen Eigenschaft, die ein Array von Ranged Values enthält”.1 Tempo (pace) ist nicht dasselbe wie bpm: Das Tempo kann konstant bleiben, während die gefühlte Energie steigt und fällt.
Instrumentaktivität. Eine Anforderung der Instrumentaktivität gibt ein InstrumentActivityResult mit zwei Eigenschaften zurück, eine für Bereiche (ranges) und eine für Aktivität (activity).1 Die Ranges-API „stellt ein Dictionary bereit, das jedes Instrument auf” einen instrumentbezogenen Wert abbildet (das Transkript bricht ab, bevor der Typ dieses Werts genannt wird), und Apple beschreibt ranges als die richtige Wahl, wenn „Sie nur wissen wollen, ob ein Instrument vorhanden ist oder nicht”.1 Die Eigenschaft activity trägt mehr Details: Sie „bildet ein Instrument auf einen TimedValue von Floats ab”, und diese Werte „drücken aus, wie intensiv ein Instrument im Zeitverlauf spielt”.1 Apple nennt das Aktivitätsergebnis „eine hervorragende Quelle, um audioreaktive Animationen anzutreiben”, denn eine momentane Intensität pro Instrument ist genau das, woran ein Visualizer andocken möchte.1
Lautstärke. Das Framework misst die Lautstärke in Loudness Units Full Scale (LUFS), „dem Industriestandard zur Modellierung, wie das menschliche Ohr Lautstärke wahrnimmt”.1 Eine Anforderung der Lautstärkeanalyse erzeugt eine LoudnessResult-Struktur, die integrated, momentary und shortTerm Loudness unterstützt.1 Integrated ist ein einzelner Wert für die Gesamtlautstärke des Audios. Momentary und shortTerm liefern beide alle 100 Millisekunden mit Zeitstempel versehene Werte, jedoch über unterschiedliche Fenster: Momentary verwendet ein 400-Millisekunden-Fenster und erfasst „kurze, plötzliche Lautstärkespitzen”, während shortTerm ein 3-Sekunden-Fenster für „eine geglättete Sicht auf den Lautstärkeverlauf im Zeitverlauf” nutzt.1 Das Ergebnis trägt außerdem einen peak-Wert, die absolut höchste gemessene Audiolautstärke in Dezibel.1
Die Streaming-Lautstärke-AsyncSequence
Die obigen Batch-APIs analysieren eine fertige Datei. Für Live-Arbeit „stellt” MusicUnderstandingSession „außerdem eine Streaming-API für die Lautstärke” bereit, bei der „die Werte für je 100 ms vom Framework analysierten Audios über eine AsyncSequence geliefert werden”.1 Ein neuer Lautstärkewert alle 100 ms ist genau die Taktung, in der ein Echtzeit-Visualizer läuft — und deshalb ist diese API, nicht die Batch-Variante, das Herzstück für eine audioreaktive UI.
Das Nutzungsmuster besteht aus zwei nebenläufigen Tasks. Sie initialisieren die Session wie zuvor und „richten dann zwei Tasks ein: einen, der die Lautstärkeergebnisse konsumiert, sobald sie geliefert werden, und einen weiteren, der die Analyse startet”.1 Der eine Task nimmt Werte aus der Sequenz entgegen und übergibt sie an Ihre Animation; der andere treibt die Analyse voran. Produzent und Konsument laufen nebeneinander, statt sich gegenseitig zu blockieren.
Um Live-Audio einzuspeisen, stellen Sie einen AudioProvider bereit. Ein AudioProvider „entspricht AsyncSequence und liefert AVReadOnlyAudioPCMBuffer-Objekte”.1 Apple benennt den Beendigungsvertrag ausdrücklich: Wenn der Provider „alle Audiopuffer gesendet hat, muss er ein abschließendes nil senden, um den Abschluss zu signalisieren”.1 Vergessen Sie das abschließende nil, wartet der konsumierende Task ewig auf Audio, das nie endet. Dass der Provider selbst eine AsyncSequence ist, macht den eleganten Teil aus: Ihre Audioquelle und die Lautstärkeausgabe des Frameworks sprechen von Anfang bis Ende dieselbe Sprache der asynchronen Iteration.
Zwei weitere Fähigkeiten der Session runden das Bild ab. Jedes Music-Understanding-Ergebnis ist codable, sodass der Export einer vollständigen Analyse nur bedeutet, „einen JSONEncoder zu erstellen und die Session-Ergebnisse zu kodieren”.1 Und die Video-Kachel der Beispiel-App zeigt, wie sich die Ergebnisse zusammensetzen: Sie „verwendet Struktur und Tempo, um ein zur Musik synchronisiertes Video zu erstellen”, indem sie die Zeitbereiche der Abschnitte bestimmt und dann anhand des Tempos jedes Abschnitts (einer Rate von Ereignissen pro Minute, geteilt durch 60 Sekunden) entscheidet, wie viele Clips in diesen Bereich passen — mit kürzeren, schnelleren Clips in energiegeladenen Teilen und längeren, langsameren Clips in ruhigen.1
Die wichtigsten Erkenntnisse
Für Entwickler von Audio- und Medien-Apps:
- Beginnen Sie mit
analyze(for:), nicht mitanalyze(): Benennen Sie nur die Analysetypen, die Sie darstellen, damit das Framework den Rest überspringt — nicht angeforderte Ergebnisse kommen ohnehin alsnilzurück.1 - Behandeln Sie
beatsPerMinutein Ihrer UI als wirklich optional; einnilbedeutet, dass das Framework noch keine zwei Beats gesehen hat, zeigen Sie also einen Wartezustand statt eines erfundenen Tempos.1 - Setzen Sie
PreferPreciseDurationAndTimingKeyauf demAVURLAssetauftrue, bevor Sie die Session erstellen, denn Apple knüpft genaue Ergebnisse an dieses Flag.1
Für Echtzeit- und Visualizer-Arbeit:
- Bauen Sie eine live audioreaktive Animation auf der Lautstärke-
AsyncSequence(ein Wert alle 100 ms) und auf der Instrument-Eigenschaftactivityauf, die jedes Instrument auf einenTimedValueder Intensität im Zeitverlauf abbildet.1 - Führen Sie einen Konsumenten-Task und einen Analyse-Task nebenläufig aus und lassen Sie Ihren eigenen
AudioProvidernach dem letztenAVReadOnlyAudioPCMBufferein abschließendesnilsenden, damit der Stream sauber endet.1
Für Katalog- und Tooling-Teams:
- Sortieren oder gruppieren Sie eine Musikbibliothek nach Tonart oder Tempo mithilfe von
KeyResultundRhythmResult, und sichern Sie Analysen, indem Sie das codableSessionResultzur Wiederverwendung als JSON kodieren.1
FAQ
Was analysiert Apples Music-Understanding-Framework?
Es analysiert sechs Bereiche eines Songs: Tonart, Rhythmus, Struktur, Tempo, Instrumentaktivität und Lautstärke. Jeder bildet sich auf einen Ergebnistyp ab (KeyResult, RhythmResult, StructureResult, PaceResult, InstrumentActivityResult und LoudnessResult), der innerhalb eines SessionResult zurückgegeben wird. Das Framework übernimmt die Signalverarbeitung und die Modellinferenz, sodass kein DSP- oder Machine-Learning-Fachwissen erforderlich ist.1
Läuft Music Understanding auf dem Gerät oder in der Cloud?
Auf dem Gerät. Apple erklärt, dass das Framework „vollständig auf dem Gerät läuft”, sodass die analysierten Audiodaten privat bleiben und offline funktionieren. Die Analyse funktioniert plattformübergreifend auf Apple-Geräten ohne Netzwerkabhängigkeit.1
Wie erhalte ich nur die Analyse, die ich brauche?
Rufen Sie analyze(for:) statt des allgemeinen analyze() auf. Der allgemeine Aufruf füllt jedes Feld des SessionResult; der gezielte Aufruf gibt nur die angeforderten Typen zurück und lässt den Rest auf nil. Apple empfiehlt, Typen anzugeben, „für höchste Performance”, um unnötige Berechnungen zu vermeiden.1
Was ist der Unterschied zwischen TimedValue und RangedValue?
Ein TimedValue verknüpft einen Wert mit einem einzelnen CMTime-Zeitpunkt, während ein RangedValue einen Wert mit einer CMTimeRange-Zeitspanne verknüpft. Beide Typen treten im gesamten Framework auf: Tonarten kommen beispielsweise als Ranged Values an, instrumentbezogene Aktivität als Timed Values.1
Wie baue ich damit einen live audioreaktiven Visualizer?
Verwenden Sie die Streaming-Lautstärke-API von MusicUnderstandingSession, die für je 100 ms analysierten Audios Werte über eine AsyncSequence liefert. Führen Sie zwei nebenläufige Tasks aus (einer konsumiert Ergebnisse, einer treibt die Analyse voran) und speisen Sie Live-Audio über einen eigenen AudioProvider ein, der AsyncSequence entspricht, AVReadOnlyAudioPCMBuffer-Objekte liefert und ein abschließendes nil sendet, um den Abschluss zu signalisieren.1
Die On-Device-Audioanalyse reiht sich neben die übrige Medienintelligenz ein, die Apple dieses Jahr ausgeliefert hat: Sehen Sie, wie On-Device-KI in iOS 27 in Spotlight und Medien Einzug hält und wie sich das Speech-Framework mit SFSpeechRecognizer vergleicht für die Audio-zu-Text-Seite desselben Problems. Wenn Sie Apples integrierte Modelle gänzlich überflügeln, ist das Ausführen eigener Modelle auf Apple Silicon mit Core AI der nächste Schritt. Der zentrale Hub der gesamten Reihe ist die Apple Ecosystem Series.
Quellen
-
Apple, WWDC 2026 Session 253, Meet the Music Understanding framework. Quelle für die On-Device-, Datenschutz- und Offline-Einordnung; die Final-Cut-Pro-Beat-Erkennung und die iPad-Montagefunktion; die sechs Analysebereiche (Tonart, Rhythmus, Struktur, Tempo, Instrumentaktivität und Lautstärke) und die Definitionen der Song-Bausteine; die aus einem
AVAssetoder Audio-Provider initialisierteMusicUnderstandingSession;analyze()versusanalyze(for:)und dasSessionResultaus optionalen Feldern; dasAVURLAsset- undPreferPreciseDurationAndTimingKey-Setup über den SwiftUI-fileImporter; die TypenTimedValue/CMTimeundRangedValue/CMTimeRange; die TypenKeyResult/KeySignature(tonic und mode),RhythmResult/beatsPerMinute(optional unterhalb von zwei Beats),StructureResult(sections, segments, phrases),PaceResult,InstrumentActivityResult(ranges und activity, activity alsTimedValuevon Floats) undLoudnessResult(LUFS, integrated/momentary/shortTerm-Fenster, peak in Dezibel); die Streaming-Lautstärke-AsyncSequence, die alle 100 ms Werte mit zwei nebenläufigen Tasks liefert; derAudioProvider, derAsyncSequenceentspricht,AVReadOnlyAudioPCMBuffer-Objekte liefert und ein abschließendesnilsendet; die codable-Ergebnisse und derJSONEncoder-Export; sowie der Struktur-und-Tempo-Algorithmus der Video-Kachel. ↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩