2012-01-06 11 views
0

サンプルコードをQtのドキュメントからコピーしましたが、唯一の違いはローカルファイルではなくメモリバッファを使用することです。をQAudio::start()に配置しましたが、stateChangedが放出されたときbufferが空で、結果はQAudio::IOErrorQAudio :: 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);

+0

はどのようにしてbuffer' '初期化されますか? – Mat

+0

@Mat、それはヘッダーファイルの 'QBuffer buffer'として宣言されています – daisy

+1

それであなたは' open'しませんか? – Mat

答えて

0

Y使用する前にopen()QIODeviceにする必要があります。何かなどを挿入...

buffer.open(QIODevice::ReadWrite); 

...前...

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

を更新しました。私は 'ReadWrite'を試しました。ここで 'WriteOnly'を使用し、' ReadOnly'で再オープンする理由はわかりませんが、今のところ私は単にそれを削除せずに閉じたいだけです。 – daisy

+0

'ReadWrite'はうまく動作するはずです。それは[documentation here](http://developer.qt.nokia.com/doc/qt-4.8/qbuffer.html#details)にも含まれています。 'QBuffer'を初期化するコードで質問を更新してもよろしいですか? –

+0

これはヘッダーファイルで宣言された私的なメンバーです – daisy

関連する問題