Android:音乐特效控制

音乐特效控制

标签(空格分隔): android
作者:陈小默
水平有限,如果错误恳请批评指正


Android提供了用于音乐播放时的音效控制器,比如均衡器、重低音以及显示音乐波形等。这些功能被定义在AudioEffect的子类中完成1

  • AcousticEchoCanceler:回声消除器
  • AutomaticGainControl:自动增强控制器
  • NoiseSuppressor:噪音抑制器
  • BassBoost:重低音调节器
  • Equalizer:均衡器
  • PresetReverb:预设音场控制器
  • Visualizer:示波器

Demo下载地址Android:音乐特效控制demo 注意:Demo中如果跟该博客有冲突,以博客为准。在正文开始之前,我先说一声,我的音频文件(jay_qingtian.mp3)放在了手机的Music文件夹下。下面所有播放按钮的实现都是下面的样子,所以在下面各小节中我就省略不写播放的实现了

val music = "${Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MUSIC).absolutePath}/jay_qingtian.mp3"
private val mp = MediaPlayer()
...
XXX.setOnClickListener { v ->
    v.isEnabled = false
    mp.setDataSource(music)
    mp.prepare()
    mp.start()
}

Demo首页截图


一、AcousticEchoCanceler:回声消除器

回声消除器的用法相当简单,只要调用它的静态方法创建相应的实例即可调用。但是需要注意的是:不是所有的手机都支持这个功能,所以我们在使用之前应该提前调用isAvailabel()方法判断是否可用。
回声消除界面

    //初始化媒体播放器和回声消除器
    private val mp = MediaPlayer()
    private val canceler = AcousticEchoCanceler.create(mp.audioSessionId)
    ...
    //在回声控制按钮的点击事件中判断可用状态
    aecFunction.setOnClickListener { v ->
        if (AcousticEchoCanceler.isAvailable()) {
            canceler.enabled = !canceler.enabled
        } else {
            Toast.makeText(this, "您的手机不支持回声控制", Toast.LENGTH_SHORT).show()
        }
    }

对了,很重要的一点是在退出Activity的时候关闭媒体播放器

    override fun onDestroy() {
        if (mp.isPlaying) {
            mp.stop()
        }
        canceler?.release()
        super.onDestroy()
    }

二、AutomaticGainControl:自动增强控制器

自动增强控制器页面截图
这个控制器同样基于系统实现,不同的手机可能支持情况也不相同。使用时仍然是三步走:
1,初始化播放器可控制器

    private val mp = MediaPlayer()
    private val control = AutomaticGainControl.create(mp.audioSessionId)

2,点击自动增强时判断状态

agcFunction.setOnClickListener {
    if (AutomaticGainControl.isAvailable()) {
        control.enabled = !control.enabled
    } else {
        Toast.makeText(this, "您的手机不支持自动增强", Toast.LENGTH_SHORT).show()
    }
}

3,离开时关闭(同上)


三、NoiseSuppressor:噪音抑制器

噪音抑制器页面
噪音抑制器的用法与前两个别无二致。主要用法同上

    private val mp = MediaPlayer()
    private var suppressor = NoiseSuppressor.create(mp.audioSessionId)
    ...
    nsFunction.setOnClickListener {
        if (NoiseSuppressor.isAvailable()) {
            suppressor.enabled = !suppressor.enabled
        } else {
            Toast.makeText(this, "您的手机不支持噪音消除", Toast.LENGTH_SHORT).show()
        }
    }

四、BassBoost:重低音调节器

重低音调节器界面
Android中给重低音调节器设置了1000个级别,也就是当我们的seekBar的最大值就是1000。接下来我们看一看重低音调节器的用法
1,初始化

    private val mp = MediaPlayer()
    private val mBass = BassBoost(0, mp.audioSessionId)

其第一个参数代表该音效控制器的优先级,这里设置为0,第二个参数仍然是MediaPlayer的id。
2,给SeekBar设置监听使之能够控制重低音调节器。

        bbSeekBar.max = 1000
  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值