オーディオ概要

オーディオの特徴

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() }
}

音声をファイルに録音する

オーディオをファイルに録音するには、キャプチャセッションを作成し、オーディオ入力とレコーダーを接続する必要があります。これらの要素は、QMediaCaptureSessionQAudioInputQMediaRecorder クラスで実装されています。デフォルトで構築された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には、オーディオ入出力機能に生でアクセスするためのクラスが用意されており、アプリケーションはマイクなどのデバイスから生データを受信したり、スピーカーなどのデバイスに生データを書き込むことができます。一般的に、これらのクラスはオーディオのデコードやその他の処理は行いませんが、さまざまな種類の生のオーディオデータをサポートすることができます。

QAudioSink クラスは生のオーディオデータ出力を提供し、QAudioSource は生のオーディオデータ入力を提供します。利用可能なハードウェアによって、利用可能なオーディオ出力と入力が決まります。

プッシュとプル

低レベル・オーディオ・クラスは、pushpull の 2 つのモードで動作します。pull モードでは、オーディオ・デバイスはQIODevice を与えることで起動します。出力デバイスの場合、QAudioSink クラスは、より多くのオーディオ・データが必要になると、QIODeviceQIODevice::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++ クラス

QAmbientSound

ステレオオーバレイサウンド

QAudioBuffer

特定のフォーマットとサンプル・レートのオーディオ・サンプルのコレクションを表します。

QAudioBufferInput

QMediaCaptureSessionを通してQMediaRecorderにカスタムオーディオバッファを提供するために使用されます。

QAudioBufferOutput

QMediaPlayerによって提供されるオーディオデータをキャプチャするために使用されます。

QAudioDecoder

オーディオのデコードの実装

QAudioDevice

オーディオデバイスとその機能に関する情報

QAudioEngine

3次元音場の管理

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で生成されたメディアのエンコードや記録用

SoundEffect

QMLで効果音を再生する方法を提供するタイプ

SpatialSound

3D空間のサウンドオブジェクト

audioDevice

オーディオデバイスの記述

mediaMetaData

メディアファイルのメタデータを提供

Audio Devices Example

利用可能なオーディオ・デバイスとその設定のテスト

Audio Output Example

QAudioSinkクラスを使用してオーディオ再生を有効にする。

Audio Recorder Example

使用可能なデバイスとサポートされているコーデックの検出。

Audio Source Example

QAudioSource クラスを使用したオーディオの録音

Spatial Audio Panning Example

Qt の空間オーディオエンジンの機能の一部を紹介します。

©2024 The Qt Company Ltd. 本書に含まれるドキュメントの著作権は、それぞれの所有者に帰属します。 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。