samplerate channel(如何计算在Android的声音频率是多少)

本文目录
如何计算在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;
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的可以参考一下。
这样就能计算出实时的声音频率了。
格式工厂合并视频时显示audio channel sample rate cant be 0 但是我的音频比特率明明不是0啊
我同样遇到这个问题 已经解决了 做法是在“输出配置”中设置 1、选择“转换”2、单击进入“质量和大小”——音频流——“音频流索引”——在下拉数据中选择一下不是“0”就可以了

更多文章:
blast premier春季赛(csgo战队vitality有谁)
2026年9月7日 21:50
全球新冠肺炎疫情背景下航运发展(盐田港复苏日志:半年历劫从“低谷”到“爆仓” 疫情之后巨轮如何越洋航行)
2026年9月7日 17:10
matlab求解带字母参数方程组(我想matlab求一个关于x,y的方程组 ab c d f e h m n 都是参数)
2026年9月7日 16:30
oracle中的循环语句(下面哪个不是oracle程序设计中的循环语句 a for)
2026年9月7日 15:30
电脑里2个系统怎么删除一个(电脑开机显示有两个系统,如何删除一个)
2026年9月7日 12:20
scrollthrough意思(“scroll”是什么意思)
2026年9月7日 08:00




