Мне необходимо программно прочитать потоково ogg файл, а затем начать проигрывание с начала. Само потокове чтение реализовал так (С++) :
- Код: Выделить всё
PCM = new char[Size];
// читаем
while( TotalRet < (long)Size )
{
ret = ov_read( &m_OggFile, PCM + TotalRet, (long)Size - TotalRet, 0, 2, 1, ¤t_section);
// если конец файла или лимит чтения
if( ret <= 0 )
break;
TotalRet += ret;
}
if( TotalRet > 0 )
{
alBufferData( BufID, m_iSoundFormat, (void*)PCM, TotalRet, m_iSoundRate );
ALenum Error = 0;
if( ( Error = alGetError() ) != AL_NO_ERROR )
{
CDX9E3Dlogfile::Get().Report( CDX9E3Dlogfile::ERROR_, "%s%s%s",
"Error : COALOggSoundData::ReadBlock : alBufferData : ",
alGetString(Error), "\n" );
SAFE_DELETE_ARRAY( PCM );
return false;
}
}
SAFE_DELETE_ARRAY( PCM );
if( ret <= 0 )
ov_pcm_seek( &m_OggFile, 0 );
Файл отлично читается по кусочкам, но когда доходим до конца и при помощи ov_pcm_seek перегоняем (вроде перегоняем) в начало - повтороного чтения не происходит.