Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.12.26;
Скачать: CL | DM;

Вниз

KOL + Ogg Vorbis   Найти похожие ветки 

 
Stargazer ©   (2004-05-13 14:32) [0]

Я тут прикрутил Ogg Vorbis к своей проге, следуя рекомендациям

http://www.devmaster.net/articles/openal-tutorials/lesson8_delphi.zip

Чего-то захотелось мне переделать весь пример под КОЛ.
В примере используется TFileStream (в дистрибуте FPC как раз нашёлся такой компонент), и мне подумалось - можно ли использовать КОЛ-овский TStream для Vorbis"овской функции ov_read. Махнул не глядя, результат - жуткое зависание (если юзать TFileStream - то работает нормально, но с нюансами, в частности, иногда падает при вызове метода Free).
А вопрос мой как раз про это - что это за зверь, TFileStream и можно ли в КОЛ найти аналог ентому?

С уважением.


 
SPeller ©   (2004-05-13 18:58) [1]

NewReadFileStream, NewWriteFileStream, NewReadWriteFileStream.


 
Stargazer ©   (2004-05-13 23:24) [2]

Вот, вот, именно NewReadFileStream и делал. Получил зависание.
TFileStream проходит, а PStream - нет. Выходит, они не совместимы.


 
Gandalf ©   (2004-05-13 23:53) [3]

Код в студию или на мыло...


 
Stargazer ©   (2004-05-14 01:18) [4]

И было так...


    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);   // поменялось только здесь


Аж экран чернеет после такой замены...

С уважением.


 
Stargazer ©   (2004-05-14 01:19) [5]

А, ну и забыл упомянуть, что

OggFile : TFileStream

заменён на

OggFile : PStream

Всё.


 
SPeller ©   (2004-05-14 03:12) [6]

А отладнкой не проходил, где зависает, на какой строке?


 
Stargazer ©   (2004-05-14 20:01) [7]

С ума сходит ogg-овская функция ov_read:

res := ov_read(OggStream, PByteArray(data)^[size], self._bufferSize - Size, 0, 2, 1, @Section);

Пишет, что неизвестная ошибка ogg. Такие дела. Пришлось возвернуть TFileStream. Такое ощущение, что для ogg КОЛ-овский PStream - чужеродное тело.

С уважением.


 
Vladimir Kladov   (2004-05-14 20:55) [8]

Конечно чужеродное. Как описан тип параметра OggStream в декларации ov_read? Надо чтобы был именно KOL.PStream, и чтобы ov_read обращался к методам KOL.PStream. Если он будет обращаться к нему как к VCL.TStream, ерунда получится. Гарантированно.


 
Stargazer ©   (2004-05-14 22:32) [9]

Владимир, спасибо за ответ.
Я всё запутал! Извините, плизз.

Переменная 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, как вы и посоветовали. Не уверен, что это есть хорошо - но "попытка не пытка" :)



Страницы: 1 вся ветка

Текущий архив: 2004.12.26;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.05 c
3-1101947257
Alexey Leonchik
2004-12-02 03:27
2004.12.26
Распространение приложения под MS SQL 2000


1-1102740944
Dema-X
2004-12-11 07:55
2004.12.26
Почему валится?


6-1097555882
Tatyana
2004-10-12 08:38
2004.12.26
масшабирование webbrowser


14-1102322607
Суслик
2004-12-06 11:43
2004.12.26
Delphi 2005


10-1072286014
Mozg
2003-12-24 20:13
2004.12.26
Переход с Delphi5 + Visibroker 3 на Delphi 7 + Visibroker4