2012-05-07 5 views
1

私は4096のようなサイズのバッファを持っていて、そのバッファにデータを格納します。バッファがいっぱいであれば、バッファの先頭から始まります。これはうまくいくようです。Qt - バッファの先頭からオーディオ再生を設定する方法は?

しかし、私はバッファからデータを再生することに問題があります。

QByteArray   m_buffer; 
QBuffer    m_audioOutputIODevice; 
QAudioOutput*  m_audioOutput; 
m_audioOutputIODevice.close(); 
m_audioOutputIODevice.setBuffer(&m_buffer); 
m_audioOutputIODevice.open(QIODevice::ReadOnly); 
m_audioOutput->start(&m_audioOutputIODevice); 

私はバッファからサウンドを再生できますが、バッファの最後に到達すると再生が停止します。 どのようにコードを変更して、バッファの終わりに達すると、最初からすべて始まるでしょうか? ありがとうございました

更新コード:

connect(m_audioOutput,SIGNAL(stateChanged(QAudio::State)),SLOT(resetPlayBuffer(QAudio::State))); 

    void bufferPlayback::resetPlayBuffer (QAudio::State state) 
{ 
    if (state == QAudio::IdleState) { 
     m_audioOutputIODevice.close(); 
     m_audioOutputIODevice.setBuffer(&m_buffer); 
     m_audioOutputIODevice.open(QIODevice::ReadOnly); 
    } 
} 

答えて

1

void stateChanged (QAudio::State state) <〜プレイヤーが変更されたときのシグナル。あなたのクラスのスロットにフックして、状態が止まったら再生プロセスを繰り返してください。シンプル。私がQtを愛する理由の1つ。

+0

次のコードも試しましたが失敗しました。あなたが言った方法だと思います。多分私は間違いを犯しましたか?私はquesitonのコードを更新するでしょう:)読みやすくする – Tiina

+0

http://doc-snapshot.qt-project.org/5.0/phonon-gstreamer-audiooutput.html – johnathon

+0

今、私はオーディオの録音と再生を続けていますが、 qAudioOutputがIdleState – Tiina

0

AFAICT QAudioOutputはありません任意のオーディオループのサポートを内蔵し、私はあなたが新鮮なオーディオバッファを送信することにより、オーディオ・ループをシミュレートしなければならないと思いますQAudioOutputデバイスに定期的に送信し、再生するオーディオバイトが不足することはありません。

私は、非常に長い(無限?)ファイルのように見せかけるQIODeviceの独自のサブクラスを書くのが一番簡単な方法だと思っています。 QAudioOutput :: start()に引数としてQIODevice-subclass-obectを渡します。

+0

こんにちは、この方法を試しましたが、音が聞こえません。もっと深く掘り下げる – Tiina

+0

ありがとうございます、プログラムは正常に動作します:) – Tiina

関連する問題