このページでは

オーディオ概要

音波

オーディオの特徴

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

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

オーディオをファイルに録音するには、キャプチャセッションを作成し、オーディオ入力とレコーダーを接続する必要があります。これらの要素は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 は生のオーディオデータ入力を提供します。利用可能なハードウェアによって、利用可能なオーディオ出力と入力が決まります。

QIODeviceを使ったプッシュとプル

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

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

PlaybackOptions

低レベルのメディア再生オプション

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 の 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.