如何计算在Android的声音频率是多少
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何计算在Android的声音频率是多少相关的知识,希望对你有一定的参考价值。
实现思路:
1. 通过AudioRecord类读取Mic传入的数据
2. 对读取的数据进行快速傅立叶变换
3. 计算出进过计算后的复数的模即为需要的频率
第一步很好实现,new 一个AudioRecord即可实现读取mic的输入,简略版代码如下:
AudioRecord audioRecord = new AudioRecord(MediaRecorder.Audiosource.MIC,
sampleRate, AudioFormat.CHANNEL_CONFIGURATION_MONO,
AudioFormat.ENCODING_PCM_16 BIT, sampleRate * 6);
audioRecord.startRecording();
byte[] bufferRead = new byte[READ_BUFFERSIZE];
while (audioRecord.read(bufferRead, 0, READ_BUFFERSIZE) > 0)
currentFrequency = processSampleData(bufferRead, SAMPLE_RATE);
这里的sampleRate取的是44100,stackoverflow上说AudioRecord的参数根据不同的机器可能不同,这一点通过遍历可能的参数新建AudioRecord类,具体可以参见stackoverflow上的这个问答。
bufferRead为读取数据存储的容器。
currentFrequency即为通过快速傅立叶变换计算出的声音频率。
processSampleDate为调用的本地方法,因为已经有人用C实现了快速傅立叶变换,通过传入参数即可计算出声音的频率。
当然,在使用mic读取数据之前需要加上相应的权限。
关于android如何通过NDK编译C语言的教程网上也有很多,在Linux下很方便,在windows上就比较麻烦了,需要通过安装Cygwin模拟linux的环境,调用GCC编译文件。
这篇博客的教程讲得还是很详细的,建议没有用过NDK的可以参考一下。
这样就能计算出实时的声音频率了。
参考技术A 20以上 20000以下,简练吧!!!!以上是关于如何计算在Android的声音频率是多少的主要内容,如果未能解决你的问题,请参考以下文章