![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
KOL + Ogg Vorbis [FPC, Windows]
Stargazer © (2004-05-13 14:32:00)Я тут прикрутил Ogg Vorbis к своей проге, следуя рекомендациям
http://www.devmaster.net/articles/openal-tutorials/lesson8_delphi.zip
Чего-то захотелось мне переделать весь пример под КОЛ.
В примере используется TFileStream (в дистрибуте FPC как раз нашёлся такой компонент), и мне подумалось - можно ли использовать КОЛ-овский TStream для Vorbis'овской функции ov_read. Махнул не глядя, результат - жуткое зависание (если юзать TFileStream - то работает нормально, но с нюансами, в частности, иногда падает при вызове метода Free).
А вопрос мой как раз про это - что это за зверь, TFileStream и можно ли в КОЛ найти аналог ентому?
С уважением.
Stargazer (2004-05-14 22:32:00) [1]Владимир, спасибо за ответ.
Я всё запутал! Извините, плизз.
Переменная OggFile типа TFileSTream используется в функции:
function ov_open_callbacks(const datasource; var vf: OggVorbis_File; initial: PChar; ibytes: long; callbacks: ov_callbacks): int; cdecl; external VorbisfileLib;
Первый параметр он и есть, datasource.
Как упомянуто автором примера для Delphi,
we can't use ov_open in Delphi, as this function works with C-file handles.
So we use ov_open_callbacks instead which uses a filestream.
Всё что мне приходит в голову, так это поменять тип datasource, как вы и посоветовали. Не уверен, что это есть хорошо - но "попытка не пытка" :)
Vladimir Kladov (2004-05-14 20:55:00) [2]Конечно чужеродное. Как описан тип параметра OggStream в декларации ov_read? Надо чтобы был именно KOL.PStream, и чтобы ov_read обращался к методам KOL.PStream. Если он будет обращаться к нему как к VCL.TStream, ерунда получится. Гарантированно.
Stargazer (2004-05-14 20:01:00) [3]С ума сходит ogg-овская функция ov_read:
res := ov_read(OggStream, PByteArray(data)^[size], self._bufferSize - Size, 0, 2, 1, @Section);
Пишет, что неизвестная ошибка ogg. Такие дела. Пришлось возвернуть TFileStream. Такое ощущение, что для ogg КОЛ-овский PStream - чужеродное тело.
С уважением.
SPeller (2004-05-14 03:12:00) [4]А отладнкой не проходил, где зависает, на какой строке?
Stargazer (2004-05-14 01:19:00) [5]А, ну и забыл упомянуть, что
OggFile : TFileStream
заменён на
OggFile : PStream
Всё.
Stargazer (2004-05-14 01:18:00) [6]И было так...
if Assigned(OggFile) then OggFile.Free;
if NOT FileExists(pFileName) then begin
ShowMessage('File not found!');
Halt(0);
End;
OggFile := TFileStream.Create(pFileName, fmOpenRead); //
Потом стало так:
if Assigned(OggFile) then OggFile.Free;
if NOT FileExists(pFileName) then begin
ShowMessage('File not found!');
Halt(0);
End;
OggFile := NewReadFileStream(pFileName); // поменялось только здесь
Аж экран чернеет после такой замены...
С уважением.
Gandalf (2004-05-13 23:53:00) [7]Код в студию или на мыло...
Stargazer (2004-05-13 23:24:00) [8]Вот, вот, именно NewReadFileStream и делал. Получил зависание.
TFileStream проходит, а PStream - нет. Выходит, они не совместимы.
SPeller (2004-05-13 18:58:00) [9]NewReadFileStream, NewWriteFileStream, NewReadWriteFileStream.