Главная страница
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.028 c
1-1103014114
Delphi5.01
2004-12-14 11:48
2004.12.26
выезжающее окошко как это сделано в WinAmp-е


14-1102348564
kein
2004-12-06 18:56
2004.12.26
Самопальное радио


8-1096419202
ZDimitriy
2004-09-29 04:53
2004.12.26
Подскажите как преобразовать Hbitmap в Tbitmap


3-1101284913
Sens
2004-11-24 11:28
2004.12.26
Помогите создать запрос


1-1102796522
Mega Mike
2004-12-11 23:22
2004.12.26
Рабоат функции или процедуры в фоновом режиме...