Android之音频开发基础入门
16lz
2021-01-26
采集音频是模拟信号转化为数字信号的过程。
关于Android采集音频的过程,我们需要了解几个概念:
1.采样率
采样是把模拟信号转化为数字信号的过程。图上的纵向直线间隔越密集,表明采样率就越高,采样率越高,音频的音质就越高。
目前Android手机中,44100kHZ可以兼容全部手机的采样率。
2.量化精度(位宽)
上图中,箭头点为采样点。每个采样点都需要用一个数值表示大小,这个数值的类型可以是4bit,8bit,16bit,32bit等。位数越多,表示越精细,声音质量就越好,而数据量也会成倍增大。通常采用的是8bit或16bit。
3.声道数
表示声音录制的音源数或声音播放的扬声器数量。通常有单声道Mono 和双声道Stereo比较常见。
4.音频帧
音频数据是流式的,本身没有帧的概念。不像视频数据是由一张张图像组成的,一帧就是一张图像。
所以约定俗成取2.5ms - 60ms的数据量为一帧音频。
5. PCM
脉冲编码调制(Pulse Code Modulation),它的作用是把一个时间连续,取值连续的模拟信号变换成时间离散,取值离散的数字信号后在信道中传输。脉冲编码调制就是对模拟信号先抽样,再对样值幅度量化,编码的过程。
从手机采集的数据就是PCM原始数据。
代码:
1、声明需要的数据private AudioRecordmAudioRecord;private int mSampleRate =44100;//采样率private int mChannelCount = AudioFormat.CHANNEL_IN_MONO;//单声道private int mAudioSourse = MediaRecorder.AudioSource.MIC;//声音来源private int mAudioFormat = AudioFormat.ENCODING_PCM_16BIT;//位宽private int mMinBufferSize; //音频缓冲区大小2、获取缓冲区大小mMinBufferSize = AudioRecord.getMinBufferSize(mSampleRate, mChannelCount, mAudioFormat);3、开启一个子线程做采集工作int len =0;private void record()throws IOException { mAudioRecord.startRecording(); //开始采集 isRecording =true; file =new File(rootFile, "test.pcm"); //创建一个文件 if (!file.exists()) { file.createNewFile(); } new Thread(new Runnable() { @Override public void run() { byte[] bys =new byte[mMinBufferSize]; //根据缓冲区大小,设置字节数组的大小 FileOutputStream outputStream =null; try { outputStream =new FileOutputStream(file); } catch (FileNotFoundException e) { e.printStackTrace(); } while (isRecording) { //循环采集 len =mAudioRecord.read(bys, 0, bys.length); //采集到的数据存入数组中 try { outputStream.write(bys, 0, len); //将数据写入文件中 } catch (IOException e) { e.printStackTrace(); } } if (outputStream !=null) { try { outputStream.close(); } catch (IOException e) { e.printStackTrace(); } } } }).start(); }4、停止isRecording =false;if (mAudioRecord !=null) { mAudioRecord.stop(); mAudioRecord.release(); mAudioRecord =null;}
作者:阑珊处等你
链接:https://www.jianshu.com/p/91844b5d5a66
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
更多相关文章
- 一句话锁定MySQL数据占用元凶
- android导入外部数据库到项目中的使用方法
- android开发实战之做手机号和邮编查询小程序
- android保存数据的四种方法
- Android(安卓)MediaCodec 音频转码——硬编硬解
- android省市二级联动的实现
- Android日志:Google官方下拉刷新控件
- Android(安卓)AudioManager处理两个播放器同时有声音,停止其中一
- Android中 的各种Adapter 整理