BASS initialization:
BASS_Init(0, 44100, 0, StreamManager.FHandle, nil)
BASS_SetConfig(BASS_CONFIG_NET_PLAYLIST, 1); // enable playlist processing
BASS_SetConfig(BASS_CONFIG_NET_PREBUF, 0);
I create AAC stream:
FChan := BASS_AAC_StreamCreateURL(PAnsiChar(AUrl), 0, BASS_STREAM_STATUS, @StatusProc, Pointer(Self));
where StatusProc
procedure StatusProc(Buffer: Pointer; Len, User: DWORD); stdcall;
var
TTS: TThreadedStream;
begin
TTS := TThreadedStream(User);
if (TTS <> nil) and (Buffer <> nil) then
TTS.DoStatus(Buffer, Len);
end;
procedure TThreadedStream.DoStatus(Buffer: Pointer; Len: DWORD);
begin
if (Len > 0) then
begin
if Assigned(FFileStream) then
FFileStream.Write(Buffer^, Len);
end else
DoLog(String(PAnsiChar(Buffer)), TS_STATUS);
end;
I use code from BASS Radio demo:
Progress := 0;
repeat
Len := BASS_StreamGetFilePosition(FChan, BASS_FILEPOS_END);
if (Len = DW_Error) then
begin
Result := False;
DoLog('Error code: ' + IntToStr(Bass_ErrorGetCode()), TS_STATUS);
Break;
end;
Progress := (BASS_StreamGetFilePosition(FChan, BASS_FILEPOS_DOWNLOAD) -
BASS_StreamGetFilePosition(FChan, BASS_FILEPOS_CURRENT)) * 100 div Len;
until (Progress > BUFFER_PRE_CACHE) or (not Result);
if not Result then Exit;
icy := BASS_ChannelGetTags(FChan, BASS_TAG_ICY);
if (icy = nil) then
icy := BASS_ChannelGetTags(FChan, BASS_TAG_HTTP); // no ICY tags, try HTTP
if (icy <> nil) then
begin
while (icy^ <> #0) do
begin
DoLog(String(icy), TS_TAGS);
icy := icy + Length(icy) + 1;
end;
DoMeta;
end;
BASS_ChannelSetSync(FChan, BASS_SYNC_META, 0, @MetaSync, Pointer(Self));
DoLog('Stream opened', TS_STATUS);
to finally play the stream (Execute method of the thread):
if BASS_ChannelPlay(FChan, True) then
begin
while (not Terminated) and (Now < FRecEnd) do Sleep(5);
BASS_ChannelStop(FChan);
DoLog('Recording stopped', TS_STATUS);
end else
DoLog('Recording not started. Error code: ' + IntToStr(Bass_ErrorGetCode()), TS_STATUS);
and it doesn't play - I get an error 38.
Regards,
Jacek
P.S. Thank you for the answer, I was almost ready to post my answer when you did it first
