Я просто скопировал пример кода из документа Qt, единственное отличие состоит в том, что я решил использовать буфер памяти вместо локального файла, поэтому я поместил QBuffer buffer
в QAudio::start()
, но когда stateChanged
испускается, buffer
был пуст, и в результате QAudio::IOError
Класс Dummy {
частный:
Буфер QBuffer; };
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);