Horizon-开源音频可视化库介绍

泡在网上的日子 / 文 发表于2016-04-06 09:26 次阅读 音频

英文原文:Introducing Horizon, Our Own Open Source Library for Sound Visualization 

Yalantis最近发布了几个具有音频录制功能的app。Halaa 就是我们音频技术的最新例子。每次我们想添加音频效果的时候,我们都需要处理许多问题。

首先,对于音频文件的分析,目前没有简单而又方便的安卓库。我们承认有一些比较优秀的声音处理库,比如TarsosDSP,Sound Powered, ffmpeg等等。但是它们都太庞大而又复杂,尤其是对那些对音频理论一窍不通的人。

其次,为了动画流畅,音频必须被快速的分析和渲染。虽然已经有了可以快速渲染的开源解决方案,但是这些解决方案都只针对音频动画的某几个方面的问题,而不是全部。

在我们的研究期间,有三个解决方案吸引了我们的注意。虽然这些方案不是我们理想中的分析和可视化方案,但是它们为我们展示了那些可以进行改进的地方。

为什么这三个库没有为音频可视化提供很好的解决办法?

1.  CRAudioVisualizationView

提供了比较美观的动画,CRAudioVisualizationView是我们发现的最佳开源可视化工具。它产生平滑的声音波浪效果。这个方案采用OpenGL来实现,因此没有性能fang面的问题。但是这个库的缺点是它是基于Android原生Visualiser(频谱器)。这意味着你不能把动画和麦克风实时输入联系起来。换句话说,无法在录制声音的时候使用这个library。

2. AudioVisualizer

AudioVisualizer library提供了多种视觉效果,但是它和CRAudioVisualizationView有相同的缺点。此外,它所有的效果都有点过时了,让你觉得是在用着一个Windows Media Player。

3. VisualAudio

最后有人提供了他们自己的音频分析!但是在视觉效果方面又过于基础,只显示声音的频谱。这个库看起来就是一个为从事傅立叶变换工作的人准备的教程。

Horizon: a Library That Visualizes Sound Quickly and Beautifully

我们决定为我们的音频项目创建自己的音频Visualizer(频谱器) 。于普遍看法不同的是,Horizon证明了其实安卓在音频方面也很在行。

对于Horizon库,我们又两个主要的目标:

1) 出色的性能

2) 出色的图像

content_eqwaves.gif

性能

对于一个安卓app来说,并没有多少可以显著提高性能的方法。我们要应对的第一个问题就是计算。要分析声音频谱并显示在View上,你需要做许多数学计算,并且要做的迅速。

绝大多数声音分析都是用c++实现的。这种语言减少了获取声音频谱所需要的时间。虽然绝大多数分析代码都是用c++写的,但是为了让我们的控件更易自定义,在我们还是用了java做少量计算。

绘制

Horizon的设计让人联想到海上日出的情景。这也是我们把library命名为Horizon(地平线)的原因(还有个原因是我们喜欢Bring Me the Horizon乐队)。你可以在 Dribbble 和 Github上查看Horizon。

我们控件的颜色和形状必须清新夺目,这就是为什么我们需要实现恰当的blending。同时,为了尽可能快的绘制所有曲线,我们使用OpenGL来实现绘制,以达到流畅的用户体验。

Horizon是一个显示特定音频数据频谱信息的漂亮组建。

 你可以从这个视频中看到Horizon的实际表现:

注:视频请翻q。

我们想感谢我们的iOS工程师同时也是 Zagreb music乐队成员的Zagreb和 Igor Muzyka,是他们演奏了一些音乐来测试Horizon。

如何在你的项目中添加Horizon?

三个步骤

1.添加依赖

compile 'com.yalantis:eqwaves:1.0'

2.初始化Horizon对象

mHorizon = new Horizon(glSurfaceView, getResources().getColor(R.color.background),
                RECORDER_SAMPLE_RATE, RECORDER_CHANNELS, RECORDER_ENCODING_BIT);

3.调用updateView方法来更新Horizon

byte[] buffer = new byte[bufferSize];
//here we put some sound data to the buffer
mHorizon.updateView(buffer);


在下面三个地方查看Horizon sound visualizer:



收藏 赞 (1) 踩 (0)
上一篇:Android 编码规范
该文档参考了 Google Java 编程风格规范和 Google 官方 Android 编码风格规范。该文档仅供参考,只要形成一个统一的风格,见量知其意就可。
下一篇:FloatingActionButton滚动时的显示与隐藏小结
FloatingActionButton的显示和隐藏其实很容易谷歌到,之所以写这篇文章是感觉这个知识点有点让人困惑,可以找到多种实现方式,而且兼容包里的FloatingActionButton还不断的变化。 基本来说,如果是使用官方的FloatingActionButton,列表滚动时的显示与隐藏都