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 回答