オーディオ概要
オーディオの特徴
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(50); 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 は生のオーディオデータ入力を提供します。利用可能なハードウェアによって、利用可能なオーディオ出力と入力が決まります。
プッシュとプル
低レベル・オーディオ・クラスは、push
とpull
の 2 つのモードで動作します。pull
モードでは、オーディオ・デバイスはQIODevice を与えることで起動します。出力デバイスの場合、QAudioSink クラスは、より多くのオーディオ・データが必要になると、QIODevice (QIODevice::read ()を使用)からデータをプルします。逆に、QAudioSource を使用したpull
モードでは、オーディオデータが利用可能な場合、データは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()
空間オーディオ
Qt Spatial Audioモジュールは、3D空間に音場を実装するためのAPIを提供します。
参考ドキュメント
C++ クラス
ステレオオーバレイサウンド | |
特定のフォーマットとサンプル・レートのオーディオ・サンプルのコレクションを表します。 | |
QMediaCaptureSessionを通してQMediaRecorderにカスタムオーディオバッファを提供するために使用されます。 | |
QMediaPlayerによって提供されるオーディオデータをキャプチャするために使用されます。 | |
オーディオのデコードの実装 | |
オーディオデバイスとその機能に関する情報 | |
3次元音場の管理 | |
オーディオストリームのパラメータ情報を格納 | |
オーディオの入力チャンネルを表す | |
QAudioEngineで定義された音場を聴く人の位置と向きを定義します。 | |
オーディオの出力チャンネルを表す | |
音声出力デバイスに音声データを送信するためのインターフェース | |
音声入力デバイスから音声データを受信するためのインターフェース | |
オーディオおよびビデオコンテンツのキャプチャを可能にする | |
キャプチャセッションのエンコードと記録に使用 | |
低レイテンシーのサウンドエフェクトを再生する方法 | |
3D空間のサウンドオブジェクト | |
オーディオクラスが使用する列挙型を含む |
QMLタイプ
ステレオオーバーレイサウンド | |
3Dシーン内のサウンドオブジェクトを管理する | |
キャプチャセッションでオーディオをキャプチャするためのオーディオ入力 | |
AudioEngineで定義された音場を聴く人の位置や向きを定義する。 | |
キャプチャセッションの再生やモニタリングに使用するオーディオ出力 | |
オーディオとビデオコンテンツのキャプチャが可能 | |
シーンにメディア再生を追加 | |
CaptureSessionで生成されたメディアのエンコードや記録用 | |
QMLで効果音を再生する方法を提供するタイプ | |
3D空間のサウンドオブジェクト | |
オーディオデバイスの記述 | |
メディアファイルのメタデータを提供 |
例
利用可能なオーディオ・デバイスとその設定のテスト | |
QAudioSinkクラスを使用してオーディオ再生を有効にする。 | |
使用可能なデバイスとサポートされているコーデックの検出。 | |
QAudioSource クラスを使用したオーディオの録音 | |
Qt の空間オーディオエンジンの機能の一部を紹介します。 |
©2024 The Qt Company Ltd. 本書に含まれるドキュメントの著作権は、それぞれの所有者に帰属します。 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。