I am trying to get information about my phone's microphone through the MicrophoneInfo library in android studio, but when I use a simple method that returns an integer like getId() or getLocation()... I get the following error....
My code is the following...
package com.example.mi_microfono;
import androidx.annotation.RequiresApi;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import android.Manifest;
import android.content.pm.PackageManager;
import android.media.AudioRecord;
import android.media.MediaRecorder;
import android.media.AudioDeviceInfo;
import android.media.MicrophoneInfo.Coordinate3F;
import android.media.MicrophoneInfo;
import android.os.Build;
import android.os.Bundle;
import android.os.Environment;
import android.view.View;
import android.widget.TextView;
import java.io.IOException;
import java.util.List;
public class MainActivity extends AppCompatActivity {
private MicrophoneInfo miMicrofono;
private TextView infoMicrofono;
private MediaRecorder grabacion;
private String archivoSalida = null;
private AudioDeviceInfo micMic;
@RequiresApi(api = Build.VERSION_CODES.Q)
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (ContextCompat.checkSelfPermission(getApplicationContext(), Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(getApplicationContext(), Manifest.permission.RECORD_AUDIO) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.RECORD_AUDIO}, 1000);
}
infoMicrofono = (TextView) findViewById(R.id.infoMicro);
configMicro();
}
public void configMicro(){
if (grabacion==null){
archivoSalida = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MUSIC) + "/grabacion5.mp3";
grabacion = new MediaRecorder();
grabacion.setAudioSource(MediaRecorder.AudioSource.MIC);
grabacion.setAudioSamplingRate(44100);
grabacion.setAudioEncodingBitRate(96000);
grabacion.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
grabacion.setOutputFile(archivoSalida);
grabacion.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB );
}
try{
grabacion.prepare();
grabacion.start();
}catch (IOException e){
String mensajeError = e.getMessage();
//mensaje.setText(mensajeError);
}
}
@RequiresApi(api = Build.VERSION_CODES.P)
public void dataMicro(View view){
int data;
try {
data = miMicrofono.getId();
infoMicrofono.setText("Locación: " + data);
}catch (NullPointerException e){
infoMicrofono.setText("error: " + e);
}
grabacion.stop();
}
}
After doing what I described before, I want to use the getFrequencyResponse() method, to get the frequency of the audio detected live by my phone's microphone, I want to detect the frequency directly without having to record and/or play an audio.
Please, could someone help me?