Форум по Delphi программированию



Вернуться   Форум по Delphi программированию > Все о Delphi > Мультимедиа
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 12.04.2015, 05:09
ProDaNTe ProDaNTe вне форума
Новичок
 
Регистрация: 25.12.2011
Сообщения: 75
Репутация: 10
По умолчанию Bass.dll воспроизведение потокового аудио

Делая программку и нужно воспроизведение файла из сети, BASS_StreamCreateUrl - почемуто глючит страшно, пробывал всяко вот последнее что не работает)

Код:
  
stop:=false;
 ObhRazPredZagr:=GetSize(filelink);
hUrl:=InternetOpenUrl(hInet,PChar(filelink), pchar(Header), StrLen(pchar(Header)),0,0);
//if Assigned(MusicBuffer) then MusicBuffer.Free;
MusicBuffer:=TMemoryStream.Create;
  MusicBuffer.Position:=0;
BASS_StreamFree(url_radio);

repeat
begin
InternetReadFile(hUrl,@Buffer,sizeof(Buffer),Read);
MusicBuffer.Write(Buffer,read);
PlaySize:=PlaySize+Read;
all:=all+Read;


if okplload=true then  begin
FreeMem(memp);
memp:=StreamToByteArray(kdob,MusicBuffer);
kdob:=MusicBuffer.Size;
BASS_StreamPutFileData(url_radio,memp,2048);
end;

if  (PlaySize>102400) and (okplload=false) then begin
kdob:= MusicBuffer.Size;
memp:=StreamToByteArray(0,MusicBuffer);
url_radio:=BASS_StreamCreateFile(True, memp, 0, ObhRazPredZagr, STREAMFILE_BUFFERPUSH {$IFDEF UNICODE} or BASS_UNICODE {$ENDIF});
BASS_ChannelPlay(url_radio, False);

okplload:=true;
end;
Ответить с цитированием
  #2  
Старый 12.04.2015, 23:39
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Посмотреть примеры поставляемые с BASS, в частности NetRadio, и убедиться, что ничего не глючит, а очень даже стабильно работает.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #3  
Старый 13.04.2015, 10:06
ProDaNTe ProDaNTe вне форума
Новичок
 
Регистрация: 25.12.2011
Сообщения: 75
Репутация: 10
По умолчанию

У меня на компе все стабильно, на другом компе где тоже как и меня 8ка выдает ошибку((( Плюс интернет плохой так вообще ужас, а так я в ручную буду контралировать все действия, почему так то не работает вроде все верно(((
Код:
stop:Boolean;
Buffer: array [0..2047] of byte;
cli:integer;
Read:Cardinal;
  hUrl:HINTERNET;
  Header:String;
  Tim:TDateTime;
  memp,memn:Pointer;
  okplload:Boolean;
  kdob,pop:Int64;
  WHdr:TWAVHDR;


InternetReadFile(hUrl,@Buffer,sizeof(Buffer),Read);
 MusicBuffer.Write(Buffer,read);
PlaySize:=PlaySize+Read;
all:=all+Read;


if okplload=true then  begin

memp:=StreamToByteArray(kdob,MusicBuffer);
kdob:=MusicBuffer.Size;
BASS_ChannelLock(url_radio, true);
BASS_StreamPutData(url_radio,memp,MusicBuffer.Size-kdob);
BASS_ChannelLock(url_radio, false);
 BASS_ChannelPlay(url_radio, False);
 FreeMem(memp);
end;

if  (PlaySize>102400) and (okplload=false) then begin

kdob:= MusicBuffer.Size;
 memp:=StreamToByteArray(0,MusicBuffer);
 url_radio:=BASS_StreamCreateFile(True, memp, 0, MusicBuffer.Size, 0 {$IFDEF UNICODE} or BASS_UNICODE {$ENDIF});
  BASS_ChannelGetInfo(url_radio,WHdr.INFO);
  BASS_StreamFree(url_radio);
  FreeMem(memp);
   memp:=StreamToByteArray(0,MusicBuffer);
 url_radio:=BASS_StreamCreate(WHdr.INFO.freq, WHdr.INFO.chans, WHdr.INFO.flags, STREAMPROC_PUSH, NIL);
  BASS_ChannelLock(url_radio, true);
  BASS_StreamPutData(url_radio,memp,MusicBuffer.Size);
  BASS_ChannelLock(url_radio, false);
 BASS_ChannelPlay(url_radio, False);
 FreeMem(memp);
okplload:=true;
end;
Ответить с цитированием
  #4  
Старый 13.04.2015, 10:35
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Цитата:
Сообщение от ProDaNTe
... выдает ошибку ...
Нам догадаться какую?
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #5  
Старый 13.04.2015, 13:44
ProDaNTe ProDaNTe вне форума
Новичок
 
Регистрация: 25.12.2011
Сообщения: 75
Репутация: 10
По умолчанию

Извини, но то просто выкидывает, то Access Violation, хотя повторюсь дома играет все отлично.(StreamCreateUrl)
А на предидущем коде идет просто шум((

В принципе я гружу 100 Кб узнаю информацию о треке, создаю поток, вставляю туда данные по мере скачивания и воспроизвожу!
Вложения
Тип файла: rar MinusFinder.rar (683.3 Кбайт, 14 просмотров)

Последний раз редактировалось ProDaNTe, 13.04.2015 в 13:53.
Ответить с цитированием
  #6  
Старый 13.04.2015, 23:54
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Увы, в данный момент XE версии у меня нет.
Разбираться в таком "грязном" коде очень тяжело, но обратил внимание, что в процедуре Play могут возникать ситуации, когда битмап не будет освобождаться. На весь код терпения не хватило.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #7  
Старый 14.04.2015, 16:59
ProDaNTe ProDaNTe вне форума
Новичок
 
Регистрация: 25.12.2011
Сообщения: 75
Репутация: 10
По умолчанию

Да, мой код очень грязный, но так как кода как такового там очень мало мне не доставляет это трудности, мне лишь интересует часть из нескольких строк про воспроизведение из потока
Код:
stop:Boolean;
Buffer: array [0..2047] of byte;
cli:integer;
Read:Cardinal;
  hUrl:HINTERNET;
  Header:String;
  Tim:TDateTime;
  memp,memn:Pointer;
  okplload:Boolean;
  kdob,pop:Int64;
  WHdr:TWAVHDR;
 
 
InternetReadFile(hUrl,@Buffer,sizeof(Buffer),Read);
 MusicBuffer.Write(Buffer,read);
PlaySize:=PlaySize+Read;
all:=all+Read;
 
 
if okplload=true then  begin
 
memp:=StreamToByteArray(kdob,MusicBuffer);
kdob:=MusicBuffer.Size;
BASS_ChannelLock(url_radio, true);
BASS_StreamPutData(url_radio,memp,MusicBuffer.Size-kdob);
BASS_ChannelLock(url_radio, false);
 BASS_ChannelPlay(url_radio, False);
 FreeMem(memp);
end;
 
if  (PlaySize>102400) and (okplload=false) then begin
 
kdob:= MusicBuffer.Size;
 memp:=StreamToByteArray(0,MusicBuffer);
 url_radio:=BASS_StreamCreateFile(True, memp, 0, MusicBuffer.Size, 0 {$IFDEF UNICODE} or BASS_UNICODE {$ENDIF});
  BASS_ChannelGetInfo(url_radio,WHdr.INFO);
  BASS_StreamFree(url_radio);
  FreeMem(memp);
   memp:=StreamToByteArray(0,MusicBuffer);
 url_radio:=BASS_StreamCreate(WHdr.INFO.freq, WHdr.INFO.chans, WHdr.INFO.flags, STREAMPROC_PUSH, NIL);
  BASS_ChannelLock(url_radio, true);
  BASS_StreamPutData(url_radio,memp,MusicBuffer.Size);
  BASS_ChannelLock(url_radio, false);
 BASS_ChannelPlay(url_radio, False);
 FreeMem(memp);
okplload:=true;
end;
Ответить с цитированием
Ответ



Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 08:20.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2021

ВКонтакте   Facebook   Twitter   Ссылка на Telegram