音頻概述

Sound wave

音頻特徵

Qt Multimedia 提供瞭涵蓋低級/高級途徑的一係列音頻類:音頻輸入、輸齣和處理。

音頻實現細節

播放壓縮音頻

對於播放不簡單媒體或音頻文件、未壓縮音頻,可以使用 QMediaPlayer C++ 類,或 MediaPlayer QML 類型。 QMediaPlayer 類和關聯 QML 類型還能播放 視頻 ,若有要求。

支持的媒體格式 for more detail.

媒體播放器需要連接到 QAudioOutput 對象 (或 QML AudioOutput 元素) 以迴放音頻。

這裏是如何使用 C++ 播放本地文件:

player = new QMediaPlayer;
audioOutput = new QAudioOutput;
player->setAudioOutput(audioOutput);
// ...
player->setSource(QUrl::fromLocalFile("/Users/me/Music/coolsong.mp3"));
audioOutput->setVolume(0.5);
player->play();
					

QML 中的相同功能:

MediaPlayer {
    audioOutput: AudioOutput {}
    source: "file:///path/to/my/music.mp3"
    Component.onCompleted: { play() }
}
					

把音頻錄製到文件

要將音頻錄製到文件,需要創建捕獲會話並把音頻輸入和錄製器連接到它。這些元素的實現是采用 QMediaCaptureSession , QAudioInput ,和 QMediaRecorder 類。默認構造 QAudioInput 選擇係統默認音頻輸入。錄製器采用簡單 record() 和 stop() 函數控製記錄過程。此外,還可以使用它選擇輸齣位置、音頻編碼器或文件容器格式。

從默認麥剋風錄製音頻的會話,在 C++ 中看起來如下:

QMediaCaptureSession session;
QAudioInput audioInput;
session.setAudioInput(&input);
QMediaRecorder recorder;
session.setRecorder(&recorder);
recorder.setQuality(QMediaRecorder::HighQuality);
recorder.setOutputLocation(QUrl::fromLocalFile("test.mp3"));
recorder.record();
					

在 QML 中,同樣可以達成通過:

CaptureSession {
    audioInput: AudioInput {}
    mediaRecorder: MediaRecorder {
        id: recorder
        outputLocation: "file:///path/to/test.mp3"
    }
    Component.onCompleted: { recorder.record() }
}
					

QMediaCaptureSession 還為更復雜用例提供支持,譬如:圖像捕獲或視頻錄製。

低延遲音效

除瞭 原生訪問 聲音設備, QSoundEffect 類 (和 SoundEffect QML 類型) 提供播放聲音的更抽象方式。此類允許指定 WAV 格式 文件,然後可以按低延遲播放,當有必要時。

可以調節:

低電平音頻迴放和錄製

Qt Multimedia 的 C++ API 提供瞭用於原生訪問音頻輸入和輸齣設施的類,允許應用程序從像麥剋風的設備接收原生數據,並將原生數據寫入揚聲器或其它設備。這些類一般不做任何音頻解碼或其它處理,但它們可以支持不同類型的原生音頻數據。

The QAudioSink 類提供原生音頻數據輸齣,而 QAudioSource 提供原生音頻數據輸入。可用硬件確定什麼音頻輸齣和輸入可用。

壓入和拉齣

低級音頻類可以運轉於 2 種模式下 push and pull 。在 pull 模式,音頻設備的啓動是通過將它賦予 QIODevice 。對於輸齣設備, QAudioSink 類將 pull (拉齣) 數據從 QIODevice (使用 QIODevice::read ()) 當要求更多音頻數據時。相反,對於 pull 模式采用 QAudioSource ,當音頻數據可用時,數據將被直接寫入 QIODevice .

push 模式,音頻設備提供 QIODevice 實例,可以根據需要寫入或讀取。通常,這導緻更簡單的代碼但更多的緩衝,可能影響延遲。

把壓縮音頻解碼到內存

在某些情況下,可能想要解碼壓縮音頻文件並作進一步處理。例如,混閤多個樣本或使用自定義數字信號處理算法。 QAudioDecoder 支持解碼本地文件或數據流從 QIODevice 實例。

這裏是本地文件解碼範例:

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

The Qt Spatial Audio module provides an API for implementation sound fields in 3D space.

參考文檔編製

C++ 類

QAmbientSound

立體聲疊加聲音

QAudioBuffer

錶示具有特定格式和采樣率的一批音頻樣本

QAudioBufferInput

用於透過 QMediaCaptureSession 嚮 QMediaRecorder 提供自定義音頻緩衝

QAudioBufferOutput

用於捕獲由 QMediaPlayer 提供的音頻數據

QAudioDecoder

實現解碼音頻

QAudioDevice

音頻設備及其功能的有關信息

QAudioEngine

管理 3D 聲場

QAudioFormat

存儲音頻流參數信息

QAudioInput

錶示音頻的輸入通道

QAudioListener

定義由 QAudioEngine 定義聲場的收聽人的位置和取嚮

QAudioOutput

錶示音頻的輸齣通道

QAudioRoom

QAudioSink

把音頻數據發送到音頻輸齣設備的接口

QAudioSource

從音頻輸入設備接收音頻數據的接口

QMediaCaptureSession

允許捕獲音頻/視頻內容

QMediaRecorder

用於編碼和錄製捕獲會話

QSoundEffect

播放低延遲音效的辦法

QSpatialSound

3D 空間中的聲音對象

QtAudio

包含用於音頻類的枚舉

QML 類型

AmbientSound

立體聲疊加聲音

AudioEngine

管理 3D 場景中的聲音對象

AudioInput

用於在捕獲會話中捕獲音頻的音頻輸入

AudioListener

定義由 AudioEngine 定義聲場的收聽人的位置和取嚮

AudioOutput

用於迴放或監視捕獲會話的音頻輸齣

AudioRoom

CaptureSession

允許捕獲音頻/視頻內容

MediaPlayer

將媒體迴放添加描述到場景

MediaRecorder

用於編碼和錄製在 CaptureSession 中生成的媒體

PlaybackOptions

Low level media playback options

SoundEffect

提供在 QML 中播放音效方式的類型

SpatialSound

3D 空間中的聲音對象

audioDevice

描述音頻設備

mediaMetaData

為媒體文件提供元數據

範例

音頻設備範例

Testing the available audio devices and their configuration.

音頻輸齣範例

Enabling audio playback using the QAudioSink class.

音頻錄製器範例

Discovering the available devices and supported codecs.

音頻源範例

Recording audio using the QAudioSource class.

空間音頻平移範例

Shows some of the capabilities of the spatial audio engine in Qt