许多音乐App上常见的音频可视化效果,读取音频数据并利用傅里叶转换成可视化的字节数据,再通过自定义View渲染而成.
组件源码目录:https://github.com/GitHubZJY/AudioVisualizeView/tree/master/audiovisualize
demo目录:https://github.com/GitHubZJY/AudioVisualizeView/tree/master/app
- 支持自定义可视化颜色
- 支持本地路径、url、raw的音频路径读取,或自定义外部MediaPlayer传入音频数据渲染
- 支持自定义频谱展示数目
- 支持多种可视化展示形式,包括圆形、水平、波浪、网状、粒子等
- 支持AndroidX
在项目根目录的build.gradle添加:
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}
在项目的build.gradle添加如下依赖:
implementation 'com.github.GitHubZJY:AudioVisualizeView:v1.0.0'
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
由于需要读取音频数据和音频文件,需要先动态申请所需的权限,例:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
int checkCallPhonePermission = ContextCompat.checkSelfPermission(activity, Manifest.permission.RECORD_AUDIO);
if (checkCallPhonePermission != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(activity, new String[]{permission}, requestCode);
}
}
详情可参考本项目demo
<com.zjy.audiovisualize.view.SingleVisualizeView
android:id="@+id/audio_visualize_view"
app:visualize_ratio="2"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
public class SingleVisualizeActivity extends AppCompatActivity {
private AudioVisualizeView vAudioVisualize;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_single_visualize);
vAudioVisualize = findViewById(R.id.audio_visualize_view);
vAudioVisualize.doPlay(R.raw.sound);
}
@Override
protected void onDestroy() {
super.onDestroy();
if (vAudioVisualize != null) {
vAudioVisualize.release();
}
}
}
在需要播放的位置,调用 doPlay
方法,并传入对应的音频资源id或者音频文件路径,即可开始播放。
在页面销毁时记得调用release释放对应的音频资源,避免内存泄漏。
一个在奋斗路上的Android小生
欢迎关注简书: https://www.jianshu.com/u/4cb2688ddf31