2012-01-06 2 views
0

я просто скопировал образец код из дока 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);

+0

Как вы инициализации 'buffer'? – Mat

+0

@Mat, он объявлен как 'QBuffer buffer' в файле заголовка – daisy

+1

Итак, вы не открываете его? – Mat

ответ

0

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

buffer.open(QIODevice::ReadWrite); 

... до ...

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

Я пробовал 'ReadWrite', он не работает; но использование «WriteOnly» здесь и повторное открытие с помощью «ReadOnly», не знаю почему, но на данный момент я просто хочу закрыть вопрос, не удаляя его. – daisy

+0

'ReadWrite' должен работать нормально, он даже включен в [документация здесь] (http://developer.qt.nokia.com/doc/qt-4.8/qbuffer.html#details). Не могли бы вы обновить свой вопрос кодом, в котором вы инициализируете свой 'QBuffer'? –

+0

это закрытый memeber, объявленный в файле заголовка – daisy