parent
c139d9fa4e
commit
b294d3d11f
@ -0,0 +1,100 @@ |
|||||||
|
package com.frank.androidmedia.controller |
||||||
|
|
||||||
|
import android.media.audiofx.AcousticEchoCanceler |
||||||
|
import android.media.audiofx.AudioEffect |
||||||
|
import android.media.audiofx.AutomaticGainControl |
||||||
|
import android.media.audiofx.NoiseSuppressor |
||||||
|
import android.util.Log |
||||||
|
import java.lang.Exception |
||||||
|
|
||||||
|
/** |
||||||
|
* |
||||||
|
* @author frank |
||||||
|
* @date 2022/3/23 |
||||||
|
*/ |
||||||
|
open class AudioProcessController { |
||||||
|
|
||||||
|
/************************************************************* |
||||||
|
AudioEffect |
||||||
|
| |
||||||
|
____________________|___________________ |
||||||
|
| | | |
||||||
|
AcousticEchoCanceler AutomaticGainControl NoiseSuppressor |
||||||
|
|
||||||
|
**************************************************************/ |
||||||
|
|
||||||
|
companion object { |
||||||
|
val TAG: String = AudioProcessController::class.java.simpleName |
||||||
|
} |
||||||
|
|
||||||
|
private var noiseSuppressor: NoiseSuppressor? = null |
||||||
|
private var automaticGainControl: AutomaticGainControl? = null |
||||||
|
private var acousticEchoCanceler: AcousticEchoCanceler? = null |
||||||
|
|
||||||
|
fun initAEC(audioSessionId: Int): Boolean { |
||||||
|
if (!AcousticEchoCanceler.isAvailable()) { |
||||||
|
Log.e(TAG, "AEC not available...") |
||||||
|
return false |
||||||
|
} |
||||||
|
try { |
||||||
|
acousticEchoCanceler = AcousticEchoCanceler.create(audioSessionId) |
||||||
|
} catch (e: Exception) { |
||||||
|
Log.e(TAG, "init AcousticEchoCanceler error=$e") |
||||||
|
return false |
||||||
|
} |
||||||
|
val result = acousticEchoCanceler?.setEnabled(true) |
||||||
|
if (result != AudioEffect.SUCCESS) { |
||||||
|
acousticEchoCanceler?.release() |
||||||
|
acousticEchoCanceler = null |
||||||
|
return false |
||||||
|
} |
||||||
|
return true |
||||||
|
} |
||||||
|
|
||||||
|
fun initAGC(audioSessionId: Int): Boolean { |
||||||
|
if (!AutomaticGainControl.isAvailable()) { |
||||||
|
Log.e(TAG, "AGC not available...") |
||||||
|
return false |
||||||
|
} |
||||||
|
try { |
||||||
|
automaticGainControl = AutomaticGainControl.create(audioSessionId) |
||||||
|
} catch (e: Exception) { |
||||||
|
Log.e(TAG, "init AutomaticGainControl error=$e") |
||||||
|
return false |
||||||
|
} |
||||||
|
val result = automaticGainControl?.setEnabled(true) |
||||||
|
if (result != AudioEffect.SUCCESS) { |
||||||
|
automaticGainControl?.release() |
||||||
|
automaticGainControl = null |
||||||
|
return false |
||||||
|
} |
||||||
|
return true |
||||||
|
} |
||||||
|
|
||||||
|
fun initNS(audioSessionId: Int): Boolean { |
||||||
|
if (!NoiseSuppressor.isAvailable()) { |
||||||
|
Log.e(TAG, "NS not available...") |
||||||
|
return false |
||||||
|
} |
||||||
|
try { |
||||||
|
noiseSuppressor = NoiseSuppressor.create(audioSessionId) |
||||||
|
} catch (e: Exception) { |
||||||
|
Log.e(TAG, "init NoiseSuppressor error=$e") |
||||||
|
return false |
||||||
|
} |
||||||
|
val result = noiseSuppressor?.setEnabled(true) |
||||||
|
if (result != AudioEffect.SUCCESS) { |
||||||
|
noiseSuppressor?.release() |
||||||
|
noiseSuppressor = null |
||||||
|
return false |
||||||
|
} |
||||||
|
return true |
||||||
|
} |
||||||
|
|
||||||
|
fun release() { |
||||||
|
noiseSuppressor?.release() |
||||||
|
acousticEchoCanceler?.release() |
||||||
|
automaticGainControl?.release() |
||||||
|
} |
||||||
|
|
||||||
|
} |
Loading…
Reference in new issue