parent
							
								
									b47bf35e47
								
							
						
					
					
						commit
						bb6d6d3437
					
				| @ -0,0 +1,99 @@ | ||||
| package com.frank.androidmedia.controller | ||||
| 
 | ||||
| import android.R | ||||
| import android.content.Context | ||||
| import android.media.audiofx.Equalizer | ||||
| import android.media.audiofx.PresetReverb | ||||
| import android.util.Log | ||||
| import android.util.Pair | ||||
| import android.view.View | ||||
| import android.widget.AdapterView | ||||
| import android.widget.ArrayAdapter | ||||
| import android.widget.SeekBar | ||||
| import android.widget.Spinner | ||||
| import com.frank.androidmedia.listener.AudioEffectCallback | ||||
| import java.util.ArrayList | ||||
| 
 | ||||
| /** | ||||
|  * AudioEffect: Equalizer、PresetReverb | ||||
|  * | ||||
|  * @author frank | ||||
|  * @date 2022/3/23 | ||||
|  */ | ||||
| open class AudioEffectController(audioEffectCallback: AudioEffectCallback) { | ||||
| 
 | ||||
|     companion object { | ||||
|         val TAG: String = AudioEffectController::class.java.simpleName | ||||
|     } | ||||
| 
 | ||||
|     private var bands: Short = 0 | ||||
|     private var minEQLevel: Short = 0 | ||||
|     private var mEqualizer: Equalizer? = null | ||||
| 
 | ||||
|     private var mPresetReverb: PresetReverb? = null | ||||
|     private val reverbValues = ArrayList<String>() | ||||
| //    private var seekBarList: List<SeekBar>? = ArrayList() | ||||
| 
 | ||||
|     private var mAudioEffectCallback: AudioEffectCallback? = null | ||||
| 
 | ||||
|     private val presetReverb = arrayOf("None", "SmallRoom", "MediumRoom", "LargeRoom", | ||||
|             "MediumHall", "LargeHall", "Plate") | ||||
| 
 | ||||
|     init { | ||||
|         mAudioEffectCallback = audioEffectCallback | ||||
|     } | ||||
| 
 | ||||
|     fun setupEqualizer(audioSessionId: Int) { | ||||
|         val equalizerList = ArrayList<Pair<*, *>>() | ||||
|         mEqualizer = Equalizer(0, audioSessionId) | ||||
|         mEqualizer!!.enabled = true | ||||
|         // band level: min and max | ||||
|         minEQLevel = mEqualizer!!.bandLevelRange[0]//min level | ||||
|         val maxEQLevel = mEqualizer!!.bandLevelRange[1]  // max level | ||||
|         bands = mEqualizer!!.numberOfBands | ||||
|         for (i in 0 until bands) { | ||||
|             val centerFreq = (mEqualizer!!.getCenterFreq(i.toShort()) / 1000).toString() + " Hz" | ||||
|             val pair = Pair.create(centerFreq, mEqualizer!!.getBandLevel(i.toShort()) - minEQLevel) | ||||
|             equalizerList.add(pair) | ||||
|         } | ||||
|         mAudioEffectCallback?.setEqualizerList(maxEQLevel - minEQLevel, equalizerList) | ||||
|     } | ||||
| 
 | ||||
|     fun setupPresetStyle(context: Context, spinnerStyle: Spinner) { | ||||
|         for (i in 0 until mEqualizer!!.numberOfPresets) { | ||||
|             reverbValues.add(mEqualizer!!.getPresetName(i.toShort())) | ||||
|         } | ||||
| 
 | ||||
|         spinnerStyle.adapter = ArrayAdapter(context, R.layout.simple_spinner_item, reverbValues) | ||||
|         spinnerStyle.onItemSelectedListener = object : AdapterView.OnItemSelectedListener { | ||||
|             override fun onItemSelected(arg0: AdapterView<*>, arg1: View, arg2: Int, arg3: Long) { | ||||
|                 try { | ||||
|                     mEqualizer!!.usePreset(arg2.toShort()) | ||||
|                     val seekBarList: List<SeekBar>? = mAudioEffectCallback?.getSeeBarList() | ||||
|                     if (bands > 0 && seekBarList != null && mEqualizer != null) { | ||||
|                         for (band in 0 until bands) { | ||||
|                             seekBarList[band].progress = mEqualizer!!.getBandLevel(band.toShort()) - minEQLevel | ||||
|                         } | ||||
|                     } | ||||
| 
 | ||||
|                 } catch (e: Exception) { | ||||
|                     Log.e(TAG, "preset style error=$e") | ||||
|                 } | ||||
| 
 | ||||
|             } | ||||
| 
 | ||||
|             override fun onNothingSelected(arg0: AdapterView<*>) {} | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     fun onEqualizerProgress(index: Int, progress: Int) { | ||||
|         mEqualizer!!.setBandLevel(index.toShort(), (progress + minEQLevel).toShort()) | ||||
|     } | ||||
| 
 | ||||
|     fun release() { | ||||
|         mEqualizer?.release() | ||||
|         mPresetReverb?.release() | ||||
|     } | ||||
| 
 | ||||
| 
 | ||||
| } | ||||
| @ -0,0 +1,19 @@ | ||||
| package com.frank.androidmedia.listener | ||||
| 
 | ||||
| import android.util.Pair | ||||
| import android.widget.SeekBar | ||||
| import java.util.ArrayList | ||||
| 
 | ||||
| /** | ||||
|  * The callback of AudioEffect | ||||
|  * | ||||
|  * @author frank | ||||
|  * @date 2022/3/23 | ||||
|  */ | ||||
| interface AudioEffectCallback { | ||||
| 
 | ||||
|     fun getSeeBarList(): List<SeekBar>? | ||||
| 
 | ||||
|     fun setEqualizerList(maxProgress: Int, equalizerList: ArrayList<Pair<*, *>>) | ||||
| 
 | ||||
| } | ||||
					Loading…
					
					
				
		Reference in new issue