Программное потоковое чтение файла OggVorbis

Список разделов Ogg Vorbis Тех-поддержка

Описание: Инструменты, кодеки, сопроводительная информация, алгоритмы, программирование.

Сообщение #1 Osiris » 20.06.2008, 11:44

Возможно вопрос немного не в общую тематику форума, но пока нигде не нашел ответа. Может здесь найдется человек знающий.

Мне необходимо программно прочитать потоково ogg файл, а затем начать проигрывание с начала. Само потокове чтение реализовал так (С++) :

Код: Выделить всё
   PCM = new char[Size];

   // читаем
   while( TotalRet < (long)Size )
   {
      ret = ov_read( &m_OggFile, PCM + TotalRet, (long)Size - TotalRet, 0, 2, 1, &current_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 перегоняем (вроде перегоняем) в начало - повтороного чтения не происходит.
Osiris
Репутация: 0
С нами: 15 лет 9 месяцев

Вернуться в Тех-поддержка



cron