0

OpenAL でストリーム サウンドを再生する必要があります。これは私のコードですが、機能していません。私は何をする必要がありますか?

    device = alcOpenDevice(NULL);
    //
    ofstream file;
    file.open("TESTSPEAKER", std::ios_base::binary);
    context = alcCreateContext(device, NULL);
    alcMakeContextCurrent(context);
    // alGetError();
    char *alBuffer;
    ALenum alFormatBuffer;
    ALsizei alFreqBuffer;
    long alBufferLen;
    ALboolean alLoop;
    unsigned int alSource;
    unsigned int alSampleSet;
    boost::array <char, 882> buf;
    while (!ExitKey)
    {
        boost::system::error_code error;
        size_t len = VoiceSocket->read_some(boost::asio::buffer(buf), error);
        if (len==0)
        {
            continue;
        }
        file.write(buf.data(), 882);
        alGenSources(1, &alSource);
        alGenBuffers(1, &alSampleSet);
        alBufferData(alSource, AL_FORMAT_MONO16, buf.data(), buf.size(), 44100);
        alSourcei(alSource, AL_BUFFER, alSampleSet);
        //
        //alSourcei(alSource, AL_LOOPING, alSampleSet);


            alSourcePlay(alSource);

        //alSourcePlay(alSource);
    }
    VoiceSocket->close();
    file.close();

自分のファイル ("TESTSPEAKER") が表示されたら、自分のサウンドを見ます。だから私はネットワーク上でそれを正しく渡しています。しかし、どうすればこの音をオープンで再生できますか?

4

1 に答える 1

0

ストリーミングしている場合は、使用する必要があります

alSourceQueueBuffers(alSource, 1, &alSampleSet);

のように静的バッファとして設定する代わりに

alSourcei(alSource, AL_BUFFER, alSampleSet);

alSourcePlay(alSource);最初のバッファーがキューに入れられたときに、コマンドを 1 回だけ発行します。

于 2013-06-28T12:22:37.467 に答える