QAudioSource Class

QAudioSourceクラスは、オーディオ入力デバイスからオーディオデータを受信するためのインターフェースを提供します。詳細...

Header: #include <QAudioSource>
CMake: find_package(Qt6 REQUIRED COMPONENTS Multimedia)
target_link_libraries(mytarget PRIVATE Qt6::Multimedia)
qmake: QT += multimedia
Inherits: QObject

パブリック関数

QAudioSource(const QAudioFormat &format = QAudioFormat(), QObject *parent = nullptr)
QAudioSource(const QAudioDevice &audioDevice, const QAudioFormat &format = QAudioFormat(), QObject *parent = nullptr)
virtual ~QAudioSource()
qsizetype bufferSize() const
qsizetype bytesAvailable() const
qint64 elapsedUSecs() const
QtAudio::Error error() const
QAudioFormat format() const
bool isNull() const
qint64 processedUSecs() const
void reset()
void resume()
void setBufferSize(qsizetype value)
void setVolume(qreal volume)
QIODevice *start()
void start(QIODevice *device)
QtAudio::State state() const
void stop()
void suspend()
qreal volume() const

シグナル

void stateChanged(QtAudio::State state)

詳細説明

システムのデフォルトのオーディオ入力デバイスでオーディオ入力を構築することができます。また、特定のQAudioDevice で QAudioSource を作成することも可能です。オーディオ入力を作成する際、録音に使用するQAudioFormat も送信する必要があります(詳細はQAudioFormat クラスの説明を参照)。

ファイルに録音する

QAudioSourceでは、音声入力デバイスを使って音声を録音することができます。このクラスのデフォルトのコンストラクタはシステムのデフォルトのオーディオ・デバイスを使用しますが、特定のデバイスのQAudioDevice を指定することもできます。また、録音したいQAudioFormat

QAudioSourceの起動は、書き込み用にオープンされたQIODevicestart ()を呼び出すだけです。例えば、ファイルに録音するには、次のようにします:

QFile destinationFile;   // Class member
QAudioSource* audio; // Class member
{
    destinationFile.setFileName("/tmp/test.raw");
    destinationFile.open( QIODevice::WriteOnly | QIODevice::Truncate );

    QAudioFormat format;
    // Set up the desired format, for example:
    format.setSampleRate(8000);
    format.setChannelCount(1);
    format.setSampleFormat(QAudioFormat::UInt8);

    QAudioDevice info = QMediaDevices::defaultAudioInput();
    if (!info.isFormatSupported(format)) {
        qWarning() << "Default format not supported, trying to use the nearest.";
    }

    audio = new QAudioSource(format, this);
    connect(audio, &QAudioSource::stateChanged, this, &AudioInputExample::handleStateChanged);

    QTimer::singleShot(3000, this, &AudioInputExample::stopRecording);
    audio->start(&destinationFile);
    // Records audio for 3000ms
}

これは、指定されたフォーマットが入力デバイスでサポートされていれば録音を開始します(QAudioDevice::isFormatSupported()で確認できます)。何か問題があった場合は、error ()関数を使用して、何が問題だったかをチェックする。stopRecording() スロットで録画を停止する。

void AudioInputExample::stopRecording()
{
    audio->stop();
    destinationFile.close();
    delete audio;
}

どの時点でも、QAudioSourceは、アクティブ、サスペンド、ストップ、アイドルの4つの状態のうちの1つになります。これらの状態は、QtAudio::State enumによって指定されます。suspend()、resume()、stop()、reset()、start()を通じて、状態の変更を直接要求することができます。現在の状態は、state ()によって報告されます。状態が変更されると、QAudioSinkstateChanged ())によっても通知されます。

QAudioSourceは、start()の録音からの経過時間を測定する方法をいくつか提供しています。processedUSecs() 関数は、ストリームの長さを書き込んだマイクロ秒単位で返します。つまり、オーディオ入力が一時停止していた時間やアイドル状態だった時間は除外されます。elapsedUSecs ()関数は、QAudioSourceがどの状態にあったかに関係なく、start ()が呼び出されてからの経過時間を返します。

エラーが発生した場合は、error ()でその理由を取得できます。考えられるエラー理由はQtAudio::Error enumで記述されています。エラーが発生すると、QAudioSourceはStoppedStatestateChanged() シグナルに接続して、エラーを処理してください:

void AudioInputExample::handleStateChanged(QAudio::State newState)
{
    switch (newState) {
        case QAudio::StoppedState:
            if (audio->error() != QAudio::NoError) {
                // Error handling
            } else {
                // Finished recording
            }
            break;

        case QAudio::ActiveState:
            // Started recording - read from IO device
            break;

        default:
            // ... other cases as appropriate
            break;
    }
}

QAudioSink およびQAudioDeviceも参照してください

メンバー関数ドキュメント

[explicit] QAudioSource::QAudioSource(const QAudioFormat &format = QAudioFormat(), QObject *parent = nullptr)

新しいオーディオ入力を構築し、それをparent にアタッチする。 デフォルトのオーディオ入力デバイスは、出力format パラメータで使用される。

[explicit] QAudioSource::QAudioSource(const QAudioDevice &audioDevice, const QAudioFormat &format = QAudioFormat(), QObject *parent = nullptr)

新しいオーディオ入力を構築し、parent にアタッチします。audioDevice によって参照されるデバイスは、入力format パラメータで使用されます。

[virtual noexcept] QAudioSource::~QAudioSource()

このオーディオ入力を破棄する。

qsizetype QAudioSource::bufferSize() const

オーディオバッファサイズをバイト単位で返す。

start() の前に呼び出された場合、プラットフォームのデフォルト値を返す。start() の前に呼び出されたが、その前にsetBufferSize() が呼び出された場合、setBufferSize() で設定された値を返す。start() の後に呼び出された場合、実際に使用されているバッファ・サイズを返す。これは、setBufferSize() で設定された値とは異なる可能性がある。

setBufferSize()も参照

qsizetype QAudioSource::bytesAvailable() const

読み込める音声データの量をバイト単位で返します。

注意:返される値は、QtAudio::ActiveState またはQtAudio::IdleState の状態にあるときのみ有効である。

qint64 QAudioSource::elapsedUSecs() const

アイドル状態およびサスペンド状態にあった時間を含め、start() が呼び出されてからのマイクロ秒を返す。

QtAudio::Error QAudioSource::error() const

エラー状態を返す。

QAudioFormat QAudioSource::format() const

使用されているQAudioFormat を返す。

bool QAudioSource::isNull() const

オーディオ・ソースがnull の場合はtrue を返し、そうでない場合はfalse を返す。

qint64 QAudioSource::processedUSecs() const

start() が呼び出されてから処理された音声データ量をマイクロ秒単位で返す。

void QAudioSource::reset()

バッファ内のすべてのオーディオ・データを削除し、バッファをゼロにリセットする。

void QAudioSource::resume()

suspend() の後にオーディオ・データの処理を再開する。

state QtAudio::ActiveState 以前に start(QIODevice*) を呼び出した場合は、error() をQtAudio::NoError に設定。以前にstart() を呼び出した場合は、state() をQtAudio::IdleState に設定する。stateChanged() シグナルを発する。

void QAudioSource::setBufferSize(qsizetype value)

オーディオ・バッファ・サイズをvalue バイトに設定する。

注:この関数はstart() の前であればいつでも呼び出すことができます。start() 以降の呼び出しは無視されます。start() の後にbufferSize() を呼び出すと、実際に使用されているバッファサイズが返される。

bufferSize()も参照

void QAudioSource::setVolume(qreal volume)

入力ボリュームをvolume に設定する。

音量は、0.0 (無音)から1.0 (フル音量)まで、直線的にスケーリングされる。この範囲外の値はクランプされる。

デバイスが入力音量の調整に対応していない場合、volume は無視され、入力音量は 1.0 のままになります。

デフォルトの音量は1.0 です。

注:音量の調整は、グローバル音量ではなく、このオーディオストリームの音量を変更します。

volume()も参照

QIODevice *QAudioSource::start()

システムの音声入力からのデータ転送に使用される内部QIODevice へのポインタを返します。このデバイスはすでにオープンされており、read() はそこから直接データを読み込むことができる。

注意: このポインタは、ストリームを停止した後や、別のストリームを開始した後には無効となる。

QAudioSource がシステムのオーディオ・デバイスにアクセスできた場合、state() はQtAudio::IdleState を返し、error() はQtAudio::NoError を返し、stateChanged() シグナルが発せられる。

この処理中に問題が発生した場合、error() はQtAudio::OpenError を返し、state() はQtAudio::StoppedState を返し、stateChanged() シグナルが発せられる。

QIODeviceも参照

void QAudioSource::start(QIODevice *device)

システムのオーディオ入力からdevice へのオーディオ・データの転送を開始する。deviceWriteOnlyAppend またはReadWrite モードでオープンされていなければならない。

QAudioSource が正常にオーディオ・データを取得できた場合、state() はQtAudio::ActiveState またはQtAudio::IdleState のいずれかを返し、error() はQtAudio::NoError を返し、stateChanged() シグナルが発せられる。

この処理中に問題が発生した場合、error() はQtAudio::OpenError を返し、state() はQtAudio::StoppedState を返し、stateChanged() シグナルが発せられる。

QIODeviceも参照

QtAudio::State QAudioSource::state() const

オーディオ処理の状態を返す。

[signal] void QAudioSource::stateChanged(QtAudio::State state)

このシグナルは、デバイスstate が変更されたときに発せられる。

注意: Qt 6.6 までは、QtAudio 名前空間は QAudio という名前でした。このシグナルへの文字列ベースの接続は、パラメータタイプとしてQAudio::State を使用する必要があります:connect(source, SIGNAL(stateChanged(QAudio::State)), ...);

void QAudioSource::stop()

オーディオ入力を停止し、システムリソースから切り離します。

error() をQtAudio::NoError に、state() をQtAudio::StoppedState に設定し、stateChanged() シグナルを発信します。

void QAudioSource::suspend()

オーディオ・データの処理を停止し、バッファされたオーディオ・データを保持する。

error() をQtAudio::NoError に、state() をQtAudio::SuspendedState に設定し、stateChanged() シグナルを出力する。

qreal QAudioSource::volume() const

入力音量を返す。

デバイスが入力音量の調整に対応していない場合、返される値は 1.0 となる。

setVolume()も参照してください

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