1

QTでは、オーディオ入力を次のように定義できます。

m_audioInput = new QAudioInput(m_Inputdevice, m_format, this);
m_input = m_audioInput->start();

私のアプリケーションでは、マイクを使用してオーディオカードから読み取りたいと思います。

ここで、オーディオバッファから読み取る準備ができているバイト数を確認したい場合は、次を使用します。

qint64 len = m_audioInput->bytesReady();

lenは、サンプリングレートとサンプルあたりのビット数の関数のようです。私の質問はlen、サンプリングレートを変更せずに制御する方法はありますか?言い換えれば、オーディオカードがより短いブロックでデータを読み取り、レディ信号を発信するように制御したいと思います。

4

1 に答える 1

0

周波数、サンプルサイズなどの適切なフォーマットパラメータを設定することにより、オーディオカードを制御できます。このためには、QAudioFormatクラスを使用する必要があります。

これ以外に、Qtからオーディオカードを制御する方法はありません。

クラスリファレンス

参照からの例:

QFile outputFile;   // class member.
QAudioInput* audio; // class member.

outputFile.setFileName("/tmp/test.raw");
outputFile.open( QIODevice::WriteOnly | QIODevice::Truncate );

QAudioFormat format;

// set up the format you want, eg.
format.setFrequency(8000);
format.setChannels(1);
format.setSampleSize(8);
format.setCodec("audio/pcm");
format.setByteOrder(QAudioFormat::LittleEndian);
format.setSampleType(QAudioFormat::UnSignedInt);

QAudioDeviceInfo info = QAudioDeviceInfo::defaultInputDevice();
if (!info.isFormatSupported(format)) {
    qWarning()<<"default format not supported try to use nearest";
    format = info.nearestFormat(format);
}

audio = new QAudioInput(format, this);
QTimer::singleShot(3000, this, SLOT(stopRecording()));
audio->start(&outputFile);
// Records audio for 3000ms
于 2012-08-30T04:48:43.180 に答える