在FMX Delphi 11中,我正在录制音频来处理它。
下面是一段代码:
FChannelConfig:= TJAudioFormat.JavaClass.CHANNEL_IN_STEREO;
FAudioFormat := TJAudioFormat.JavaClass.ENCODING_PCM_16BIT;
FTailleBufferBytes := TJAudioRecord.JavaClass.getMinBufferSize(FSampleRate, FChannelConfig, FAudioFormat);
// VOICE_RECOGNITION
AUDIO_SOURCE:= TJMediaRecorder_AudioSource.JavaClass.VOICE_RECOGNITION ;
//UNPROCESSED Added in API 24
if (TJBuild_VERSION.JavaClass.SDK_INT >= 24) then
begin
FAudioManager:= TJAudioManager.Wrap((TAndroidHelper.Activity.getSystemService(TJContext.JavaClass.AUDIO_SERVICE) as ILocalObject).GetObjectID);
AudioMngrProp:= FAudioManager.getProperty(TJAudioManager.JavaClass.PROPERTY_SUPPORT_AUDIO_SOURCE_UNPROCESSED) ;
if (Boolean.Parse(JStringToString(AudioMngrProp))) then
begin
AUDIO_SOURCE:= TJMediaRecorder_AudioSource.JavaClass.UNPROCESSED ;
end;
end;
// Init FAudioRecord
FAudioRecord := TJAudioRecord.JavaClass.init(AUDIO_SOURCE, FSampleRate, FChannelConfig, FAudioFormat, FTailleBufferBytes);
// Start recording
(FAudioRecord As JAudioRecord).StartRecording;
在一些Android设备,我有一个不同的方式坏水平:10倍高,4倍低,低频电平降低,…因此,我决定获得所有关于Android正在使用的音频效果的信息,并尝试在我的应用程序中禁用它。这样做,我希望能修复我的应用程序中的错误级别。
问题是我有这些信息的问题。
我试图从TJAudioEffect和TJAutomaticGainControl类获取信息,但我不知道如何使用它。
FAudioEffect:= TJAudioEffect.Wrap((TAndroidHelper.Activity.getSystemService(TJContext.JavaClass.AUDIO_SERVICE) as ILocalObject).GetObjectID) ;
FAutoGainCtrl:= TJAutomaticGainControl.Wrap((TAndroidHelper.Activity.getSystemService(TJContext.JavaClass.AUDIO_SERVICE) as ILocalObject).GetObjectID) ;
有了大卫的答案,我可以测试TJNoiseSuppressor和TJAutomaticGainControl:
TJNoiseSuppressor.JavaClass.isAvailable
TJAutomaticGainControl.JavaClass.isAvailable
当创建一个TJAutomaticGainControl对象时,我必须从FAudioRecord获取ID,AUDIO_SESSION_ID_GENERATE不起作用,我不明白为什么:
//FAutoGainCtrl:= TJAutomaticGainControl.JavaClass.create(TJAudioManager.JavaClass.AUDIO_SESSION_ID_GENERATE) ;
var sessionID:= FAudioRecord.getAudioSessionId() ;
FAutoGainCtrl:= TJAutomaticGainControl.JavaClass.create(sessionID) ;
我在创建均衡器对象时有一个例外:无法初始化类型的效果引擎
FEqualizer := TJEqualizer.JavaClass.init(0, sessionID);
FEqualizer := TJEqualizer.JavaClass.init(0, (TAndroidHelper.Activity.getSystemService(TJContext.JavaClass.AUDIO_SERVICE) as ILocalObject).GetObjectID) ;
SessionID不为空。
我以为是许可问题。在清单中,我必须添加MODIFY_AUDIO_SETTINGS权限:
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
此权限不需要在运行时请求。
1条答案
按热度按时间v1l68za41#
AutomaticGainControl
是使用create
类方法创建的,例如:根据documentation for
AudioEffect
,您可以创建其中一个后代的示例,例如:其中LSessionID是名称所暗示的。