添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

最近项目中需要实时获取播放音频的频率,并绘制波形图,用到了Visualizer这个类,记录下其使用方法:

Visualizer.OnDataCaptureListener有两个回调方法,分别是onFftDataCapture和onWaveFormDataCapture,onFftDataCapture返回的是经过傅里叶变换处理后的音频数据,onWaveFormDataCapture返回的是声音的波形数据。

计算声音分贝部分代码:

val readyData = readyData(fft)
val interval = readyData.size / (lineCount * 2)
for (i in readyData.indices step interval) {
    val magnitude = readyData[i] * readyData[i] + readyData[i + 1] * readyData[i + 1] * 1.0
    val dbValue = (10 * log10(magnitude)).toLong().coerceAtLeast(0) // 声音大小
private fun readyData(fft: ByteArray): ByteArray {
    val newData = ByteArray(256) // 取一半
    for (i in 0 until fft.size.coerceAtMost(256)) {
        newData[i] = abs(fft[i].toInt()).toByte()
    return newData

Visualizer的使用:

class VisualizerHelper {
    private var visualizer: Visualizer? = null
    private var mediaPlayer: MediaPlayer? = null
     * 播放音乐
    fun playMusic(
        path: String,
        onCompletionListener: MediaPlayer.OnCompletionListener,
        onDataCaptureListener: Visualizer.OnDataCaptureListener
        mediaPlayer = MediaPlayer().apply {
            setDataSource(path)
            setOnCompletionListener {
                onCompletionListener.onCompletion(it)
                release()
                releaseVisualizer()
                mediaPlayer = null
        mediaPlayer?.prepare()
        mediaPlayer?.start()
        initVisualizer(onDataCaptureListener)
     * 停止播放
    fun stopMusic() {
        mediaPlayer?.run {
            stop()
            release()
        mediaPlayer = null
        releaseVisualizer()
     * 获取当前播放进度
    fun getCurrentPosition(): Long {
        return (mediaPlayer?.currentPosition ?: 0) / 1000L
    private fun initVisualizer(
        dataCaptureListener: Visualizer.OnDataCaptureListener
        if (visualizer != null) {
            visualizer?.enabled = true
            return
        visualizer = Visualizer(mediaPlayer?.audioSessionId ?: 0)
        visualizer?.run {
            captureSize = Visualizer.getCaptureSizeRange()[1] // 设置可视化数据的数据大小
            setDataCaptureListener(
                dataCaptureListener,
                Visualizer.getMaxCaptureRate() / 2, // 采集频率
                false,
            enabled = true
    private fun releaseVisualizer() {
        visualizer?.run {
            enabled = false
            release()
        visualizer = null
                    最近项目中需要实时获取播放音频的频率,并绘制波形图,用到了Visualizer这个类,记录下其使用方法:Visualizer.OnDataCaptureListener有两个回调方法,分别是onFftDataCapture和onWaveFormDataCapture,onFftDataCapture返回的是经过傅里叶变换处理后的音频数据,onWaveFormDataCapture返回的是声音的波形数据。计算声音分贝部分代码:val readyData = readyData(fft)val inte
				
Android Visualizer 一个View子类,它从Android MediaPlayer接收输入并显示可视化效果,例如iTunes或WinAmp Visualizer设计为模块化的,因此很容易组合可视化以创建更复杂的效果。 创建自己的自定义可视化或合并/编辑现有可视化很容易。 以下是一些示例: 一对频率分布。 这是一个使用FFT数据而不是原始音频波形的示例 在屏幕上绘制音频波形,以突出的节奏跳动 将音频波形画成一个圆圈,半径随时间变化 组合可视化 以上所有的组合 根据发行。
安卓可视化工具 一个 View 子类,它从 Android MediaPlayer 获取输入并显示可视化,如在 iTunes 或 WinAmp 中 Visualizer 设计为模块化,因此很容易组合可视化以创建更复杂的效果。 创建您自己的自定义可视化或组合/编辑现有可视化很容易。 下面是几个例子: 一对频率分布。 这是一个使用 FFT 数据而不是原始音频波形的示例 线条可视化 在屏幕上绘制音频波形,以突出的节拍脉动 圆形可视化 以圆形绘制音频波形,半径随时间变化 组合可视化 以上所有的组合 Library is available in jcenter repository How to use Refer to the sample project on how to use visualizer or refer to WIKI docs. Visualizers LineVisualizer BarVisualizer CircleVisualizer Circle Bar Visualizer Line Bar Visualizer License Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
Android 实时获取播放音乐的频率 Visualizer用法 笔者正在做的项目有播放声音并实时获取声音音频的需求,在网上搜了许久,都找不到一个满意的答案。于是自己去翻了谷歌文档和请教自己固件的同事,整理出来一套供大家参考 Visualizer 的用法 //声明MediaPlayer mMediaPlayer = new MediaPlayer(); //声明Visualizer
Android Visualizer 一个View子类,它从Android MediaPlayer接收输入并显示可视化效果,例如iTunes或WinAmp Visualizer设计为模块化的,因此很容易组合可视化以创建更复杂的效果。 创建自己的自定义可视化或合并/编辑现有可视化很容易。 以下是一些示例: 一对频率分布。 这是一个使用FFT数据而不是原始音频波形的示例 在屏幕上绘制音频波形,以突出的节奏跳动 将音频波形画成一个圆圈,半径随时间变化 组合可视化 以上所有的组合 根据发行。
该应用程序将使用您的设备麦克风来获取所听到的声音,以数字方式对音频进行采样,并以多种频率呈现有趣的音频信号视觉表示。 说明在页面加载时,它会询问您是否允许使用设备的麦克风...。单击“是”! 您可以停留在主页上并使用默认的Visualizer,或者注册并登录以获取更多选项。 登录/注册后: 点击“选择视觉”下拉菜单 选择新的展示台 最后单击“可视化”以显示新的视觉效果 使用的技术 HTML,CSS,Skeleton,SVG,Javascript,D3,Ruby(Some Rails技术),Sinatra和Postgresql。 输入音频URL,以通过应用程序播放歌曲。 正弦波发生器 更多展示台!!
Google Cardboard Audio Visualizer 使用 Google 的 Cardboard SDK 在 Unity 中进行的非常基本的 VR 演示。 该项目接受输入音频文件(最好是 48kHz 立体声 MP3)并根据频率幅度的实时音频分析显示音乐的 3D 可视化。 连接 Android 设备后,从终端运行adb devices以验证您的设备是否已连接调试模式 运行adb install -r SingleStadium.apk来安装和运行基本的纸板场景。 您还可以运行adb install -r MultiStadium.apk来查看摄像机周围有 4 个音乐可视化器的场景。 ###从源代码构建 在 Unity 中打开 MultiStadium 或 SingleStadium 场景 按 Ctrl+P (⌘ + P) 在编辑器中播放。 Alt 处理俯仰和偏航,
Xamarin.Forms学习之路——AudioVisualizer踩坑提示关键实现Android.AudioVisualizerImplementation.csEMAudioVisualizer_IAudioVisualizer.cs细节实现Android.MainActivity.cs最重要的细节调用 由于项目需要,最近在搞音乐可视化的内容,既然安卓有AudioVisualizer,就不需...
SuperCoderLei: recover()方法的注释有点小错误OkHttpClient的内部类Builder,默认构造方法中retryOnConnectionFailure默认值应该是true [/code][code=java] public Builder() { dispatcher = new Dispatcher(); protocols = DEFAULT_PROTOCOLS; connectionSpecs = DEFAULT_CONNECTION_SPECS; eventListenerFactory = EventListener.factory(EventListener.NONE); proxySelector = ProxySelector.getDefault(); cookieJar = CookieJar.NO_COOKIES; socketFactory = SocketFactory.getDefault(); hostnameVerifier = OkHostnameVerifier.INSTANCE; certificatePinner = CertificatePinner.DEFAULT; proxyAuthenticator = Authenticator.NONE; authenticator = Authenticator.NONE; connectionPool = new ConnectionPool(); dns = Dns.SYSTEM; followSslRedirects = true; followRedirects = true; retryOnConnectionFailure = true; connectTimeout = 10_000; readTimeout = 10_000; writeTimeout = 10_000; pingInterval = 0; [/code]