android频谱实现(离散傅立叶)

阿邹 等级 968 0 0

利用离散傅立叶打造一个频谱app 先来look一下效果: 视频播放地址

来看一下离散傅立叶算法 这是我的,当然每个人的实现方式会一定偏差,主要是要依据傅立叶变化来。

                    int N = 16;
                    double PI = 3.1415926;
                    float[] real = new float[N];
                    float[] imag = new float[N];
                    for (int k = 0; k < N; k++) {
                        for (int n = 0; n < N; n++) {
                            real[k] = (float) (real[k] + buffer[n] * Math.cos(2 * PI * k * n / N));
                            imag[k] = (float) (imag[k] - buffer[n] * Math.sin(2 * PI * k * n / N));
                        }
                    }
                    float[] result = new float[real.length];
                    for (int i = 0; i < real.length; i++) {
                        result[i] = (float) Math.sqrt(real[i] * real[i] + imag[i] * imag[i]);
                    }

下面来介绍一下fft(快速傅立叶变化) DFT(DiscreteFourier Transform) 离散傅里叶变换 FFT(快速傅里叶变换)其本质就是DFT DFT(FFT)的作用:可以将信号从时域变换到频域,而且时域和频域都是离散的,通俗的说,可以求出一个信号由哪些正弦波叠加而成,求出的结果就是这些正弦波的幅度和相位,音乐播放器上面显示的就是音乐fft之后不同频率正弦波的幅度(所以你能看到不听的上下抖动). 那么为什么可以求出正弦波的幅度呢,我们也可以利用信号的相关性检测信号波中是否含有某个频率的信号波:把一个待检测信号波乘以另一个信号波,再把这个新的信号波所有的点进行相加,从相加的结果就可以判断出这两个信号的相似程度. 差不多了,理论我们就了解下。直接来应用。 DFT的公式: android频谱实现(离散傅立叶)

android 音乐频谱APP实现: 第一种实现思路:我们利用AudioRecord去录音,然后读取,然后把读取出来的数组dft运算,得到我们最后需要个result结果,最后把result结果写一个自定义控件就可以。 第二种实现思路:我们利用AudioRecord+audioTrack+Visualizer的方式去实现整个从录音到dft运算到过程。AudioRecord负责获取外部声音,audioTrack负责将录制到声音播放,Visualizer负责进行dft运算。Visualizer是google提供到微型可视化音乐工具。你不需要去考虑如何实现dft算法。

当然具体使用哪种方法你需要自己选择。前者的可控性更强一些。作者俩种都帮你试过了,最后dft以后得到都数据展示都效果都是相似可以接受的。 audioTrack针对这个需要声明的是如果你的app需要实现语音通话则必须先考虑一下这个组件,这组件的功能都是为了边录边播放。

收藏
评论区

相关推荐

Android开发 常见异常和解决办法(一)
Android Studio是Android开发的理想工具,但是由于版本的更新和配置的差异,会出现很多问题,下面是以《第一行代码 第二版》为基础进行开发学习可能遇见的一些问题及其解决办法。 1.Android Studio 3.0及以上版本找不到Android Device Monitor: 解决办法: (1)在Android Studio中打开终端,如下
Java后端部署以及与Android通信注意事项
1 概述 ==== 本文列举了一些`Android`+后端`Java`通信/部署时的问题以及注意事项,覆盖的问题包括但不限于安全组、数据库、路径等,如果各位读者的`Android`端不能正常访问`Java`后端,希望这里的解决方案能帮助到您。 2 分类 ==== 这里将问题分为三类: * `Java`端问题 * `Android`端问题 *
java版本springcloud+springboot+mybatis 分布式 微服务 多租户 电子商务 直播带货 短视频带货 社交电商平台
涉及平台:平台管理(包含自营店面)、商家端(PC端、手机端)、买家平台(PC端、H5/公众号、小程序、APP端(IOS/Android)、微服务平台(业务服务) 核心架构:Spring Cloud、Spring Boot、Mybatis、Redis、SFTP 前端框架:VUE、Uniapp、Bootstrap/H5/CSS3、IOS、Android、小程
java编程中使用二进制进行权限或状态控制
直接看代码以及注释吧。 @Test public void main() { // PC WEB端 int pc = 1 << 0;// ...0001=1 // Android端 int android = 1 <<
2020年了,Android后台保活还有戏吗?看我如何优雅的实现!
1、引言 ======= 对于移动端IM应用和消息推送应用的开发者来说,Android后台保活这件事是再熟悉不过了。 自从Android P(即Android 8.0)出现以后,Android已经从系统层面将后台保活这条路给堵死了(详见:《[Android P正式版即将到来:后台应用保活、消息推送的真正噩梦](https://www.oschina
2020年了,Android后台保活还有戏吗?看我如何优雅的实现!
1、引言 ======= 对于移动端IM应用和消息推送应用的开发者来说,Android后台保活这件事是再熟悉不过了。 自从Android P(即Android 8.0)出现以后,Android已经从系统层面将后台保活这条路给堵死了(详见:《[Android P正式版即将到来:后台应用保活、消息推送的真正噩梦](https://www.oschina
Andriod SDK Manager国内无法更新的解决方案
由于GWF,使用android sdk manager无法更新了,另外android源码也下载不了,幸而国内有很多开源镜像,可以帮助我们解决这些问题 1\. 如何更新Android SDK Manager 设置代理host为mirrors.neusoft.edu.cn,端口为80,即可正常同步 ![](http://static.oschina.net
Android SDK在线更新镜像服务器
#### Android SDK在线更新镜像服务器 1. 中国科学院开源协会镜像站地址: * IPV4/IPV6: http://mirrors.opencas.cn 端口:80 * IPV4/IPV6: http://mirrors.opencas.org 端口:80 *
Android Socket 通信
Android socket 通信 ================= 安卓编写Socket客户端,实现连接Socket服务端通信。 创建Socket连接并获取服务端数据 ------------------ 先创建几个全局变量吧 private BufferedWriter writer = null; Socket socket;
Android+Java Web+MySQL实现登录注册
1 前言&概述 ======= 这篇文章是基于[此处文章](https://my.oschina.net/u/4231975/blog/3117865)的更新,更新了一些技术栈,更加贴近实际需要,以及修复了若干的错误。 这是一个前端`Android`+后端`Java/Kotlin`通过`Servelt`进行后台数据库(`MySQL`)交互的详细步骤以及源
Android+Spring Boot 选择+上传+下载文件
2021.02.03更新 ============ 1 概述 ==== 前端`Android`,上传与下载文件,使用`OkHttp`处理请求,后端使用`Spring Boot`,处理`Android`发送来的上传与下载请求。这个其实不难,就是特别多奇奇怪怪的坑,因此,就一句话, 希望各位读者能少走弯路。 2 环境 ==== * `Win10` *
Android学习系列笔记(五)
##Android基础网络第二天 1 post方式提交数据乱码的解决 ================= 一般在公司开发客户端和服务端的编码要保持一致。 android端的默认编码是utf-8; 做url请求时需要对参数进行URLEncode编码. URL url = new URL("http://1
Android端Charles抓包
#### 目录介绍 * 01.下载安装 * 02.抓包代理设置 * 03.抓包Https操作 * 04.抓包原理介绍 * 05.抓包数据介绍 * 06.常见问题总结 * 07.Android拦截抓包 ### 01.下载安装 * 下载地址(下载对应的平台软件即可) * [https://www.charlesp
Android音乐播放器开发(6)—歌曲播放列表
1\. 说明 ------ 本文很早就开始写了,不过中间把电脑借给小伙伴了,后来就忘了这件事了… 内容已同步到[Gitee仓库](https://gitee.com/Sjcun/android-MusicPlayer) 以往的文章 * 服务端:[Android音乐播放器开发–服务端](https://www.oschina.net/action/
Kotlin Hello World
1 Kotlin ======== Kotlin是一种在JVM上运行的静态类型编程语言,被称为Android界的Wsift,由JetBrains设计。Kotline可以编译成Java字节码,也可以编译成JavaScript,方便在没有JVM的设备上运行。Google宣布在Google I/O 2017上宣布Kotlin成为Android官方语言。 笔者不