Главная страница
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.023 c
1-1102924069
Relaxxx
2004-12-13 10:47
2004.12.26
Почему не пичатает на матричном принтере???


1-1102749012
klyg
2004-12-11 10:10
2004.12.26
String to PAnsiChar


1-1102972333
STK
2004-12-14 00:12
2004.12.26
Загруженность процессора(100%) процессом(как облегчить)


3-1101460045
b@mboZe
2004-11-26 12:07
2004.12.26
Утечка памяти в TADODataset.


14-1102301397
Думкин
2004-12-06 05:49
2004.12.26
С днем рождения! 6 декабря