Audio-Übersicht
Audio-Merkmale
Qt Multimedia bietet eine Reihe von Audioklassen, die sowohl einfache als auch anspruchsvolle Ansätze für Audioeingabe, -ausgabe und -verarbeitung abdecken.
Details zur Audio-Implementierung
Komprimiertes Audio abspielen
Für die Wiedergabe von Medien oder Audiodateien, bei denen es sich nicht um einfache, unkomprimierte Audiodateien handelt, können Sie die C++-Klasse QMediaPlayer oder den QML-Typ MediaPlayer verwenden. Die Klasse QMediaPlayer und die zugehörigen QML-Typen können bei Bedarf auch Videos abspielen.
Weitere Einzelheiten finden Sie unter Unterstützte Medienformate.
Der Media Player muss mit einem QAudioOutput Objekt (oder dem QML AudioOutput Element) verbunden sein, um Audio wiedergeben zu können.
Hier sehen Sie, wie Sie eine lokale Datei mit C++ abspielen:
player = new QMediaPlayer; audioOutput = new QAudioOutput; player->setAudioOutput(audioOutput); // ... player->setSource(QUrl::fromLocalFile("/Users/me/Music/coolsong.mp3")); audioOutput->setVolume(50); player->play();
Die gleiche Funktionalität in QML:
MediaPlayer { audioOutput: AudioOutput {} source: "file:///path/to/my/music.mp3" Component.onCompleted: { play() } }
Audio in einer Datei aufnehmen
Um Audio in einer Datei aufzuzeichnen, müssen Sie eine Aufnahmesitzung erstellen und mit dieser einen Audioeingang und einen Rekorder verbinden. Diese Elemente werden mit den Klassen QMediaCaptureSession, QAudioInput und QMediaRecorder implementiert. Die Standardkonstruktion QAudioInput wählt den Standard-Audioeingang des Systems aus. Der Rekorder steuert den Aufnahmeprozess mit einfachen record()- und stop()-Funktionen. Außerdem können Sie damit den Ausgabeort, den Audio-Encoder oder das Dateicontainerformat auswählen.
Eine Sitzung, die Audio vom Standardmikrofon aufnimmt, würde in C++ wie folgt aussehen:
QMediaCaptureSession session; QAudioInput audioInput; session.setAudioInput(&input); QMediaRecorder recorder; session.setRecorder(&recorder); recorder.setQuality(QMediaRecorder::HighQuality); recorder.setOutputLocation(QUrl::fromLocalFile("test.mp3")); recorder.record();
In QML kann das Gleiche erreicht werden durch:
CaptureSession { audioInput: AudioInput {} mediaRecorder: MediaRecorder { id: recorder outputLocation: "file:///path/to/test.mp3" } Component.onCompleted: { recorder.record() } }
QMediaCaptureSession bietet auch Unterstützung für komplexere Anwendungsfälle wie Bild- oder Videoaufzeichnung.
Toneffekte mit niedriger Latenzzeit
Neben dem direkten Zugriff auf Soundgeräte bietet die Klasse QSoundEffect (und der QML-Typ SoundEffect ) eine abstraktere Möglichkeit zur Wiedergabe von Sounds. Mit dieser Klasse können Sie eine Datei im WAV-Format angeben, die dann bei Bedarf mit geringer Latenz abgespielt werden kann.
Sie können die:
- Number of loops in der ein Soundeffekt abgespielt wird.
- Volume des Soundeffekts.
- Muting des Soundeffekts.
Low-Level-Audiowiedergabe und -aufnahme
Die C++-API von Qt Multimedia bietet Klassen für den rohen Zugriff auf Audioeingabe- und -ausgabemöglichkeiten, die es Anwendungen ermöglichen, Rohdaten von Geräten wie Mikrofonen zu empfangen und Rohdaten auf Lautsprecher oder andere Geräte zu schreiben. Im Allgemeinen führen diese Klassen keine Audio-Dekodierung oder andere Verarbeitung durch, aber sie können verschiedene Arten von Audio-Rohdaten unterstützen.
Die Klasse QAudioSink bietet die Ausgabe roher Audiodaten, während QAudioSource die Eingabe roher Audiodaten ermöglicht. Die verfügbare Hardware bestimmt, welche Audioausgänge und -eingänge verfügbar sind.
Push und Pull
Die Low-Level-Audioklassen können in zwei Modi betrieben werden - push
und pull
. Im Modus pull
wird das Audiogerät gestartet, indem ihm ein QIODevice zugewiesen wird. Für ein Ausgabegerät zieht die Klasse QAudioSink Daten von QIODevice (unter Verwendung von QIODevice::read()), wenn mehr Audiodaten benötigt werden. Umgekehrt werden im Modus pull
mit QAudioSource, wenn Audiodaten verfügbar sind, die Daten direkt in QIODevice geschrieben.
Im Modus push
stellt das Audiogerät eine QIODevice -Instanz zur Verfügung, in die je nach Bedarf geschrieben oder gelesen werden kann. Dies führt in der Regel zu einem einfacheren Code, aber zu mehr Pufferung, was sich auf die Latenz auswirken kann.
Dekodierung von komprimiertem Audio in den Speicher
In manchen Fällen möchten Sie vielleicht eine komprimierte Audiodatei dekodieren und selbst weiterverarbeiten. Beispielsweise können Sie mehrere Samples mischen oder benutzerdefinierte digitale Signalverarbeitungsalgorithmen verwenden. QAudioDecoder unterstützt die Dekodierung lokaler Dateien oder Datenströme von QIODevice Instanzen.
Hier ist ein Beispiel für die Dekodierung einer lokalen Datei:
QAudioFormat desiredFormat; desiredFormat.setChannelCount(2); desiredFormat.setSampleFormat(QAudioFormat::Int16); desiredFormat.setSampleRate(48000); QAudioDecoder *decoder = new QAudioDecoder(this); decoder->setAudioFormat(desiredFormat); decoder->setSource("level1.mp3"); connect(decoder, &QAudioDecoder::bufferReady, this, &AudioDecodingExample::readBuffer); decoder->start(); // Now wait for bufferReady() signal and call decoder->read()
Spatial Audio
Das Qt Spatial Audio Modul bietet eine API für die Implementierung von Schallfeldern im 3D-Raum.
Referenz-Dokumentation
C++-Klassen
Ein Stereo-Overlay-Sound | |
Stellt eine Sammlung von Audio-Samples mit einem bestimmten Format und einer bestimmten Abtastrate dar. | |
Dient zur Bereitstellung von benutzerdefinierten Audiopuffern für QMediaRecorder über QMediaCaptureSession | |
Wird für die Erfassung von Audiodaten verwendet, die von QMediaPlayer bereitgestellt werden | |
Implementiert die Dekodierung von Audio | |
Informationen über Audiogeräte und deren Funktionalität | |
Verwaltet ein dreidimensionales Klangfeld | |
Speichert Informationen über Audiostromparameter | |
Repräsentiert einen Eingangskanal für Audio | |
Definiert die Position und Ausrichtung der Person, die ein von QAudioEngine definiertes Schallfeld hört | |
Stellt einen Ausgangskanal für Audio dar | |
Schnittstelle zum Senden von Audiodaten an ein Audioausgabegerät | |
Schnittstelle für den Empfang von Audiodaten von einem Audioeingabegerät | |
Ermöglicht das Aufnehmen von Audio- und Videoinhalten | |
Wird für die Kodierung und Aufzeichnung einer Aufnahmesitzung verwendet | |
Möglichkeit zur Wiedergabe von Soundeffekten mit geringer Latenz | |
Ein Klangobjekt im 3D-Raum | |
Enthält Enums, die von den Audioklassen verwendet werden |
QML-Typen
Ein Stereo-Overlay-Sound | |
Verwaltet Sound-Objekte innerhalb einer 3D-Szene | |
Ein Audioeingang, der für die Aufnahme von Audio in einer Capture-Sitzung verwendet wird | |
Definiert die Position und Ausrichtung der Person, die ein von einer AudioEngine definiertes Schallfeld hört | |
Ein Audioausgang für die Wiedergabe oder das Monitoring einer Capture-Session | |
Ermöglicht die Aufnahme von Audio- und Videoinhalten | |
Fügt die Medienwiedergabe zu einer Szene hinzu | |
Zur Kodierung und Aufnahme von Medien, die in einer CaptureSession erzeugt wurden | |
Typ bietet eine Möglichkeit zur Wiedergabe von Soundeffekten in QML | |
Ein Sound-Objekt im 3D-Raum | |
Beschreibt ein Audiogerät | |
Liefert Metadaten für Mediendateien |
Beispiele
Testen der verfügbaren Audiogeräte und ihrer Konfiguration. | |
Aktivieren der Audiowiedergabe mit der Klasse QAudioSink. | |
Ermitteln der verfügbaren Geräte und unterstützten Codecs. | |
Aufnehmen von Audio mit der Klasse QAudioSource. | |
Zeigt einige der Möglichkeiten der Spatial Audio Engine in Qt |
© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.