Audio Overview¶
Playback, recording and processing of Audio.
Audio Features¶
Qt Multimedia offers a range of audio classes that cover both low and high level approaches to: audio input, output and processing.
Audio Implementation Details¶
Playing Compressed Audio¶
For playing media or audio files that are not simple, uncompressed audio, you can use the QMediaPlayer
C++ class, or the MediaPlayer QML type. The QMediaPlayer
class and associated QML types are also capable of playing video , if required. The audio formats that the player supports depends on:
The operating system environment.
Any decoder plugins the user may have installed.
The media player needs to be connected to a QAudioOutput
object (or the QML AudioOutput element) to play back audio.
Here is how you play a local file using C++:
player = QMediaPlayer audioOutput = QAudioOutput player.setAudioOutput(audioOutput) # ... player.setSource(QUrl.fromLocalFile("/Users/me/Music/coolsong.mp3")) audioOutput.setVolume(50) player.play()
The same functionality in QML:
Recording Audio to a File¶
To record audio to a file, you need to create a capture session and connect to it an audio input and a recorder. These elements are implemented with the QMediaCaptureSession
, QAudioInput
, and QMediaRecorder
classes. The default constructed QAudioInput
selects the system default audio input. The recorder controls the recording process with a simple record() and stop() functions. Additionally, you can use it to select the output location, audio encoder, or file container format.
A session recording audio from the default microphone would look as follows in C++:
session = QMediaCaptureSession() audioInput = QAudioInput() session.setAudioInput(input) recorder = QMediaRecorder() session.setMediaRecorder(recorder) recorder.setQuality(QMediaRecorder.HighQuality) recorder.setOutputLocation(QUrl.fromLocalFile("test.mp3")) recorder.record()
In QML, the same can be achieved by:
QMediaCaptureSession
also provides support for more complex use cases such as image capturing or video recording.
Low Latency Sound Effects¶
In addition to raw access to sound devices, the QSoundEffect
class (and SoundEffect QML type) offers a more abstract way to play sounds. This class allows you to specify a WAV format file, which can then be played with low latency when necessary.
You can adjust the:
Number of loops
in which a sound effect is played.
Volume
of the sound effect.
Muting
of the sound effect.
Low Level Audio Playback and Recording¶
The C++ API of Qt Multimedia offers classes for raw access to audio input and output facilities, allowing applications to receive raw data from devices like microphones, and to write raw data to speakers or other devices. Generally these classes do not do any audio decoding, or other processing, but they can support different types of raw audio data.
The QAudioSink
class offers raw audio data output, while QAudioSource
offers raw audio data input. The available hardware determines what audio outputs and inputs are available.
Push and Pull¶
The low level audio classes can operate in two modes - push
and pull
. In pull
mode, the audio device is started by giving it a QIODevice
. For an output device, the QAudioSink
class will pull data from the QIODevice
(using read()
) when more audio data is required. Conversely, for pull
mode with QAudioSource
, when audio data is available then the data will be written directly to the QIODevice
.
In push
mode, the audio device provides a QIODevice
instance that can be written or read to as needed. Typically, this results in simpler code but more buffering, which may affect latency.
Decoding Compressed Audio to Memory¶
In some cases you may want to decode a compressed audio file and do further processing yourself. For example, mixing multiple samples or using custom digital signal processing algorithms. QAudioDecoder
supports decoding local files or data streams from QIODevice
instances.
Here’s an example of decoding a local file:
desiredFormat = QAudioFormat() desiredFormat.setChannelCount(2) desiredFormat.setSampleFormat(QAudioFormat.Int16) desiredFormat.setSampleRate(48000) decoder = QAudioDecoder(self) decoder.setAudioFormat(desiredFormat) decoder.setSource("level1.mp3") connect(decoder, SIGNAL(bufferReady()), self, SLOT(readBuffer())) decoder.start() # Now wait for bufferReady() signal and call decoder->read()
Examples¶
There are both C++ and QML examples available.
C++ Examples¶
Reference Documentation¶
C++ Classes¶
The QAudio namespace contains enums used by the audio classes.
PySide6.QtMultimedia.QAudioBuffer
The QAudioBuffer class represents a collection of audio samples with a specific format and sample rate.
PySide6.QtMultimedia.QAudioDecoder
The QAudioDecoder class implements decoding audio.
PySide6.QtMultimedia.QAudioDevice
The QAudioDevice class provides an information about audio devices and their functionality.
PySide6.QtMultimedia.QAudioFormat
The QAudioFormat class stores audio stream parameter information.
PySide6.QtMultimedia.QAudioInput
Represents an input channel for audio.
PySide6.QtMultimedia.QAudioOutput
Represents an output channel for audio.
PySide6.QtMultimedia.QAudioSink
The QAudioSink class provides an interface for sending audio data to an audio output device.
PySide6.QtMultimedia.QAudioSource
The QAudioSource class provides an interface for receiving audio data from an audio input device.
PySide6.QtMultimedia.QSoundEffect
The QSoundEffect class provides a way to play low latency sound effects.
PySide6.QtMultimedia.QMediaCaptureSession
The QMediaCaptureSession class allows capturing of audio and video content.
PySide6.QtMultimedia.QMediaRecorder
The QMediaRecorder class is used for encoding and recording a capture session.
QML Types¶
Describes an audio device.
An audio input to be used for capturing audio in a capture session.
An audio output to be used for playback or monitoring of a capture session.
The SoundEffect type provides a way to play sound effects in QML.
Adds media playback to a scene.
Provides meta-data for media files.
Allows capturing of audio and video content.
For encoding and recording media generated in a CaptureSession.
Defines an item in a Playlist.
© 2022 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.