私のストリーミングのOpenALソースの時間がAL_STOPPED
の状態になって、alSourcePlay
に電話をかけられるのはなぜですか?これは通常、私がsend
と十分に速く、すなわちデバッグモードでは呼び出さないと起こります。十分なキューバッファーがない場合、oalソースは自動的に停止しますか?どうすればそれを避けることができますか?ストリーミングOpenALソースを再起動しますか?
void send(audio_buffer audio) override
{
ALenum state;
alGetSourcei(source_, AL_SOURCE_STATE,&state);
if(state != AL_PLAYING)
alSourcePlay(source_); // This happens sometimes, usually when "send" is not called fast enough.
ALuint buffer = 0;
alSourceUnqueueBuffers(source_, 1, &buffer);
if(buffer)
{
alBufferData(buffer, AL_FORMAT_STEREO16, audio.data(), static_cast<ALsizei>(audio.size()*sizeof(int16_t)), 48000);
alSourceQueueBuffers(source_, 1, &buffer);
}
else
LOG << "Dropped audio.";
}