实现思路:
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的可以参考一下。
这样就能计算出实时的声音频率了。
所有这个过程的源码都可以在我的 github上面找到,如有任何问题欢迎探讨。

Android中实时获取声音频率相关推荐

  1. android pcm 音量_Android中实时获取音量分贝值详解

    基础知识 度量声音强度,大家最熟悉的单位就是分贝(decibel,缩写为dB).这是一个无纲量的相对单位,计算公式如下: 分子是测量值的声压,分母是参考值的声压(20微帕,人类所能听到的最小声压).因 ...

  2. php读音量大小,Android_Android中实时获取音量分贝值详解,基础知识 度量声音强度,大 - phpStudy...

    Android中实时获取音量分贝值详解 基础知识 度量声音强度,大家最熟悉的单位就是分贝(decibel,缩写为dB).这是一个无纲量的相对单位,计算公式如下: 分子是测量值的声压,分母是参考值的声压 ...

  3. android 弹出fragment,Android中ViewPager获取当前显示的Fragment

    前言 在项目中,有时会用到在ViewPager中显示同样类型的Fragment,同时这样的Fragment的个数是动态的,但是PagerAdapter没有给我们提供getCurrentFragment ...

  4. python实时获取子进程输出_Python 从subprocess运行的子进程中实时获取输出的例子...

    有些时候,我们需要将某些程序放到子进程中去运行,以达到整合系统的目的.在Python中,一个非常好的选择就是使用subprocess模块,本模块为开辟子进程去执行子程序提供了统一的接口,更加便于学习和 ...

  5. VS中实时获取SVN的版本号并写入到AssemblyInfo.cs中(C#)

    原文: VS中实时获取SVN的版本号并写入到AssemblyInfo.cs中(C#) 在开发项目时,需要知道当前发布的到底是哪个版本,比较好的方式就是获取SVN的版本来作为项目的版本.项目版本一般由主 ...

  6. python获取子进程返回值_Python 从subprocess运行的子进程中实时获取输出的例子 Python如何抓取程序的输出?...

    关于python中用subprocess调用exe子进程的问题不懂我的人有什么资格对我指指点点,不了解我的人凭什么对我说三道四的. python杀死子进程后继续执行后面程序 程序a(python写成) ...

  7. 在Android中快速获取手机的高级权限

    在Android中快速获取手机的高级权限 想要快速获取Android手机的ROOT权限吗?也许因为ROOT教程太复杂,也许因为不会进工程模式,让我们在使用Android手机时感觉像是开别人的车一样,总 ...

  8. Android如何实时监控CPU频率

    之前做过一个项目,是移植MTK CPU超频(有兴趣的同学可以参考:原作者地址http://media.weibo.cn/article?id=2309403981343598977447&lo ...

  9. Android stdio 实时获取相机预览图像(详细)

    activity_main.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout ...

最新文章

  1. Redis持久化方法对比分析
  2. Linux LB 集群知识、如何用 LVS 方式实现 LB 集群?
  3. 小鱼易连电脑版_电脑?不,它是随时就绪的专业电话会议解决方案
  4. Zend Studio 打开时提示 Failed to create the Java Virtual Machine
  5. Python图像处理模块pillow子模块Image用法精要
  6. 从“卡脖子”到“主导”,国产数据库 40 年的演变!
  7. 【To Do】LeetCode 28. Implement strStr() 和KMP算法
  8. Openfire Meetings插件是一个包含各种Jitsi项目(如VideoBridge和Meet)的实现
  9. php 获取数组第一个元素的几种方法
  10. vue-calendar 基于 vue 2.0 开发的轻量,高性能日历组件
  11. Remoting技术
  12. win764位和32位有什么区别_win10系统32位和64位区别详解
  13. Hive读时模式和写时模式的区别是什么?
  14. PGSQL查询今天生日的员工
  15. 动漫学日语《白熊咖啡厅》(更新中)
  16. HDU 2608 0 or 1 简单数论
  17. 使用tkinter实现 loading 等待效果
  18. 索尼xz1c 日版融卡扩容经验分享(无需root,索尼XZP机型也适用)
  19. 让独居的父母,时刻受到保护,老人远程无线监护解决方案
  20. 老贾笔记--轻轻松松oracle之logmnr篇[吃顿饭的功夫学恢复误删除(delete)的数据]

热门文章

  1. Mac安装ruby环境及Xcode安装cocoapods整体流程--ios引用第三方库的环境准备
  2. 【接近直角三角形的三角形】CodeForce 18A ——Triangle
  3. November, 11
  4. 如何查看和删除电脑的各种使用历史记录
  5. 监控观测够有效,你就可以睡好觉
  6. 基于HTML CANVAS和EXCEL的XLSx文件的财务报表展示、打印
  7. 美团:没有存款在硅谷银行,后者破产事件对公司无影响;苹果 A17 处理器性能跑分曝光;Rust 1.68.0 发布|极客头条
  8. Lesson 25 Do the English speak English? 英国人讲的是英语吗?
  9. 【PHP+微信开发】之微信扫码登录
  10. Python实现天气查询源码