Android实例-录音与回放(播放MP3)(XE8+小米2)
结果:
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)相关推荐
- Android实例-解决虚拟键盘遮挡问题(XE8+小米2)
Android实例-解决虚拟键盘遮挡问题(XE8+小米2) 参考文章: (1)Android实例-解决虚拟键盘遮挡问题(XE8+小米2) (2)https://www.cnblogs.com/FKde ...
- Android实例-获取安卓手机WIFI信息(XE8+小米2)
结果: 1.必须打开Access wifi state权限,不打开权限会出图二的错误. 相关资料: http://blog.csdn.net/lyf_lyf/article/category/1735 ...
- Android 实时录音和回放,边录音边播放 (KTV回音效果)
原文地址为: Android 实时录音和回放,边录音边播放 (KTV回音效果) 上一篇介绍了如何使用Mediarecorder来录音,以及播放录音.不过并没有达到我的目的,一边录音一边播放.今天就讲解 ...
- android录音函数,Android - 实现录音变声播放
变声功能大家都接触过,比如qq中发送一段变声消息,网络视频中演员经过处理的声音.其实这个功能实现起来并不复杂,因为声音处理的算法有大神已经帮我们写好,拿来用就行. 代码是用c写的,我们来稍微处理一下 ...
- android 耳机 录音,Android 蓝牙耳机录音以及蓝牙耳机播放
此文是借鉴于CSDN 某大牛博客改进之后的代码 首先, 要保证蓝牙设备的链接,可用手机直接蓝牙设备进行连接,连接的代码不写了 如蓝牙耳机已开启则直接运行以下步骤 1. 实例化 录音对象Recorder ...
- android 播放MP3实例
在android中播放mp3非常简单,也是项目中经常使用的,比如说要做项目的背景音乐,应用中某些功能的提示音等的.应用非常广泛,下面提供一个简单的使用实例: layout文件的配置: <?xml ...
- 我的Android进阶之旅------Android MediaPlayer播放mp3的实例--简易mp3播放器
大家好我们今天研究的是Android中很重要也最为复杂的媒体播放器---MediaPlayer. Android的MediaPlayer包含了Audio和video的播放功能,在Android的界面上 ...
- android java 录音放大_Android实现录音功能实现实例(MediaRecorder)
本文介绍了Android实现录音的实例代码(MediaRecorder),分享给大家,具体如下: Android提供了两个API用于录音的实现:MediaRecorder 和 AudioRecord, ...
- android中录音断点播放,Android实现语音播放与录音功能
本文实例为大家分享了Android实现语音播放与录音的具体代码,供大家参考,具体内容如下 项目用到的技术点和亮点 语音录音 (单个和列表) 语音播放(单个和列表) 语音录音封装 语音播放器封装 语音列 ...
最新文章
- activemq 开启监听_ActiveMQ 消息监听 MessageListener 的使用
- Scala中Manifest、ClassTag、TypeTag的学习
- java仿真软件_一个简单的Java仿真程序
- WebService入门篇
- C#中容器控件GroupBox、Panel、TabControl
- php按数字分页类,PHP简单实现数字分页功能示例
- 【STL源码学习】std::list类的类型别名分析
- CVPR 2020丨更精准的视频目标检测:基于记忆增强的全局-局部整合网络的方法
- 鸿蒙内核之内存调测:动态内存池信息统计
- extjs_10_自己定义combotree组件
- Gym - 101142F Folding(折半)
- scala连接mongodb_使用Casbah / Scala在MongoDB上执行自定义功能
- 怎么批量修改文件后缀名?
- MySQL的连接字符串 concat、concat_ws、group_concat、repeat()函数用法
- 我是如何纯靠技术在大学月入上万,收获人生第一个10W
- 这么黄的教程,我看了2小时就关了!
- The requested operation requires elevation问题解决
- ajax中返回sucess里使用this.$message()
- phpems 修改模板_phpems二次开发手册
- 【ZJOI2022】 众数(根号分治)