Android MediaRecorder JNI问题(德尔福)
我正在使用RAD Studio 10.2东京和在Delphi编程。Android MediaRecorder JNI问题(德尔福)
我对使用JNI库的Java对象有一般问题。
我想要做的是找到按钮按下之间的Android音频源的最大音频幅度。
这是我正在使用的代码。
var
Form1: TForm1;
Recorder: JMediaRecorder;
procedure TForm1.Button1Click(Sender: TObject);
begin
if not assigned(Recorder) then
begin
Recorder:= TJMediaRecorder.Create();
Recorder.setAudioSource(1);
Recorder.setOutputFormat(1);
Recorder.setAudioEncoder(1);
Recorder.setOutputFile(TPath.GetTempPath+'/test');
Recorder.prepare();
Recorder.start();
end;
Label1.Text:=IntToStr(Recorder.getMaxAmplitude());
end;
这似乎会产生多个问题。
问题#1:
虽然我知道,在Java媒体记录的设置应该是这个样子
Recorder.setAudioSource(MediaRecorder.AudioSource.MIC).
这不是东西,我可以在RAD Studio企业进入。我看了一下API,发现它应该是1的整数。问题是它给我一个错误,说它找不到音频源。
问题2:
我需要设置的路径使用
Recorder.setOutputFile()
与此问题的文件是,它仅接受JStrings作为输入。我到处都找过的地方,发现谁使用
StringToJString('my super cool string')
几个人,我认为这是我不知道的,但因为当我使用它,它不工作库的一部分。
如果您知道另一种获取Android音频源读取振幅的方法,我也会接受这个答案,因为这是我正在尝试解决的整体问题。
一般来说,在Delphi的Android JNI框架内:
Java类类型正在使用的前缀为
TJ
类在Delphi表示,并且Java对象实例使用的前缀为接口在Delphi表示J
。嵌套的Java类由Delphi类和接口来表示,它们以父类名后跟
_
后跟嵌套类名命名。Java静态常量/字段/属性/方法在Delphi中表示为特殊
JavaClass
类属性的子属性/方法。
所以,你的情况:
了Java
MediaRecorder
类由TJMediaRecorder
类和JMediaRecorder
接口表示。Java
MediaRecorder.AudioSource
类由TJMediaRecorder_AudioSource
类和JMediaRecorder_AudioSource
接口表示。-
了Java
MediaRecorder.AudioSource.MIC
常数由TJMediaRecorder_AudioSource.JavaClass.MIC
类属性表示:Recorder.setAudioSource(TJMediaRecorder_AudioSource.JavaClass.MIC);
同样的道理也适用于MediaRecorder.setOutputFormat()
和MediaRecorder.setAudioEncoder()
方法:
Recorder.setOutputFormat(TJMediaRecorder_OutputFormat.JavaClass.THREE_GPP);
Recorder.setAudioEncoder(TJMediaRecorder_AudioEncoder.JavaClass.AMR_NB);
至于串,JNI对Delphi字符串一无所知,因此您必须使用StringToJString()
将Delphi字符串转换为JNI stri ngs,并使用JStringToString()
将JNI字符串转换为Delphi字符串。这两个功能都在Delphi RTL中,具体取决于您使用的Delphi版本,具体为Androidapi.Helpers
单元(XE6 +)或Androidapi.JNI.JavaTypes
单元(XE5)。
Recorder.setOutputFile(StringToJString(TPath.Combine(TPath.GetTempPath, 'test')));
感谢您的快速和知识的答案。你偶然知道了解这种跨语言程序设计的好资源吗?我还没有找到一个全面的来源。 – Michael
@Michael这些可能有所帮助:https://www.youtube.com/watch?v = GcuYc7F0lIU,http://blog.blong.com/search/label/Android –