请问exe资源内嵌的mp3或wma,如何并且“流”的方式直接播放呢?盼赐例子(送100分):) Delphi / Windows SDK/APIhttp://www.delphi2007.net/DelphiMultimedia/html/delphi_20061009145227262.html
请问如何exe内嵌mp3或wma,并且“流”的方式直接播放呢?盼赐例子(送100分):)
传统的临时存出mp3到硬盘的方法,我找到很多了,但是唯独 用流的方式,直读音频并且播放的教程例子却没有。
是需要用文件流,内存流的方式吧?
可如何读取流的音频呢?mediaplay不支持读取“流”
哪一个组件,可以像图片bmp那样,“loadformStream” 呢?
期待直接例子,谢谢啦!:) 100分封送
呵,都出200分了,可见很急了不是,用API吧,很管用的,照我说的没错
没有玩过,学习~~~~
改用wav格式,可用系统函数playsound直接播放
PlaySound('文件资源名',HInstance,SND_RESOURCE);
可用豪杰软件把mp3格式转为wav格式
1.采用楼上的方法,
2.是否可以考虑,将exe中的mp3资源导出到硬盘上,再播放mp3文件呢??
mark
"用API吧,很管用的,照我说的没错"
--用哪个API啊?可否详细说一下呢:)
WAV的方式,我都掌握的。但目前,需要Mp3,或者wma的格式。
“将exe中的mp3资源导出到硬盘上,再播放mp3文件”-目前,领导要求不能在客户端硬盘上留下任何的“痕迹”,所以还是要用 流啊 ...可流应该怎样用呢?
WAV流的介绍很多,但是Mp3的调用,却基本没有
UP :)
总结上面的回答:WAV格式的资源可以直接播放,MP3格式的资源不可以直接播放。
变通的方法:讲MP3格式的资源在内存里转换成WAV格式,直接播放。
学习
我有一个放MP3的DLL
可以流播放
DLL与示例文件例已发到你的信箱了
以下是测试写的代码
Procedure TFrmMain.FormCreate(Sender: TObject);
Var
Res: TResourceStream;
Begin
If (HIWORD(BASS_GetVersion) <> BASSVERSION) Then
Begin
MessageBox(0, 'An incorrect version of BASS.DLL was loaded', Nil, MB_ICONERROR);
Halt;
End;
If (Not BASS_Init(-1, 44100, 0, Handle, Nil)) Then
Begin
MessageBox(Handle, '无法初始化设备!', '错误', MB_ICONHAND);
Halt;
End;
Res := TResourceStream.CreateFromID(HInstance, 1, 'MP3');
HS := BASS_StreamCreateFile(true, Res.Memory, 0, Res.Size, BASS_SAMPLE_MONO);
Res.Free;
End;
Procedure TFrmMain.FormDestroy(Sender: TObject);
Begin
BASS_Free;
End;
Procedure TFrmMain.CmdPlayClick(Sender: TObject);
Begin
BASS_ChannelPlay(HS, False);
End;
对于分帧的MPEG音频或视频,一般可以通过搜索相关的帧头的特定信息来取得数据。具体请参见相关的RFC文档。