|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
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
|
||||
|
||||
Посмотреть примеры поставляемые с BASS, в частности NetRadio, и убедиться, что ничего не глючит, а очень даже стабильно работает.
Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
#3
|
|||
|
|||
У меня на компе все стабильно, на другом компе где тоже как и меня 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
|
||||
|
||||
Цитата:
Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
#5
|
|||
|
|||
Извини, но то просто выкидывает, то Access Violation, хотя повторюсь дома играет все отлично.(StreamCreateUrl)
А на предидущем коде идет просто шум(( В принципе я гружу 100 Кб узнаю информацию о треке, создаю поток, вставляю туда данные по мере скачивания и воспроизвожу! Последний раз редактировалось ProDaNTe, 13.04.2015 в 13:53. |
#6
|
||||
|
||||
Увы, в данный момент XE версии у меня нет.
Разбираться в таком "грязном" коде очень тяжело, но обратил внимание, что в процедуре Play могут возникать ситуации, когда битмап не будет освобождаться. На весь код терпения не хватило. Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
#7
|
|||
|
|||
Да, мой код очень грязный, но так как кода как такового там очень мало мне не доставляет это трудности, мне лишь интересует часть из нескольких строк про воспроизведение из потока
Код:
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; |