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