2017-08-09 1 views
4

Je suis encore assez nouveau pour la programmation en Delphi et je ne connais rien à Java. Cependant, j'ai besoin d'écrire un programme en utilisant RAD Studio qui peut lire l'amplitude d'une entrée audio. J'ai été incapable de trouver un moyen de le faire en Delphi (que je pouvais me permettre) mais j'ai trouvé un moyen d'utiliser l'API Android. La solution semble être dans l'objet MediaRecorder donc j'ai essayé de l'utiliser avec ce code.Comment instancier un objet java en utilisant JNI (Delphi)

var 
    Form1: TForm1; 
    RecorderObj: Jobject; 
    Recorder: JMediaRecorder; 

procedure TForm1.FormCreate(Sender: TObject); 
begin 
    Recorder:= MediaRecorder; // <------- The problem is here. 
    Recorder.setAudioSource(1); // should set the recording device to the mic 
end; 

procedure TForm1.Timer1Timer(Sender: TObject); 
begin 
    Label1.Text:= IntToStr(Recorder.getMaxAmplitude); 
end; 

Il me semble que ce code ne fonctionne pas car il n'y a pas d'instance de l'objet. Cependant, Enregistreur: = nouveau MediaRecorder() (la façon dont android le veut) ne fonctionne pas et ne le fait pas Enregistreur: = MediaRecorder.Create (la façon dont je pense que Delphi le veut généralement) Si quelqu'un sait comment obtenir un instance de l'objet ou connaît un moyen plus facile d'obtenir l'amplitude audio de Delphi/RAD Studio s'il vous plaît faites le moi savoir.

+2

Enregistreur: = TJMediaRecorder.JavaClass.init; Jetez également un oeil à l'unité FMX.Media.Android, il contient différentes classes pour la capture de médias –

+0

@DalijaPrasnikar: cela devrait être une réponse, pas un commentaire. –

+0

@DalijaPrasnikar: Les réponses ne doivent pas être longues, juste correctes. 'Recorder: = TJMediaRecorder.JavaClass.init;' - c'est une réponse assez complète (et correcte) à moi :-) Donnez-vous du crédit. –

Répondre

2

Pour créer une instance d'objet de classe Java dans Delphi, dans votre cas une instance d'une classe qui implémente l'interface JMediaRecorder, utilisez le code suivant:

Recorder := TJMediaRecorder.JavaClass.init; 
+2

J'ai aussi vu une syntaxe comme 'Recorder: = TJMediaRecorder.Create;' qui pourrait aussi fonctionner dans certaines versions de Delphi. Mais, en général, l'appel 'JavaClass.init()' appelle le constructeur de la classe Java. Si un constructeur de classe Java prend des paramètres, 'init()' le fera aussi. –