libogg libvorbis: правильный способ поиска в загрузке ogg файла

В проекте Android я использую библиотеки libogg и libvorbis для извлечения аудио-сэмплов на лету из файла ogg (чтобы я мог обработать их и перенаправить на аудиовыход), используя этот пример. Это работает хорошо, и я также могу искать в файле без каких-либо проблем.

Но когда я хочу сделать это из файла, который в данный момент загружается, большую часть времени функция поиска не работает.

Вот как я открываю файл ogg (для простоты я сократил его):

OggVorbis_File vorbisFile;
FILE *audioFile = fopen("/local/path/to/the/file.ogg", "r");
ov_open_callbacks(audioFile, &vorbisFile, NULL, 0, OV_CALLBACKS_NOCLOSE);
if (ov_seekable(&vorbisFile) == 0)
{
// file not seekable (never happened, even if currently downloading):
exit(1);
}

И вот как я ищу в ogg файле:

ov_pcm_seek(&vorbisFile, seekPosition);

Вот что я нашел: После некоторых тестов я решил проверить длину файла при вызове ov_pcm_seek() функция, благодаря ov_pcm_total(&vorbisFile, -1), И я обнаружил, что размер, возвращаемый этой функцией, всегда равен размеру файла, когда он был впервые открыт. Так что же происходит, что, когда я ищу в файле позицию, которой не было к моменту открытия файла, она не работает.

Вот мое (некрасивое?) Решение: Единственное решение, которое я получил до сих пор, — это непосредственно перед поиском, в основном закрыть и снова открыть аудиофайл:

ov_clear(&vorbisFile);
fclose(audioFile);
audioFile = fopen(cheminFichier.c_str(), "r");
ov_open_callbacks(audioFile, &vorbisFile, NULL, 0, OV_CALLBACKS_NOCLOSE);

Пока это действительно хорошо работает, но выглядит не очень хорошо …

Мой вопрос: Есть ли лучший способ открыть и искать в аудиофайле, который в данный момент загружается?

Спасибо за вашу помощь.

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]