我使用Firemonkey部署一个Android应用程序,其中包含音频文件。 我有大约30个动物按钮,当用户选择它时,每个按钮都会听到动物的声音。这是第一个按钮的代码:
procedure TFMain.buttonLionClick(Sender: TObject);
begin
MediaPlayer1.FileName := 'D:\lion.mp3';
MediaPlayer1.Play;
end;
但它失败了。如何将声音部署到我的应用程序中?
答案 0 :(得分:4)
首先,如果你想为Android构建你的应用程序,你需要将.mp3转换为.3gp才能播放它。 (您可以使用此网站:http://video.online-convert.com/convert-to-3gp;只需上传您的文件并点击转换即可。)
其次,您需要在资源中包含您的文件;转到项目>资源和图像,然后选择查看所有文件,然后选择.3gp文件并添加它们。
现在您可以制作一个程序来播放资源中的声音和音乐: (使用TMediaPlayer)
procedure TForm1.PlayAudio(ResourceID: string); //PLAY MUSIC FROM RESOURCES
var
ResStream: TResourceStream;
TmpFile: string;
begin
ResStream := TResourceStream.Create(HInstance, ResourceID, RT_RCDATA);
try
TmpFile := TPath.Combine(TPath.GetDocumentsPath, 'tmp.3gp');
//TPath.Combine(TPath.GetDocumentsPath, 'filename') { Internal }
//TPath.Combine(TPath.GetSharedDocumentsPath, 'filename') { External }
ResStream.Position := 0;
ResStream.SaveToFile(TmpFile);
MediaPlayer1.FileName := TmpFile;
MediaPlayer1.Play;
finally
ResStream.Free;
end;
end;
注意:您需要这样做,因为您无法直接从您的资产中播放文件,在部署到Android时会保存资源。
现在播放音乐只需使用例如:PlayAudio('Resource_1')
注意:在播放新音频之前,您需要使用以下命令停止前一个音频:
MediaPlayer1.Stop;
MediaPlayer1.Clear;
如果您想循环播放音乐,那么您可以使用TTimer在播放结束后重播声音。
注意:这适用于android。在Windows上使用.mp3,.wav或类似的内容和TPath.Combine(TPath.GetTempPath, 'tmp.wav')
来获取您在Windows上的路径。
答案 1 :(得分:2)
Android应用程序使用Android设备上的文件。 D:\test.mp3
告诉我这个文件驻留在Windows计算机上,也许是你的开发机器。这不是它的工作原理,Android不知道你的开发机器上的文件。您需要使用Android设备上的文件,并引用该路径(使用Android将识别的适当路径结构)。
您似乎希望将这些文件部署到Android设备。在那种情况下,研究:
http://docwiki.embarcadero.com/RADStudio/XE8/en/Deployment_Manager
答案 2 :(得分:1)
您的根本问题是缺乏对不同文件系统之间差异的理解。一些(Windows,DOS)使用驱动器样式通知(后跟一个字母':')但许多(例如Unix衍生产品,OS X,iOS等)没有,看到驱动器名称为只是更一般的文件结构的一部分。另外windows / dos使用' \'作为分隔符,大多数其他人使用' /'。 Fire monkey提供了许多特殊的位置和分隔符来帮助您构建通用代码。