я просто скопировал образец код из дока Qt, единственное отличие состоит я выбираю использовать буфер памяти вместо локального файла, поэтому я поместил QBuffer buffer
в QAudio::start()
, но когда stateChanged
испускается buffer
было пуст, и в результате в QAudio::IOError
Почему я не могу использовать QBuffer в качестве устройства вывода QAudio :: start()?
Класс пустышки { частное: 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);
Как вы инициализации 'buffer'? – Mat
@Mat, он объявлен как 'QBuffer buffer' в файле заголовка – daisy
Итак, вы не открываете его? – Mat