サンプルコードをQtのドキュメントからコピーしましたが、唯一の違いはローカルファイルではなくメモリバッファを使用することです。をQAudio::start()
に配置しましたが、stateChanged
が放出されたときbuffer
が空で、結果はQAudio::IOError
QAudio :: start()の出力デバイスとしてQBufferを使用できないのはなぜですか?
クラスダミー{ プライベート: Qバッファバッファ。 };
void Dummpy::loop()
{
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);
connect (audio , SIGNAL(stateChanged(QAudio::State)) , SLOT(stateChanged(QAudio::State)));
QTimer::singleShot(3000, this, SLOT(stopRecording()));
audio->start (&buffer); // was originally a QFile , i put a QBuffer here
}
なぜそれが失敗していますか?
EDITまだここに最小限の
、無エラー処理:
void Window::stateChanged(const QAudio::State &state)
{
if (state == QAudio::StoppedState)
{
buffer.open(QIODevice::ReadOnly);
qDebug() << "Finished." << buffer.readAll().length();
buffer.close();
}
}
そしてオーディオ - >スタート(&バッファ)の前に、
buffer.open(QIODevice::WriteOnly | QIODevice::Truncate);
はどのようにしてbuffer' '初期化されますか? – Mat
@Mat、それはヘッダーファイルの 'QBuffer buffer'として宣言されています – daisy
それであなたは' open'しませんか? – Mat