请点击上面图片跳转播放。
Nier Visualizer 是一款纯 Kotlin 编写的轻量高效的 Android 可视化库,采用独立渲染线程,兼容绝大部分设备。适用于音频可视化的应用场景,如音乐播放器、录音应用、动态壁纸等。
目前已经有6种独立的可视化效果,更多效果开发中,欢迎
start
关注。
ColumnarType1Renderer | ColumnarType2Renderer | ColumnarType3Renderer |
ColumnarType4Renderer(FFT) | LineRenderer | CircleBarRenderer |
CircleRenderer | 复合效果 1 | 复合效果 2 |
Star 本项目跟踪后续更新 | ||
复合效果 3 | 即将到来 |
- 在项目根目录的 build.gradle 的 repositories 末尾加上该仓库:
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}
- 添加下列依赖:
dependencies {
compile 'com.github.bogerchan:Nier-Visualizer:v0.1.3'
}
注意:由于 Visualizer 记录声音波形需要权限
android.permission.RECORD_AUDIO
,请务必在项目中声明它。
项目的 demo
模块可供接入参考。
val visualizerManager = NierVisualizerManager()
// 传入 audioSession, 0 为 output mix, AudioRecord 使用请参考 3.3.7
val state = visualizerManager.init(0)
if (NierVisualizerManager.SUCCESS != state) {
// 可以进行一些错误处理...
}
visualizerManager.release()
visualizerManager.start(surfaceView, arrayOf(ColumnarType1Renderer()))
visualizerManager.stop()
visualizerManager.pause()
visualizerManager.resume()
val visualizerManager = NierVisualizerManager()
visualizerManager.init(object : NierVisualizerManager.NVDataSource {
// 略过无关代码...
/**
* 告诉 NierVisualzier 采样的时间间隔, 即间隔多久获取一次数据
* @return 采样数据间隔值,以毫秒为单位
*/
override fun getDataSamplingInterval() = 0L
/**
* 告诉 NierVisualzier 返回字节数据的大小
* @return fft 和 wave 将返回的数组长度, fft 和 wave 两者数组长度必须保持一致
*/
override fun getDataLength() = mBuffer.size
/**
* 提供 NierVisualzier 渲染所需要的 fft 数据
* @return fft 数据, 返回 null 则表示不进行 fft 相关数据渲染
*/
override fun fetchFftData(): ByteArray? {
return null
}
/**
* 提供 NierVisualzier 渲染所需要的 wave 数据
* @return wave 数据, 返回 null 则表示不进行 wave 相关数据渲染
*/
override fun fetchWaveData(): ByteArray? {
// 略过无关代码...
return mBuffer
}
})
NierVisualizerManager visualizerManager = new NierVisualizerManager();
// 传入 audioSession, 0 为 output mix, AudioRecord 使用请参考 3.4.7
final int state = visualizerManager.init(0);
if (NierVisualizerManager.SUCCESS != state) {
// 可以进行一些错误处理...
}
visualizerManager.release();
visualizerManager.start(surfaceView, new IRenderer[]{new LineRenderer(true)});
visualizerManager.stop();
visualizerManager.pause();
visualizerManager.resume();
NierVisualizerManager visualizerManager = new NierVisualizerManager();
visualizerManager.init(new NierVisualizerManager.NVDataSource() {
// 略过无关代码...
/**
* 告诉 NierVisualzier 采样的时间间隔, 即间隔多久获取一次数据
* @return 采样数据间隔值,以毫秒为单位
*/
@Override
public long getDataSamplingInterval() {
return 0L;
}
/**
* 告诉 NierVisualzier 返回字节数据的大小
* @return fft 和 wave 将返回的数组长度, fft 和 wave 两者数组长度必须保持一致
*/
@Override
public int getDataLength() {
return mBuffer.length;
}
/**
* 提供 NierVisualzier 渲染所需要的 fft 数据
* @return fft 数据, 返回 null 则表示不进行 fft 相关数据渲染
*/
@Nullable
@Override
public byte[] fetchFftData() {
return null;
}
/**
* 提供 NierVisualzier 渲染所需要的 wave 数据
* @return wave 数据, 返回 null 则表示不进行 wave 相关数据渲染
*/
@Nullable
@Override
public byte[] fetchWaveData() {
// skip some code...
return mBuffer;
}
});
- 类似 Siri 的可视化效果,构思中...
- 为 DJ 音乐定制的可视化效果库
- 如果你有兴趣,欢迎 Fork 一起搞
部分效果参考 android-visualizer,感谢 felixpalmer
!
Copyright 2018 Boger Chan
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.