结果:

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. C#+SQL数据库备份和还原

    使用前要导入SQLDMO.dll(在com组件中导入Microsoft SQLDMO Object Library即可) /// /// DbOper类,主要应用SQLDMO实现对Microsoft ...

  2. UNIX内核的文件数据结构 -- v 节点与 i 节点

    龙泉居士:http://hi.baidu.com/zeyu203/item/cc89cfc0f36bfecc994aa07c 内核使用三种数据结构表示打开的文件(如图),他们之间的关系决定了在文件共享 ...

  3. BIG5编码表

    Big5 (Traditional Chinese) character code table code +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F ...

  4. Fast scroller styles

    <!-- Fast scroller styles --> <!-- Drawable to use as the fast scroll thumb. --> <att ...

  5. C#.Net 如何动态加载与卸载程序集(.dll或者.exe)5-----Assembly.Unload

    http://www.blogcn.com/user8/flier_lu/index.html?id=2164751&run=.04005F8 CLR 产品单元经理(Unit Manager) ...

  6. Oracle > count(*) / count(0) / count(1) | order by 1, 2

    select count(*), select count(0), select count(1) from table 在统计表的行数时候,经常用到 select count(*) 然而对于行数很多 ...

  7. Android开发之全局获取Context的技巧

    转自<第一行代码-Android>进阶篇 这本书对于入门来说确实很棒,很简单明了的介绍了Android开发中涉及到的方方面面,对我的帮助很大,同时记录一些该书中一些对我以后开发有用的东西, ...

  8. poj 1265 Area( pick 定理 )

    题目:http://poj.org/problem?id=1265 题意:已知机器人行走步数及每一步的坐标   变化量 ,求机器人所走路径围成的多边形的面积.多边形边上和内部的点的数量. 思路:1.以 ...

  9. C# List 使用方法 支持FrameWork2.0 环境

    List查找指定数据 var tmpBillInputCheckList = BillInputCheckList.FindAll(m => m.BillDetailGuid == tmpBil ...

  10. 修改Android默认背光值

    /********************************************************************* * 修改Android默认背光值 * 说明: * 本文主要 ...