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

阿邹 等级 579 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-插件化探索(一)
前言 由于近期项目中要用到插件,所以特地去翻找资料学习了一番,现在在这里分享我所学到的东西给大家,有什么错误的希望能给我指出来,文章有点长,希望大家能认真读完。 近些年来,插件化可谓是特别的火热,就拿支付宝美团等软件来说,都是使用这个技术来支撑他们的产品。但是什么是插件化呢,插件化到底有什么好处呢? 插件化也就是运行的APP(宿主APP)去加载插件APP
js动态生成二维码
需求:项目需要根据链接实时生成二维码,当检测终端是PC时,将当前项目链接生成二维码供用户手机端使用 判断终端是否为mobile function isMobile () { let flag navigator.userAgent.match(/(phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile
Android深入浅出之Binder机制
Android深入浅出之Binder机制 一 说明 Android系统最常见也是初学者最难搞明白的就是Binder了,很多很多的Service就是通过Binder机制来和客户端通讯交互的。所以搞明白Binder的话,在很大程度上就能理解程序运行的流程。 我们这里将以MediaService的例子来分析Binder的使用: ServiceMan
移动端H5开发常用技巧总结
html 篇 常用的meta属性设置 meta对于移动端的一些特殊属性,可根据需要自行设置 <meta name"screenorientation" content"portrait" //Android 禁止屏幕旋转 <meta name"fullscreen" content"yes"             //全屏显示
Android动态加载基础 ClassLoader工作机制
类加载器ClassLoader 早期使用过Eclipse等Java编写的软件的同学可能比较熟悉,Eclipse可以加载许多第三方的插件(或者叫扩展),这就是动态加载。这些插件大多是一些Jar包,而使用插件其实就是动态加载Jar包里的Class进行工作。这其实非常好理解,Java代码都是写在Class里面的,程序运行在虚拟机上
Android开发 常见异常和解决办法(一)
Android Studio是Android开发的理想工具,但是由于版本的更新和配置的差异,会出现很多问题,下面是以《第一行代码 第二版》为基础进行开发学习可能遇见的一些问题及其解决办法。 1.Android Studio 3.0及以上版本找不到Android Device Monitor: 解决办法: (1)在Android Studio中打开终端,如下
Android 面试官精心整理:"五年面试经验
作者:面试官首先呢!做为一个面试官,这几年面过的中高级 Android 开发工程师已经突破了上百人,Failed 的不敢说,但是 Pass 掉的基本是没有看走眼的;眼看年后春招即将来袭,特此赶在年轻整理完毕,谈谈我对 Android 中高级面试的一些看法和体会。 如果,你有更好的看法,希望能在评论区留言,我们一起讨论。一般来说,大部分面试官在面
Django+Vue开发生鲜电商平台之4.Restful API和Vue介绍
也许今天你是最好的,但未必明天还最好;今天也许你是最差的,但社会给了你很多的机会,只要你把握,只要努力,总会有机会。 ——马云Github和Gitee代码同步更新:;。后端架构搭建好之后,需要搭建前端架构。 一、Restful API介绍 1.前后端分离优缺点近年来,随着多种平台类型(PC端、Android端、Mac端、iPhone端、P
Android 世界中,谁喊醒了 Zygote ?
Zygote 作为 Android 世界的受精卵,在成功繁殖出 system_server 进程之后并没有完全功成身退,仍然承担着受精卵的责任。Zygote 通过调用其持有的 ZygoteServer 对象的 runSelectLoop() 方法开始等待客户端的呼唤,有求必应。客户端的请求无非是创建应用进程,以 startActivit
深度解读ArrayMap优势与缺陷
ArrayMap在内存使用上较HashMap更有优势,在Android开发中广为使用的基础API,也是大家所推荐的方法, 但你是否想过Google如此重要的基础类存在缺陷?一、引言在移动设备端内存资源很珍贵,HashMap为实现快速查询带来了很大内存的浪费。为此,2013年5月20日Google工程师Dianne Hackborn在Android
Android-图片加载库Coil使用教程
框架介绍Coil是Android上的一个全新的图片加载框架,它的全名叫做coroutine image loader,即协程图片加载库。与传统的图片加载库Glide,Picasso或Fresco等相比。该具有轻量(只有大约1500个方法)、快、易于使用、更现代的API等优势。它支持GIF和SVG,并且可以执行四个默认转换:模糊,圆形裁剪,灰度和圆角。
Flutter 跨平台演进及架构开篇
版权声明: 本站所有博文内容均为原创,转载请务必注明作者与原文链接,且不得篡改原文内容。一、移动跨平台技术演进 1\. 引言移动互联网发展十余年,伴随着 Android、iOS 等智能手机的不断普及,移动端已逐步取代 PC 端,成为兵家必争之地。正所谓“得移动端者得天下”,移动端已成为互联网领域最大的流量分发入口,一
Android AOSP基础(一)VirtualBox 安装 Ubuntu
AOSP基础 Android框架层本文首发于微信公众号「刘望舒」 前言在Android进阶三部曲第二部《Android进阶解密》的第一章,我介绍了两种阅读源码的方式,其中一种是从百度网盘:https://pan.baidu.com/s/1ngsZs 将源码下载下来,然后用SouceInsight来查看,这种方式很便捷,适合去阅读源码,但是有两个弊端,一个是无
阿里P8成长路线!手持4个大厂offer的我
前言:Android 应用开发发展到今天,已经成为一个非常成熟的技术方向,从目前的形势来看,Android开发相当火热,但是高级Android开发人才却比较少,现在移动互联网的开发者也逐步开始关注插件化技术、性能优化、行业新技术,系统架构等进阶技术。这也同时造成了一种现像,安卓开发人员感受到行业现在已经是冰火两重天的环境了,技术不全面,还停留在中低端技术水平
阿里官方推荐:有了这些中高端面试专题-大厂还会远吗
大佬带你走进Android开发的世界,掌握了这些知识点,学习Android也可以很轻松。 核心分析内容对于怎么学习Android,主要解决的是3个问题:学什么、怎么学 & 怎么用。具体如下:下面,我将带着上述几个问题,详细讲解自身学习Android的方法和Android学习路径;最后,还会结合前面内容,给出综合的具体执行学习Android的建议。 面经分享