[Openal-devel] NEWBIE: Playing OggVorbis files without queued buffers
vexator
vexator at gmx.net
Sat Mar 7 06:42:32 PST 2009
Hello!
I'm new to OpenAL, I'm usually working with graphics :) I want to playback
OggVorbis files, but not using queued buffers like in the sample. I got it
working, but only if I manually adjust the buffer size. Seems that I'm
missing something.. I've included my code (which is basically copy and
pasted from the sample). The adjusted line is ulBufferSize *= 12. If I don't
do this, only the first split second is being played.
Thank you!
Constructor:
FILE *pOggVorbisFile = fopen( m_strFilename.c_str(), "rb" );
fn_ov_open_callbacks( pOggVorbisFile, &sOggVorbisFile, NULL, 0, sCallbacks
);
psVorbisInfo = fn_ov_info( &sOggVorbisFile, -1 );
ulFrequency = psVorbisInfo->rate;
ulChannels = psVorbisInfo->channels;
switch( ulChannels )
{
case 1:
ulBufferSize = ulFrequency >> 1;
ulBufferSize -= (ulBufferSize % 2);
ulFormat = AL_FORMAT_MONO16;
break;
case 2:
ulBufferSize = ulFrequency;
ulBufferSize -= (ulBufferSize % 4);
ulFormat = AL_FORMAT_STEREO16;
break;
case 4:
ulBufferSize = ulFrequency * 2;
ulBufferSize -= (ulBufferSize % 8);
ulFormat = alGetEnumValue( "AL_FORMAT_QUAD16" );
break;
case 6:
ulBufferSize = ulFrequency * 3;
ulBufferSize -= (ulBufferSize % 12);
ulFormat = alGetEnumValue( "AL_FORMAT_51CHN16" );
break;
default:
CLog::Get().Write( LOG_SERVER, "OpenAL: Unsupported format!" );
return;
}
ulBufferSize *= 12; // <- why do I have to do this?!
pDecodeBuffer = (char*)malloc( ulBufferSize );
unsigned long ulBytesWritten = DecodeOggVorbis( &sOggVorbisFile,
pDecodeBuffer, ulBufferSize, ulChannels );
alGenBuffers( 1, &m_uiBuffer );
alBufferData( m_uiBuffer, ulFormat, pDecodeBuffer, ulBytesWritten,
ulFrequency );
alGenSources( 1, &m_uiSource );
alSourcei( m_uiSource, AL_BUFFER, m_uiBuffer );
Play() function:
int iState;
alGetSourcei( m_uiSource, AL_SOURCE_STATE, &iState );
if( iState == AL_PLAYING )
return;
alSourcePlay( m_uiSource );
--
View this message in context: http://www.nabble.com/NEWBIE%3A-Playing-OggVorbis-files-without-queued-buffers-tp22379527p22379527.html
Sent from the OpenAL - Dev mailing list archive at Nabble.com.
More information about the Openal-devel
mailing list