0

OpenAL ライブラリでサウンドを再生する方法がわかりません。VoIP用のプログラムを書いています。10ミリ秒ごとにサウンドバッファを取得しています。

size_t len = socket.read_some(boost::asio::buffer(buf),error);

バフは

boost::array <char, 441> buf;

そして、私はこのバッファを処理する必要がありますか? 例を読んでいましたが、理解できませんでした:(。助けてください。PS Visual Studio 2010でC++を使用しています。編集後

    alGenSources(1, &alSource);
    alGenBuffers(1, &alSampleSet);
    alBufferData(alSampleSet, AL_FORMAT_MONO16, buf.data(), sizeof(buf.data()), 44100);
    alSourcei(alSource, AL_BUFFER, alSampleSet);
    //
    alSourcei(alSource, AL_LOOPING, alSampleSet);
    alSourcePlay(alSource);
4

2 に答える 2

0

buf.data()ポインターを返します。そのサイズはおそらく 32 ビットまたは 64 ビットです。

サイズは代わりにですarraybuf.size()によって要求されるサイズはalBufferData、バッファ内のバイト数です。つまり、配列内の要素数にbuf.size()各要素のサイズを掛けた値sizeof(buf.front())またはsizeof(char).
[注記sizeof(buf)は、少なくとも現在の Boost の実装ではおそらく動作するかもしれませんが、保証されているとは思いません]

チャネル形式を指定してAL_FORMAT_MONO16いますが、奇数サイズの 8 バイト バッファを使用しています。したがって、これはおそらく配列の宣言またはフォーマットの指定のいずれかのエラーです。あなたの質問の残りの部分に基づいて、代わりにそこに意味があると思いますAL_FORMAT_MONO8

于 2013-01-31T17:19:36.437 に答える