Почему я не могу использовать QBuffer в качестве устройства вывода QAudio :: start ()? - PullRequest
0 голосов
/ 06 января 2012

Я просто скопировал пример кода из документа 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);

1 Ответ

0 голосов
/ 06 января 2012

Вам необходимо open() a QIODevice, прежде чем использовать его. Вставьте что-то вроде ...

buffer.open(QIODevice::ReadWrite);

... перед тем ...

audio->start (&buffer); // was originally a QFile , i put a QBuffer here
...