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:

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

QAmbientSound

Ein Stereo-Overlay-Sound

QAudioBuffer

Stellt eine Sammlung von Audio-Samples mit einem bestimmten Format und einer bestimmten Abtastrate dar.

QAudioBufferInput

Dient zur Bereitstellung von benutzerdefinierten Audiopuffern für QMediaRecorder über QMediaCaptureSession

QAudioBufferOutput

Wird für die Erfassung von Audiodaten verwendet, die von QMediaPlayer bereitgestellt werden

QAudioDecoder

Implementiert die Dekodierung von Audio

QAudioDevice

Informationen über Audiogeräte und deren Funktionalität

QAudioEngine

Verwaltet ein dreidimensionales Klangfeld

QAudioFormat

Speichert Informationen über Audiostromparameter

QAudioInput

Repräsentiert einen Eingangskanal für Audio

QAudioListener

Definiert die Position und Ausrichtung der Person, die ein von QAudioEngine definiertes Schallfeld hört

QAudioOutput

Stellt einen Ausgangskanal für Audio dar

QAudioRoom

QAudioSink

Schnittstelle zum Senden von Audiodaten an ein Audioausgabegerät

QAudioSource

Schnittstelle für den Empfang von Audiodaten von einem Audioeingabegerät

QMediaCaptureSession

Ermöglicht das Aufnehmen von Audio- und Videoinhalten

QMediaRecorder

Wird für die Kodierung und Aufzeichnung einer Aufnahmesitzung verwendet

QSoundEffect

Möglichkeit zur Wiedergabe von Soundeffekten mit geringer Latenz

QSpatialSound

Ein Klangobjekt im 3D-Raum

QtAudio

Enthält Enums, die von den Audioklassen verwendet werden

QML-Typen

AmbientSound

Ein Stereo-Overlay-Sound

AudioEngine

Verwaltet Sound-Objekte innerhalb einer 3D-Szene

AudioInput

Ein Audioeingang, der für die Aufnahme von Audio in einer Capture-Sitzung verwendet wird

AudioListener

Definiert die Position und Ausrichtung der Person, die ein von einer AudioEngine definiertes Schallfeld hört

AudioOutput

Ein Audioausgang für die Wiedergabe oder das Monitoring einer Capture-Session

AudioRoom

CaptureSession

Ermöglicht die Aufnahme von Audio- und Videoinhalten

MediaPlayer

Fügt die Medienwiedergabe zu einer Szene hinzu

MediaRecorder

Zur Kodierung und Aufnahme von Medien, die in einer CaptureSession erzeugt wurden

SoundEffect

Typ bietet eine Möglichkeit zur Wiedergabe von Soundeffekten in QML

SpatialSound

Ein Sound-Objekt im 3D-Raum

audioDevice

Beschreibt ein Audiogerät

mediaMetaData

Liefert Metadaten für Mediendateien

Beispiele

Audio Devices Example

Testen der verfügbaren Audiogeräte und ihrer Konfiguration.

Audio Output Example

Aktivieren der Audiowiedergabe mit der Klasse QAudioSink.

Audio Recorder Example

Ermitteln der verfügbaren Geräte und unterstützten Codecs.

Audio Source Example

Aufnehmen von Audio mit der Klasse QAudioSource.

Spatial Audio Panning Example

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.