结果:

1.增加ActionList中的Action时,需要跳到Master界面,不能在Android4Phonel界面下。

2.如果不打开权限的话,会提示“该设备不支持停止录音操作”(Record audion改为True)。

3.播放的效果是播放一次就停止了。不是循环的。

实例代码:

  1 unit Unit1;
  2
  3 interface
  4
  5 uses
  6   System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
  7   FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.StdCtrls,
  8   FMX.Controls.Presentation, System.Actions, FMX.ActnList, FMX.Media;
  9
 10 const
 11   AUDIO_FILENAME = 'test.mp3'; //录音保存的文件名
 12
 13 type
 14   TForm1 = class(TForm)
 15     Button1: TButton;
 16     Button2: TButton;
 17     Button3: TButton;
 18     Button4: TButton;
 19     Label1: TLabel;
 20     Label2: TLabel;
 21     ActionList1: TActionList;
 22     acStartRecording: TAction;
 23     acStopRecording: TAction;
 24     acPlay: TAction;
 25     acStop: TAction;
 26     MediaPlayer1: TMediaPlayer;
 27     procedure ActionList1Update(Action: TBasicAction; var Handled: Boolean);
 28     procedure acStartRecordingExecute(Sender: TObject);
 29     procedure acStopRecordingExecute(Sender: TObject);
 30     procedure FormCreate(Sender: TObject);
 31     procedure acPlayExecute(Sender: TObject);
 32     procedure acStopExecute(Sender: TObject);
 33   private
 34     { Private declarations }
 35   public
 36     FMicrophone: TAudioCaptureDevice;
 37     function HasMicrophone: Boolean;
 38     function IsMicrophoneRecording: Boolean;
 39     { Public declarations }
 40   end;
 41
 42 var
 43   Form1: TForm1;
 44
 45 implementation
 46 uses
 47   system.IOUtils;//需要引入
 48 {$R *.fmx}
 49 {$R *.NmXhdpiPh.fmx ANDROID}
 50
 51 //得到不同平台的录音文件保存路径
 52 function GetAudioFileName(const AFileName: string): string;
 53 begin
 54   {$IFDEF ANDROID}
 55   Result := TPath.GetTempPath + '/' + AFileName;
 56   {$ELSE}
 57   {$IFDEF IOS}
 58   Result := TPath.GetHomePath + '/Documents/' + AFileName;
 59   {$ELSE}
 60   Result := AFileName;
 61   {$ENDIF}
 62   {$ENDIF}
 63 end;
 64
 65 procedure TForm1.acPlayExecute(Sender: TObject);
 66 begin
 67   if IsMicrophoneRecording then //如果在录音,则先停止录音
 68   acStopRecording.Execute;
 69   //以下播放录音文件 AUDIO_FILENAME
 70   MediaPlayer1.FileName := GetAudioFileName(AUDIO_FILENAME);
 71   MediaPlayer1.Play;
 72 end;
 73
 74 procedure TForm1.acStartRecordingExecute(Sender: TObject);
 75 begin
 76   acStop.Execute;//选择停止录音
 77   if HasMicrophone then
 78   begin
 79     //准备将录音保存到文件 'test.mp3'
 80     FMicrophone.FileName := GetAudioFileName(AUDIO_FILENAME);
 81     try
 82     FMicrophone.StartCapture; //开始录音
 83     except
 84     ShowMessage('该设备不支持录音操作。');
 85     end;
 86   end
 87   else
 88   ShowMessage('没有麦克风设备。');
 89 end;
 90
 91 procedure TForm1.acStopExecute(Sender: TObject);
 92 begin
 93   MediaPlayer1.Stop;
 94 end;
 95
 96 procedure TForm1.acStopRecordingExecute(Sender: TObject);
 97 begin
 98   if IsMicrophoneRecording then //如果正在录音
 99   try
100     FMicrophone.StopCapture; { 停止录音 }
101   except
102     ShowMessage('该设备不支持停止录音操作。');
103   end;
104 end;
105
106 procedure TForm1.ActionList1Update(Action: TBasicAction; var Handled: Boolean);
107 begin
108   //判断图片的可见性
109   case (HasMicrophone and (FMicrophone.State = TCaptureDeviceState.Capturing)) of
110     True: Label2.Text := '录音';
111     False: Label2.Text := '停止录音';
112   end;
113   //判断 4 个按钮的是否可按下
114   acStartRecording.Enabled := not IsMicrophoneRecording and HasMicrophone;
115   acStopRecording.Enabled := IsMicrophoneRecording;
116   acStop.Enabled := Assigned(MediaPlayer1.Media) and (MediaPlayer1.State =
117   TMediaState.Playing);
118   acPlay.Enabled := FileExists(GetAudioFileName(AUDIO_FILENAME)) and
119   (MediaPlayer1.State <> TMediaState.Playing);
120 end;
121
122 procedure TForm1.FormCreate(Sender: TObject);
123 begin
124   //初始化录音设备
125   FMicrophone := TCaptureDeviceManager.Current.DefaultAudioCaptureDevice;
126 end;
127
128 //判断是否有麦克风
129 function TForm1.HasMicrophone: Boolean;
130 begin
131   Result := Assigned(FMicrophone);
132 end;
133
134 //判断是否在录音
135 function TForm1.IsMicrophoneRecording: Boolean;
136 begin
137   Result := HasMicrophone and (FMicrophone.State = TCaptureDeviceState.Capturing);
138 end;
139
140 end.

转载于:https://www.cnblogs.com/FKdelphi/p/4784842.html

Android实例-录音与回放(播放MP3)(XE8+小米2)相关推荐

  1. Android实例-解决虚拟键盘遮挡问题(XE8+小米2)

    Android实例-解决虚拟键盘遮挡问题(XE8+小米2) 参考文章: (1)Android实例-解决虚拟键盘遮挡问题(XE8+小米2) (2)https://www.cnblogs.com/FKde ...

  2. Android实例-获取安卓手机WIFI信息(XE8+小米2)

    结果: 1.必须打开Access wifi state权限,不打开权限会出图二的错误. 相关资料: http://blog.csdn.net/lyf_lyf/article/category/1735 ...

  3. Android 实时录音和回放,边录音边播放 (KTV回音效果)

    原文地址为: Android 实时录音和回放,边录音边播放 (KTV回音效果) 上一篇介绍了如何使用Mediarecorder来录音,以及播放录音.不过并没有达到我的目的,一边录音一边播放.今天就讲解 ...

  4. android录音函数,Android - 实现录音变声播放

    变声功能大家都接触过,比如qq中发送一段变声消息,网络视频中演员经过处理的声音.其实这个功能实现起来并不复杂,因为声音处理的算法有大神已经帮我们写好,拿来用就行. 代码是用c写的,我们来稍微处理一下 ...

  5. android 耳机 录音,Android 蓝牙耳机录音以及蓝牙耳机播放

    此文是借鉴于CSDN 某大牛博客改进之后的代码 首先, 要保证蓝牙设备的链接,可用手机直接蓝牙设备进行连接,连接的代码不写了 如蓝牙耳机已开启则直接运行以下步骤 1. 实例化 录音对象Recorder ...

  6. android 播放MP3实例

    在android中播放mp3非常简单,也是项目中经常使用的,比如说要做项目的背景音乐,应用中某些功能的提示音等的.应用非常广泛,下面提供一个简单的使用实例: layout文件的配置: <?xml ...

  7. 我的Android进阶之旅------Android MediaPlayer播放mp3的实例--简易mp3播放器

    大家好我们今天研究的是Android中很重要也最为复杂的媒体播放器---MediaPlayer. Android的MediaPlayer包含了Audio和video的播放功能,在Android的界面上 ...

  8. android java 录音放大_Android实现录音功能实现实例(MediaRecorder)

    本文介绍了Android实现录音的实例代码(MediaRecorder),分享给大家,具体如下: Android提供了两个API用于录音的实现:MediaRecorder 和 AudioRecord, ...

  9. android中录音断点播放,Android实现语音播放与录音功能

    本文实例为大家分享了Android实现语音播放与录音的具体代码,供大家参考,具体内容如下 项目用到的技术点和亮点 语音录音 (单个和列表) 语音播放(单个和列表) 语音录音封装 语音播放器封装 语音列 ...

最新文章

  1. activemq 开启监听_ActiveMQ 消息监听 MessageListener 的使用
  2. Scala中Manifest、ClassTag、TypeTag的学习
  3. java仿真软件_一个简单的Java仿真程序
  4. WebService入门篇
  5. C#中容器控件GroupBox、Panel、TabControl
  6. php按数字分页类,PHP简单实现数字分页功能示例
  7. 【STL源码学习】std::list类的类型别名分析
  8. CVPR 2020丨更精准的视频目标检测:基于记忆增强的全局-局部整合网络的方法
  9. 鸿蒙内核之内存调测:动态内存池信息统计
  10. extjs_10_自己定义combotree组件
  11. Gym - 101142F Folding(折半)
  12. scala连接mongodb_使用Casbah / Scala在MongoDB上执行自定义功能
  13. 怎么批量修改文件后缀名?
  14. MySQL的连接字符串 concat、concat_ws、group_concat、repeat()函数用法
  15. 我是如何纯靠技术在大学月入上万,收获人生第一个10W
  16. 这么黄的教程,我看了2小时就关了!
  17. The requested operation requires elevation问题解决
  18. ajax中返回sucess里使用this.$message()
  19. phpems 修改模板_phpems二次开发手册
  20. 【ZJOI2022】 众数(根号分治)

热门文章

  1. 验证组播的TTL阀值
  2. ExtAspNet应用技巧(十九) - 日志管理
  3. echarts常用方法,legend状态支持两张图片切换(四)
  4. 企业短信平台会被其他的营销工具代替吗?企业短信平台有什么过人之处
  5. DPM2007轻松恢复Exchange邮件,DPM2007系列之三
  6. 说说JSON和JSONP,也许你会豁然开朗
  7. 记一次修复被篡改的IE首页
  8. ThinkPHP 模板循环输出 Volist 标签
  9. SQL Server 行列转换(2)
  10. 【莓控】黑莓8110中文说明书