Delphi 低音库:从记忆中播放

Delphi 低音库:从记忆中播放,delphi,delphi-7,bass,Delphi,Delphi 7,Bass,我正在尝试使用BASS dll播放MemStream:TMemoryStream中的声音片段。我可以从wav文件中读取它,它可以正常播放,但我想让它直接读取内存流 我已经在FormCreate上初始化了声音设备 procedure TForm1.FormCreate(Sender: TObject; begin SafeLoadLibrary ('bass.dll'); //load the bass dll BASS_Init(-1, 22050, BASS_DEVICE_1

我正在尝试使用BASS dll播放MemStream:TMemoryStream中的声音片段。我可以从wav文件中读取它,它可以正常播放,但我想让它直接读取内存流

我已经在FormCreate上初始化了声音设备

procedure TForm1.FormCreate(Sender: TObject;  
begin  
SafeLoadLibrary ('bass.dll');      //load the bass dll
BASS_Init(-1, 22050, BASS_DEVICE_16BITS, Form1.Handle, nil);   //Initialize an output device
end;
然后,我在内存流中创建一个正弦波,并添加.WAV标题,以便内存流包含正确格式的声音:

MemStream := WriteWAVFromStream(MemStream, SAMPLERATE, BITSPERSAMPLE);
MemStream.Position := 0;
然后我尝试使用低音播放流:

var
ch: HSTREAM;
P: ^TMemoryStream;

P := @MemStream;
ch := BASS_StreamCreateFile(TRUE, P, 0, 0, BASS_STREAM_AUTOFREE);
BASS_ChannelPlay(ch, False);

finally
Memstream.Free;

你知道BASS为什么不播放memstream吗?

你给BASS的是Delphi
TMemoryStream
对象的地址。你确定你应该这么做吗?我认为BASS对这种Delphi类一无所知


相反,库可能需要一个指向
TMemoryStream
对象管理的实际波形音频数据的指针:
MemStream.Memory

您正在为bass提供Delphi
TMemoryStream
对象的地址。你确定你应该这么做吗?我认为BASS对这种Delphi类一无所知。我认为该库更倾向于使用指向
TMemoryStream
对象管理的实际波形音频数据的指针:
MemStream.Memory
。还要注意以下警告:“当从内存进行流式传输(mem=TRUE)时,在流被释放之前,不得释放内存。”@AndreasRejbrand您应该将此作为回答发布谢谢。我现在可以用了。我需要通过MemStream.size:channel:=BASS\u StreamCreateFile(true,MemStream.memory,0,MemStream.size,BASS\u stream\u AUTOFREE)添加MemStream.memory和流的大小;BASS_ChannelPlay(通道,假);