android - 在 firemonkey 中播放声音

标签 android delphi media-player firemonkey

我使用 Firemonkey 部署一个带有音频文件的 Android 应用程序。 我有大约 30 个动物按钮,当用户选择每个按钮时,每个按钮都会听到动物的声音。这是第一个按钮的代码:

procedure TFMain.buttonLionClick(Sender: TObject);
begin
  MediaPlayer1.FileName := 'D:\lion.mp3';
  MediaPlayer1.Play;
end;

但是失败了。如何将声音部署到我的应用程序中?

最佳答案

首先,如果您想为 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 上的路径。

关于android - 在 firemonkey 中播放声音,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32892712/

相关文章:

regex - CPP 指令 #ifdef 正则表达式解决方案

javascript - 在 appcelerator 中使用 OAuth2

android - myIntent.putExtra 在 listView onClick 期间

Android EditText 和 addTextChangedListener

mysql - DelphiXE4 和 MySQL 社区 5.6.12 中的最大查询长度

Android MediaPlayer,VideoView rtsp www 身份验证问题

Android ListView——如何显示

德尔福和 Firedac : query Active vs query Open

Android,如何显示来自 onBufferingUpdate 的缓冲百分比

android - TextView 不是从按钮 onClick 中绘制的