程序源码:http://download.csdn.net/detail/jsgaobiao/9456694

Ø 【实验目的】

使用AndroidStudio实现一个录音机的功能,要求有录音、播放等按钮并显示出声音的时域波形。

选做:显示出声音的频率波形。

Ø 【实验器材】

Android Studio 1.5.1

Xiaomi Pad (7.9’’): Android 4.4.4 , 1536*2048 xhdpi

Ø 【实验原理】

一、UI界面的设计

1、 UI界面采用框架布局(FrameLayout),并在最高层的FrameLayout属性中添加android:background="@drawable/background"属性,设置背景图片。其中,背景图片文件放在工程“\app\src\main\res\drawable”目录下。

2、 在背景FrameLayout上添加4个按钮(Button)——开始录音、结束录音、播放录音、结束播放。设置好字号、id、对齐等属性。


3、 在按钮下方的空白区域添加一个FrameLayout布局,并在其中添加自定义的DrawView组件用于显示波形。

其中,DrawView是View组件的子类


二、录音和播放功能的实现

1、 录音功能依靠MediaRecorder类实现。

首先定义MediaRecorder类的对象myRecorder,并将其与”开始录音”、“停止录音”按钮关联。

在”开始录音“的监听函数中,通过myRecorder设置录音源为麦克风,以及录音文件的格式(MPEG_4)、路径和编码方式(DEFAULT)等。


在”停止录音”的监听函数中,执行myRecorder的stop()函数,并将myRecorder释放。

2、 播放功能依靠MediaPlayer类实现。

首先定义MediaPlayer类的对象myPlayer,并将其与“播放录音”、“停止播放”按钮的监听函数关联。

在“播放录音”的监听函数中,设置播放文件的路径为“开始录音”中保存的文件路径,并执行myPlayer.start()函数进行播放。

在”停止录音”的监听函数中,执行myPlayer的release()函数,将myPlayer对象释放掉。

3、 为了保证程序的正确运行,防止出现如“未结束录音就开始播放”等可能使得程序崩溃的情况出现,我为4个按钮的监听程序加上了互斥锁——也就是程序中的Recording和Playing两个boolean变量。

通过判断当前是否在录音中或播放中,保证错误的按键顺序不会被执行。同时,如果按键的顺序出现错误,还会出现如:”上一段录音正在播放,请结束播放后重试!“等提示信息。

三、波形绘制

1、 时域波形绘制

通过回调onWaveFormDataCapture函数更新获得waveform的数据,并根据数据的大小将其映射成长短不一的波形(如上图所示)。其中采样的数据个数为128个,采样频率为Visualizer.getMaxCaptureRate() / 2;

2、 频域波形绘制

通过回调onFftDataCapture函数获得fft[]的数据,对其进行一些简单的处理。

其中采样数据个数、采样频率都和1中相同,range=48——将频率数据映射为range等份,再通过直方图的形式可视化,以示和时域波形的区别。其效果如下图所示:

Ø 【小结】

因为之前没有接触过Android编程,第一次实验花费了挺多的时间,收获还比较多。

首先是基本了解了Android工程的结构和Android Studio的基本使用,熟悉了Java的基本语法。其次基本掌握了MediaRecorder、MediaPlayer等音频处理相关的类,学会了使用IDE进行调试和处理错误。

借这个机会我还购买了两本Android编程的书,希望这学期可以跟随机器感知实验这门课程读完这两本书,掌握Android应用开发的本领。


更多相关文章

  1. android启动模式singleInstance的疑惑
  2. android TabHost简单使用
  3. Android(安卓)GPS学习笔记—JNI层实现
  4. android activty的生命周期
  5. Android(安卓)Telechips89xx背光控制流程
  6. Android(安卓)studio加载so调用本地方法
  7. Android(安卓)Audio Debug相关方法
  8. Android原生音量控制【转】
  9. Android—fragment无法remove

随机推荐

  1. 使用adb从android手机拉取文件到电脑
  2. android 取得屏幕宽度
  3. android 输入法界面显示的开关
  4. Pro Android学习笔记(七二):HTTP服务(6):HttpUR
  5. 封装底部dialog弹窗 adapter T类型的适配
  6. Android棉花糖“不能播放这个视频”错误
  7. android vold.fstab的生成过程
  8. Android开源 - Luban(鲁班)可能是最接近
  9. 如何通过HttpURLConnection得到http 302
  10. 想在android中使用node.js和socket.io发