结果:

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

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

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

实例代码:

 unit Unit1;

 interface

 uses
System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.StdCtrls,
FMX.Controls.Presentation, System.Actions, FMX.ActnList, FMX.Media; const
AUDIO_FILENAME = 'test.mp3'; //录音保存的文件名 type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Button3: TButton;
Button4: TButton;
Label1: TLabel;
Label2: TLabel;
ActionList1: TActionList;
acStartRecording: TAction;
acStopRecording: TAction;
acPlay: TAction;
acStop: TAction;
MediaPlayer1: TMediaPlayer;
procedure ActionList1Update(Action: TBasicAction; var Handled: Boolean);
procedure acStartRecordingExecute(Sender: TObject);
procedure acStopRecordingExecute(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure acPlayExecute(Sender: TObject);
procedure acStopExecute(Sender: TObject);
private
{ Private declarations }
public
FMicrophone: TAudioCaptureDevice;
function HasMicrophone: Boolean;
function IsMicrophoneRecording: Boolean;
{ Public declarations }
end; var
Form1: TForm1; implementation
uses
system.IOUtils;//需要引入
{$R *.fmx}
{$R *.NmXhdpiPh.fmx ANDROID} //得到不同平台的录音文件保存路径
function GetAudioFileName(const AFileName: string): string;
begin
{$IFDEF ANDROID}
Result := TPath.GetTempPath + '/' + AFileName;
{$ELSE}
{$IFDEF IOS}
Result := TPath.GetHomePath + '/Documents/' + AFileName;
{$ELSE}
Result := AFileName;
{$ENDIF}
{$ENDIF}
end; procedure TForm1.acPlayExecute(Sender: TObject);
begin
if IsMicrophoneRecording then //如果在录音,则先停止录音
acStopRecording.Execute;
//以下播放录音文件 AUDIO_FILENAME
MediaPlayer1.FileName := GetAudioFileName(AUDIO_FILENAME);
MediaPlayer1.Play;
end; procedure TForm1.acStartRecordingExecute(Sender: TObject);
begin
acStop.Execute;//选择停止录音
if HasMicrophone then
begin
//准备将录音保存到文件 'test.mp3'
FMicrophone.FileName := GetAudioFileName(AUDIO_FILENAME);
try
FMicrophone.StartCapture; //开始录音
except
ShowMessage('该设备不支持录音操作。');
end;
end
else
ShowMessage('没有麦克风设备。');
end; procedure TForm1.acStopExecute(Sender: TObject);
begin
MediaPlayer1.Stop;
end; procedure TForm1.acStopRecordingExecute(Sender: TObject);
begin
if IsMicrophoneRecording then //如果正在录音
try
FMicrophone.StopCapture; { 停止录音 }
except
ShowMessage('该设备不支持停止录音操作。');
end;
end; procedure TForm1.ActionList1Update(Action: TBasicAction; var Handled: Boolean);
begin
//判断图片的可见性
case (HasMicrophone and (FMicrophone.State = TCaptureDeviceState.Capturing)) of
True: Label2.Text := '录音';
False: Label2.Text := '停止录音';
end;
//判断 4 个按钮的是否可按下
acStartRecording.Enabled := not IsMicrophoneRecording and HasMicrophone;
acStopRecording.Enabled := IsMicrophoneRecording;
acStop.Enabled := Assigned(MediaPlayer1.Media) and (MediaPlayer1.State =
TMediaState.Playing);
acPlay.Enabled := FileExists(GetAudioFileName(AUDIO_FILENAME)) and
(MediaPlayer1.State <> TMediaState.Playing);
end; procedure TForm1.FormCreate(Sender: TObject);
begin
//初始化录音设备
FMicrophone := TCaptureDeviceManager.Current.DefaultAudioCaptureDevice;
end; //判断是否有麦克风
function TForm1.HasMicrophone: Boolean;
begin
Result := Assigned(FMicrophone);
end; //判断是否在录音
function TForm1.IsMicrophoneRecording: Boolean;
begin
Result := HasMicrophone and (FMicrophone.State = TCaptureDeviceState.Capturing);
end; end.

Android实例-录音与回放(播放MP3)(XE8+小米2)的更多相关文章

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

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

  2. Android实例-程序界面内截取屏幕(XE8+小米2)

    结果: 1.只能截取程序界面内的图片. 2.图片有点不清楚,自己设置清楚度. 实例代码: unit Unit1; interface uses System.SysUtils, System.Type ...

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

    结果: 1.可以自动向上移动,来防遮挡,但同时发现个问题,如果是按硬件返回没有问题,要是点输入法(QQ.百度输入法)上的隐藏就不行了. 2.点击Edit2后出现输入法,点输入法上的隐藏后, 再点Edi ...

  4. Android实例-监测网络状态及一些事件(XE8+小米2)

    结果: 1.网络连接:是指现在可不可以上网(你非要问我什么是网,我会K你呀的). 2.WIFI网络:是指现在可以上网,用的是不是WIFI网络(如果你打开了WIFI那它会显示正在使用WIFI). 3.移 ...

  5. Android实例-解决启动黑屏问题(XE8+小米2)

    结果: 1.在启动时马上出现图片界面,但在出现程序界面前会有黑屏,大约有0.2秒左右. 实现: 1.建立2个文件:loading.png和styles.xml: ①其中loading.png是启动时替 ...

  6. Android实例-如何使用系统剪切板(XE8+小米2)

    结果: 发现个问题,就是粘贴时会清除之前的信息. unit Unit1; interface uses System.SysUtils, System.Types, System.UITypes, S ...

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

    上一篇介绍了如何使用Mediarecorder来录音,以及播放录音.不过并没有达到我的目的,一边录音一边播放.今天就讲解一下如何一边录音一边播放.使用AndioRecord录音和使用AudioTrac ...

  8. IOS使用AVAudioPlayer播放mp3歌曲文件并监听来电打断

    本实例实现了AVAudioPlayer播放mp3歌曲文件,实现了播放.暂停.继续操作,音乐音量控制.播放进度显示,同时监听来电打断事件 一.控件初始化 - (void)viewDidLoad { [s ...

  9. Android命令行播放MP3音乐

    /*************************************************************************** * Android命令行播放MP3音乐 * 说 ...

随机推荐

  1. [itint5]两有序数组的中位数

    这个题和leetcode的基本一样.用了更好点的思路.在A中折半猜是不是中位数,A中没有后在B中猜.最后猜到B[j]<=A[i]<=B[j+1],此时,无论奇偶(2k+1或者2k个),A[ ...

  2. CentOS7 64位 自动分配IP地址设置

    vim /etc/sysconfig/network-scripts/ifcfg-eno16777736 # ifcfg-后接网卡名称 配置如下,ONBOOT设置为yes HWADDR=:0C::E9 ...

  3. Android安全问题 抢先接收广播 - 内因篇之广播发送流程

    导读:本文说明系统发送广播的部分流程,如何利用Intent查找到对应接收器.我们依然只关注接收器的排序问题 这篇文章主要是针对我前两篇文章 android安全问题(四) 抢先开机启动 - 结果篇 an ...

  4. dom4j解析器 基于dom4j的xpath技术 简单工厂设计模式 分层结构设计思想 SAX解析器 DOM编程

    *1 dom4j解析器   1)CRUD的含义:CreateReadUpdateDelete增删查改   2)XML解析器有二类,分别是DOM和SAX(simple Api for xml).     ...

  5. 【转】Picasso – Android系统的图片下载和缓存类库

    来源:http://blog.chengyunfeng.com/?p=492 另一篇参考:http://blog.csdn.net/xu_fu/article/details/17043231 Pic ...

  6. 如何写mysql的定时任务

     什么是事件: 一组SQL集,用来执行定时任务,跟触发器很像,都是被动执行的,事件是因为时间到了触发执行,而触发器是因为某件事件(增删改)触发执行: 查看是否开启: show variables li ...

  7. @深入注解,在Java中设计和使用自己的注解

    我们用过 JDK给我们提供的  @Override  @Deprecated @SuppressWarning 注解  ,这些注解是JDK给我们提供的 ,我们只是在用别人写好的东西 ,那么我们是否可以 ...

  8. Codeforces 374A - Inna and Pink Pony

    原题地址:http://codeforces.com/contest/374/problem/A 好久没写题目总结了,最近状态十分不好,无论是写程序还是写作业还是精神面貌……NOIP挂了之后总觉得缺乏 ...

  9. 函数buf_LRU_free_from_common_LRU_list

    /******************************************************************//** Try to free a clean page fro ...

  10. requirejs 小结

    1,“生搬硬套”-----js依赖的写法,依赖关系如这里的嵌套关系: /** * 模块化加载,注意各个js文件的依赖关系(嵌套) */ require(["jquery"], fu ...