Android(安卓)实时采集声音的频率和大小
16lz
2021-01-24
Android实时采集声音的频率和大小
注
笔者本不是专业人士,通过查了几篇资料和请教软件部门的同学搭的demo ,如有不正确之处,请及时指出
1.原理
- 声音大小省略,网上可以很好搜到
- 使用
AudioRecord
类采集声音信息,通过傅里叶转换,获取声音的频率
2.AudioRecord
类说明
/** *@param audioSource 采集声音源 MediaRecorder.AudioSource.MIC 为采集麦克风 *@param sampleRateInHz 采集声音的频率,因设备而定,44100Hz 支持所有的设备,部分设 备上也支持 22050 16000 11025 *@param channelConfig 采集声音的声道 AudioFormat.CHANNEL_CONFIGURATION_MONO为单声道 *@param audioFormat 返回信息的格式 这里是 AudioFormat.ENCODING_PCM_16BIT *@param bufferSizeInBytes 缓存区大小 有要求的 ,可以用 AudioRecord.getMinBufferSize 获取 */public AudioRecord(int audioSource, int sampleRateInHz, int channelConfig, int audioFormat,int bufferSizeInBytes)/** *@param sampleRateInHz 采集声音的频率 *@param channelConfig 采集声音的声道 *@param audioFormat 返回信息的格式 * */static public int getMinBufferSize(int sampleRateInHz, int channelConfig, int audioFormat)
3.傅里叶变换简单说明
- 快速傅里叶变换输入的一组数组,输出等长的一组数组
- 数组由时域变换成了频域,数组的中最大的值代表能量最大,下坐标乘以频幅就等于该点频率,通常以能量最大的频率代表声音的频率.
- 频幅指一个单位所代表的频率大小,例如下坐标为2 ,该点的频率=2*频幅.频幅=采样频率/采样点
- 采样点指采集信息的长度,可自己定,但最好为2的n次幂,不然结果会为零.
项目地址
https://github.com/xuanxuandaoren/SoundAnalysis/tree/master
更多相关文章
- 带你一步一步手动实现Android热更新
- Android(14) ArrayAdapter(数组适配器)的三种方法
- android 生成二维码图片
- Android中汉字转拼音的内存优化处理
- Android中SparseArray性能优化的使用方法
- Android(安卓)使用SoundPool播放音频
- Android提高十八篇之自定义Menu(TabMenu) [转]
- android 小游戏 ---- 数独(三)
- Android开发之Java设计模式基础篇