オーディオ概要

オーディオの特徴
Qt Multimedia は、オーディオの入力、出力、および処理に関する低レベルと高レベルの両方のアプローチをカバーするさまざまなオーディオクラスを提供します。
オーディオ実装の詳細
圧縮オーディオの再生
単純な非圧縮オーディオではないメディアやオーディオファイルを再生するには、QMediaPlayer C++クラス、またはMediaPlayer QML型を使用します。QMediaPlayer クラスと関連する QML タイプは、必要に応じてビデオを再生することもできます。
詳しくは「対応メディア形式」をご覧ください。
オーディオを再生するには、メディアプレーヤーを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形式のファイルを指定することができ、必要に応じて低遅延で再生することができます。
を調整することができます:
- Number of loops 効果音を再生する
- Volume 効果音の
- Muting 効果音の
ローレベル音声入出力
Qt Multimedia の C++ API には、オーディオ入出力機能に生でアクセスするためのクラスが用意されており、アプリケーションはマイクなどのデバイスから生データを受信したり、スピーカーやその他のデバイスに生データを書き込むことができます。一般的に、これらのクラスはオーディオのデコードやその他の処理は行いませんが、さまざまな種類の生のオーディオ・データをサポートすることができます。
QAudioSink クラスは生のオーディオデータ出力を提供し、QAudioSource は生のオーディオデータ入力を提供します。利用可能なハードウェアによって、利用可能なオーディオ出力と入力が決まります。
QIODeviceを使ったプッシュとプル
低レベル・オーディオ・クラスは、push とpull の 2 つのモードで動作します。pull モードでは、オーディオ・デバイスはQIODevice を与えることで起動します。出力デバイスの場合、QAudioSink クラスは、より多くのオーディオ・データが必要になると、QIODevice (QIODevice::read ()を使用)からデータをプルします。逆に、QAudioSource を使ったpull モードでは、オーディオ・データが利用可能な場合、データはQIODevice に直接書き込まれます。
push モードでは、オーディオ・デバイスはQIODevice インスタンスを提供し、必要に応じて書き 込んだり読み込んだりすることができます。
注: QIODevice はオーディオ・デバイスに即座にアクセスするのではなく、データを内部的にバッファーします。つまり、QIODevice はアプリケーション・スレッドからいつでもデータの書き込みや読み出しに使用でき、通常250msのバッファリングが追加されます。アプリケーションがオーディオ・データをQIODevice に十分に速く送れなかったり(QAudioSink の場合)、QIODevice を十分に速く読み出せなかったりすると、オーディオのドロップアウトが発生します。
コールバックベースのインターフェース
低レベル・オーディオ・クラスは、QIODevice ベースのインターフェイスを使用することに加えて、コールバック・ベースのインターフェイスを提供します。このインターフェイスを使用すると、ユーザーは、オーディオ・デバイスがより多くのデータを必要としたり、配信したりするたびに、オーディオ・スレッドで呼び出されるコールバックを登録することができます。これにより、アプリケーションはオーディオスレッド上で直接データを処理できるため、より低レイテンシーのオーディオ処理が可能になります。
{ QAudioFormatformat;// フォーマットを設定する。例えば、format.setSampleRate(44100); format.setChannelCount(2); format.setSampleFormat(QAudioFormat::Float); QAudioDeviceinfo(QMediaDevices::defaultAudioOutput());if(!info.isFormatSupported(format)) { { { フォーマットを設定します。 qWarning() << "Raw audio format not supported by backend, cannot play audio.";
return; } audio= newQAudioSink(format, this);floatphaseIncrement= 2 *M_PI* 220.0 /format.sampleRate();// 220 Hz サイン波 audio->start([&phase,phaseIncrement](QSpan<float>interleavedAudioBuffer) {// オーディオコールバックは、ブロックされる可能性のある関数を呼び出すべきではありません // オーディオバッファをサイン波で埋めます const intsampleCount=interleavedAudioBuffer.size()/ 2;// ステレオなので2で割る for(inti= 0; i<sampleCount;++i) {floatsample=std::sin(phase); interleavedAudioBuffer[i* 2] =sample;// 左チャンネルinterleavedAudioBuffer[i* 2 + 1] =sample;// 右チャンネルphase+=phaseIncrement;// 次のサンプルのために位相をインクリメント} });if(!audio->error()==QtAudio::Error::NoError) {// 他のstart()シグネチャに加えて、 バックエンドがコールバックベースのIOを実装していない 場合、 // * オーディオコールバックの開始は失敗します (APIはすべての主要な プラットフォームで 利用可能です ) // * オーディオコールバックのシグネチャがformat.sampleFormat()と一致しない 場合。
qWarning() << "Error starting audio output:" << audio->errorString();
} }注: このAPIはコールバックAPIをサポートするプラットフォームでのみ利用可能です:AppleのCoreAudio(macOS、iOSなど)、Windows、Linux(PulseAudioまたはPipeWireバックエンドを使用)、Androidです。
注意: コールバックはソフトリアルタイムオーディオスレッドで呼び出されます。コールバックがブロックされないようにすることが重要です。これは、オーディオのグリッチやドロップアウトを引き起こす可能性があるからです。これには、ブロッキングIOの実行、ミューテックスのロック、メモリの割り当て、その他ブロックする可能性のある操作が含まれます。ベストプラクティスについては、Ross Bencinaの記事Real-time audio programming 101: time waits for nothing を参照してください。また、オーディオコールバックを検証するためにclangのリアルタイムサニタイザーを使うことを検討してください。
圧縮されたオーディオをメモリにデコードする
圧縮されたオーディオファイルをデコードして、さらに自分で処理したい場合があります。例えば、複数のサンプルをミックスしたり、カスタムのデジタル信号処理アルゴリズムを使ったりする場合です。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()
空間オーディオ
この Qt Spatial Audioモジュールは、3D空間に音場を実装するためのAPIを提供します。
参考ドキュメント
C++クラス
ステレオオーバレイサウンド | |
特定のフォーマットとサンプル・レートのオーディオ・サンプルのコレクションを表します。 | |
QMediaCaptureSessionを通してQMediaRecorderにカスタムオーディオバッファを提供するために使用されます。 | |
QMediaPlayerによって提供されるオーディオデータをキャプチャするために使用されます。 | |
オーディオのデコードの実装 | |
オーディオデバイスとその機能に関する情報 | |
3次元音場の管理 | |
オーディオストリームのパラメータ情報を格納 | |
オーディオの入力チャンネルを表す | |
QAudioEngineで定義された音場を聴く人の位置と向きを定義します。 | |
オーディオの出力チャンネルを表す | |
音声出力デバイスに音声データを送信するためのインターフェース | |
音声入力デバイスから音声データを受信するためのインターフェース | |
オーディオおよびビデオコンテンツのキャプチャを可能にする | |
キャプチャセッションのエンコードと記録に使用 | |
低レイテンシーのサウンドエフェクトを再生する方法 | |
3D空間のサウンドオブジェクト | |
オーディオクラスが使用する列挙型を含む |
QMLタイプ
ステレオオーバーレイサウンド | |
3Dシーン内のサウンドオブジェクトを管理する | |
キャプチャセッションでオーディオをキャプチャするためのオーディオ入力 | |
AudioEngineで定義された音場を聴く人の位置や向きを定義する。 | |
キャプチャセッションの再生やモニタリングに使用するオーディオ出力 | |
オーディオとビデオコンテンツのキャプチャが可能 | |
シーンにメディア再生を追加 | |
CaptureSessionで生成されたメディアのエンコードと記録用 | |
低レベルのメディア再生オプション | |
このタイプは、QMLでサウンドエフェクトを再生する方法を提供します。 | |
3D空間のサウンドオブジェクト | |
オーディオデバイスの記述 | |
メディアファイルのメタデータを提供する |
例
利用可能なオーディオ・デバイスとその設定の一覧。 | |
QAudioSinkクラスを使用したオーディオ再生の有効化。 | |
使用可能なデバイスとサポートされているコーデックの検出。 | |
QAudioSource クラスを使ったオーディオの録音 | |
Qt の Spatial Audio エンジンの機能の一部を紹介します。 |
© 2026 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.