Feature: add AudioEffect of Visualizer

pull/209/head
xufuji456 3 years ago
parent d9db302e5a
commit c139d9fa4e
  1. 29
      AndroidMedia/src/main/java/com/frank/androidmedia/controller/AudioEffectController.kt
  2. 2
      AndroidMedia/src/main/java/com/frank/androidmedia/listener/AudioEffectCallback.kt
  3. 2
      AndroidMedia/src/main/java/com/frank/androidmedia/wrap/AudioVisualizer.java
  4. 29
      app/src/main/java/com/frank/ffmpeg/activity/AudioEffectActivity.kt
  5. 22
      app/src/main/java/com/frank/ffmpeg/view/VisualizerView.kt

@ -2,10 +2,7 @@ package com.frank.androidmedia.controller
import android.R import android.R
import android.content.Context import android.content.Context
import android.media.audiofx.BassBoost import android.media.audiofx.*
import android.media.audiofx.Equalizer
import android.media.audiofx.LoudnessEnhancer
import android.media.audiofx.PresetReverb
import android.os.Build import android.os.Build
import android.util.Log import android.util.Log
import android.util.Pair import android.util.Pair
@ -16,10 +13,11 @@ import android.widget.SeekBar
import android.widget.Spinner import android.widget.Spinner
import androidx.annotation.RequiresApi import androidx.annotation.RequiresApi
import com.frank.androidmedia.listener.AudioEffectCallback import com.frank.androidmedia.listener.AudioEffectCallback
import com.frank.androidmedia.wrap.AudioVisualizer
import java.util.ArrayList import java.util.ArrayList
/** /**
* AudioEffect: EqualizerPresetReverb * AudioEffect: EqualizerPresetReverbBassBoostVisualizerLoudnessEnhancer
* *
* @author frank * @author frank
* @date 2022/3/23 * @date 2022/3/23
@ -36,6 +34,7 @@ open class AudioEffectController(audioEffectCallback: AudioEffectCallback) {
private var mBass: BassBoost? = null private var mBass: BassBoost? = null
private var mPresetReverb: PresetReverb? = null private var mPresetReverb: PresetReverb? = null
private var mVisualizer: AudioVisualizer? = null
private var mLoudnessEnhancer: LoudnessEnhancer? = null private var mLoudnessEnhancer: LoudnessEnhancer? = null
private var mAudioEffectCallback: AudioEffectCallback? = null private var mAudioEffectCallback: AudioEffectCallback? = null
@ -121,7 +120,7 @@ open class AudioEffectController(audioEffectCallback: AudioEffectCallback) {
} }
/** /**
* Setup AudioEffect of LoudnessEnhancer, which use * Setup AudioEffect of LoudnessEnhancer, which uses to enhance loudness
*/ */
@RequiresApi(Build.VERSION_CODES.KITKAT) @RequiresApi(Build.VERSION_CODES.KITKAT)
fun setLoudnessEnhancer(audioSessionId: Int, barEnhancer: SeekBar) { fun setLoudnessEnhancer(audioSessionId: Int, barEnhancer: SeekBar) {
@ -145,6 +144,23 @@ open class AudioEffectController(audioEffectCallback: AudioEffectCallback) {
}) })
} }
/**
* Setup AudioEffect of Visualizer, which uses to show the spectrum of audio
*/
fun setupVisualizer(audioSessionId: Int) {
mVisualizer = AudioVisualizer()
mVisualizer?.initVisualizer(audioSessionId, false, true, object : Visualizer.OnDataCaptureListener {
override fun onFftDataCapture(visualizer: Visualizer?, fft: ByteArray?, samplingRate: Int) {
if (fft != null) {
mAudioEffectCallback?.onFFTDataCallback(fft)
}
}
override fun onWaveFormDataCapture(visualizer: Visualizer?, waveform: ByteArray?, samplingRate: Int) {
}
})
}
fun onEqualizerProgress(index: Int, progress: Int) { fun onEqualizerProgress(index: Int, progress: Int) {
mEqualizer!!.setBandLevel(index.toShort(), (progress + minEQLevel).toShort()) mEqualizer!!.setBandLevel(index.toShort(), (progress + minEQLevel).toShort())
} }
@ -154,6 +170,7 @@ open class AudioEffectController(audioEffectCallback: AudioEffectCallback) {
mEqualizer?.release() mEqualizer?.release()
mPresetReverb?.release() mPresetReverb?.release()
mLoudnessEnhancer?.release() mLoudnessEnhancer?.release()
mVisualizer?.releaseVisualizer()
} }

@ -16,4 +16,6 @@ interface AudioEffectCallback {
fun setEqualizerList(maxProgress: Int, equalizerList: ArrayList<Pair<*, *>>) fun setEqualizerList(maxProgress: Int, equalizerList: ArrayList<Pair<*, *>>)
fun onFFTDataCallback(fft: ByteArray?)
} }

@ -1,4 +1,4 @@
package com.frank.ffmpeg.format; package com.frank.androidmedia.wrap;
import android.media.audiofx.Visualizer; import android.media.audiofx.Visualizer;
import android.util.Log; import android.util.Log;

@ -16,7 +16,6 @@ import com.frank.androidmedia.controller.AudioEffectController
import com.frank.androidmedia.listener.AudioEffectCallback import com.frank.androidmedia.listener.AudioEffectCallback
import com.frank.ffmpeg.R import com.frank.ffmpeg.R
import com.frank.ffmpeg.adapter.EqualizerAdapter import com.frank.ffmpeg.adapter.EqualizerAdapter
import com.frank.ffmpeg.format.AudioVisualizer
import com.frank.ffmpeg.listener.OnSeeBarListener import com.frank.ffmpeg.listener.OnSeeBarListener
import com.frank.ffmpeg.util.FileUtil import com.frank.ffmpeg.util.FileUtil
import com.frank.ffmpeg.view.VisualizerView import com.frank.ffmpeg.view.VisualizerView
@ -42,7 +41,6 @@ class AudioEffectActivity : BaseActivity(), OnSeeBarListener, AudioEffectCallbac
private var equalizerAdapter: EqualizerAdapter? = null private var equalizerAdapter: EqualizerAdapter? = null
private var barEnhancer: SeekBar? = null private var barEnhancer: SeekBar? = null
private var visualizerView: VisualizerView? = null private var visualizerView: VisualizerView? = null
private var mVisualizer: AudioVisualizer? = null
private var mAudioEffectController: AudioEffectController? = null private var mAudioEffectController: AudioEffectController? = null
@ -57,7 +55,7 @@ class AudioEffectActivity : BaseActivity(), OnSeeBarListener, AudioEffectCallbac
mAudioEffectController?.setupPresetStyle(this@AudioEffectActivity, spinnerStyle!!) mAudioEffectController?.setupPresetStyle(this@AudioEffectActivity, spinnerStyle!!)
mAudioEffectController?.setupBassBoost(mPlayer!!.audioSessionId, barBassBoost!!) mAudioEffectController?.setupBassBoost(mPlayer!!.audioSessionId, barBassBoost!!)
mAudioEffectController?.setLoudnessEnhancer(mPlayer!!.audioSessionId, barEnhancer!!) mAudioEffectController?.setLoudnessEnhancer(mPlayer!!.audioSessionId, barEnhancer!!)
setupVisualizer() mAudioEffectController?.setupVisualizer(mPlayer!!.audioSessionId)
mPlayer!!.start() mPlayer!!.start()
} }
@ -112,20 +110,6 @@ class AudioEffectActivity : BaseActivity(), OnSeeBarListener, AudioEffectCallbac
mAudioEffectController?.onEqualizerProgress(index, progress) mAudioEffectController?.onEqualizerProgress(index, progress)
} }
private fun setupVisualizer() {
mVisualizer = AudioVisualizer()
mVisualizer?.initVisualizer(mPlayer!!.audioSessionId, false, true, object : Visualizer.OnDataCaptureListener {
override fun onFftDataCapture(visualizer: Visualizer?, fft: ByteArray?, samplingRate: Int) {
if (visualizerView != null && fft != null) {
visualizerView!!.post { visualizerView!!.setWaveData(fft) }
}
}
override fun onWaveFormDataCapture(visualizer: Visualizer?, waveform: ByteArray?, samplingRate: Int) {
}
})
}
override fun onViewClick(view: View) { override fun onViewClick(view: View) {
} }
@ -134,10 +118,6 @@ class AudioEffectActivity : BaseActivity(), OnSeeBarListener, AudioEffectCallbac
} }
private fun releaseVisualizer() {
mVisualizer?.releaseVisualizer()
}
override fun setEqualizerList(maxProgress: Int, equalizerList: ArrayList<Pair<*, *>>) { override fun setEqualizerList(maxProgress: Int, equalizerList: ArrayList<Pair<*, *>>) {
if (equalizerAdapter != null) { if (equalizerAdapter != null) {
equalizerAdapter!!.setMaxProgress(maxProgress) equalizerAdapter!!.setMaxProgress(maxProgress)
@ -149,11 +129,16 @@ class AudioEffectActivity : BaseActivity(), OnSeeBarListener, AudioEffectCallbac
return equalizerAdapter?.getSeekBarList() return equalizerAdapter?.getSeekBarList()
} }
override fun onFFTDataCallback(fft: ByteArray?) {
if (fft != null && visualizerView != null) {
visualizerView!!.post { visualizerView!!.setWaveData(fft) }
}
}
override fun onDestroy() { override fun onDestroy() {
super.onDestroy() super.onDestroy()
mAudioEffectController?.release() mAudioEffectController?.release()
releaseVisualizer()
mPlayer?.release() mPlayer?.release()
} }

@ -17,14 +17,11 @@ import java.util.ArrayList
*/ */
class VisualizerView : View { class VisualizerView : View {
private var upShowStyle = ShowStyle.STYLE_HOLLOW_LUMP private var wavePath = Path()
private var lumpPaint: Paint? = null
private var waveData: ByteArray? = null private var waveData: ByteArray? = null
private var pointList: MutableList<Point>? = null private var pointList: MutableList<Point>? = null
private var mShowStyle = ShowStyle.STYLE_HOLLOW_LUMP
private var lumpPaint: Paint? = null
private var wavePath = Path()
constructor(context: Context) : super(context) { constructor(context: Context) : super(context) {
init() init()
@ -53,9 +50,8 @@ class VisualizerView : View {
invalidate() invalidate()
} }
fun setStyle(showStyle: ShowStyle) {
fun setStyle(upShowStyle: ShowStyle) { this.mShowStyle = showStyle
this.upShowStyle = upShowStyle
} }
override fun onDraw(canvas: Canvas) { override fun onDraw(canvas: Canvas) {
@ -72,11 +68,9 @@ class VisualizerView : View {
continue continue
} }
when (upShowStyle) { when (mShowStyle) {
ShowStyle.STYLE_HOLLOW_LUMP -> drawLump(canvas, i, false) ShowStyle.STYLE_HOLLOW_LUMP -> drawLump(canvas, i, false)
ShowStyle.STYLE_WAVE -> drawWave(canvas, i, false) ShowStyle.STYLE_WAVE -> drawWave(canvas, i, false)
else -> {
}
} }
} }
} }
@ -118,7 +112,7 @@ class VisualizerView : View {
* @param data data * @param data data
*/ */
private fun genSamplingPoint(data: ByteArray) { private fun genSamplingPoint(data: ByteArray) {
if (upShowStyle != ShowStyle.STYLE_WAVE) { if (mShowStyle != ShowStyle.STYLE_WAVE) {
return return
} }
if (pointList == null) { if (pointList == null) {
@ -129,7 +123,7 @@ class VisualizerView : View {
pointList!!.add(Point(0, 0)) pointList!!.add(Point(0, 0))
var i = WAVE_SAMPLING_INTERVAL var i = WAVE_SAMPLING_INTERVAL
while (i < LUMP_COUNT) { while (i < LUMP_COUNT) {
pointList!!.add(Point(LUMP_SIZE * i, waveData!![i].toInt())) pointList!!.add(Point(LUMP_SIZE * i, data[i].toInt()))
i += WAVE_SAMPLING_INTERVAL i += WAVE_SAMPLING_INTERVAL
} }
pointList!!.add(Point(LUMP_SIZE * LUMP_COUNT, 0)) pointList!!.add(Point(LUMP_SIZE * LUMP_COUNT, 0))

Loading…
Cancel
Save