![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Vorbis/OGG
Goorus © (2006-04-04 13:57:00)Пытаюсь сделать поддержку ogg в своей проге, с потоками всё получилось, буферы правильно работают, но столкнулся с проблемой, когда файл имеет малый размер. Есть огг всего 6 килобайт, и вот её не получается проиграть. Проблема возникает ещё при чтении заголовка:
FStream := TFileStream.Create(fn, fmOpenRead or fmShareDenyWrite);
res := ov_open_callbacks(FStream, vf, nil, 0, ops_callbacks);
На второй строке программа подвисает (где-то полсекунды), ну а дальше звук не читается
...
repeat
Change := ov_read(vf, PCM[BytesRead], ASize - BytesRead, 0, 2, 1, nil);
BytesRead := BytesRead + Change;
until (Change = 0) or (BytesRead = ASize);
Получается, что Change = 0 и ничего в буфер не загружается.
Видимо, проблема в том, что не правильно загружаются данные vf: OggVorbis_File. Смотрел, что присходит после вызова ov_open_callbacks, так вот там беспрерывно вызывается функция ops_seek_func, причём с параметрами перемиститься относительно начала файла, а offset - отрицательный и всё время уменьшается на 8500. Похоже, такой вызов происохдит до тех пор, пока offset не станет меньше Low(Int64), а потом эти вызовы просто прекращаются, так ничего и не загрузив.
Может кто сталкивался или просто знает как правильно?
Rial (2006-05-28 18:52:00) [1]Вообщето - то имеется расширение для работы специально с OGG файлами.
Посмотри:
alGenBuffers(1,@Id);
alBufferData(Id,AL_FORMAT_VORBIS_EXT,Stream.Memory,Stream.Size,44100);
А, по большому счету, у меня тоже частенько вохникают глюки с этими библиотеками...
VEG (2006-05-28 13:41:00) [2]Странно. Разве декодер Ogg Vorbis портирован на Delphi? Или вы пользуетесь внешними библиотеками?