Android AudioRecord lu renvoie toujours -3 (ERROR_INVALID_OPERATION)

J’ai essayé de simplifier le code au ssortingct minimum et cela ne fonctionne toujours pas:

public class MainActivity extends AppCompatActivity { AudioRecord rec; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); rec= new AudioRecord(MediaRecorder.AudioSource.MIC,44100, AudioFormat.CHANNEL_IN_MONO,AudioFormat.ENCODING_PCM_16BIT,8192); short buff[] = new short[8192]; int read = rec.read(buff,0,buff.length); System.out.print(read); } 

Retourne toujours -3 peu importe quoi. Qu’est-ce que je rate?

Ensemble avec mon ami, nous avons finalement réussi à résoudre ce problème. Vous devez appeler AudioRecord.startRecording () avant d’appeler read (). Aussi, une fois que vous avez terminé, vous devez appeler AudioRecord.stop (). Je me demande pourquoi il est si difficile de trouver cette information de base

Avez-vous vérifié les permissions dans le manifeste?

   

La documentation dit:

Lit les données audio du matériel audio pour les enregistrer dans un tableau d’octets. Le format spécifié dans le constructeur AudioRecord doit être ENCODING_PCM_8BIT pour correspondre aux données du tableau.

Paramètres

audioData octet: le tableau sur lequel les données audio enregistrées sont écrites. Cette valeur ne doit jamais être nulle.

offsetInBytes int: index dans audioData à partir duquel les données sont écrites exprimées en octets.

sizeInBytes int: le nombre d’octets demandés. Résultats

int zéro ou le nombre d’octets positifs lus ou l’un des codes d’erreur suivants. Le nombre d’octets ne dépassera pas sizeInBytes.

ERROR_INVALID_OPERATION si l’object n’est pas correctement initialisé

Je pense que vous devriez vérifier l’initialisation de l’object AudioRecord. Alors regardez cette réponse: exemple Android AudioRecord

Selon la documentation Android –

-3 indique qu’il s’agit d’une opération non valide .

Indique un échec dû à l’utilisation incorrecte d’une méthode.

Valeur constante: -3 (0xfffffffd)

Ce problème est probablement dû au fait qu’il n’a pas pu créer une instance AudioRecord avec les parameters que vous avez spécifiés.

Après avoir créé l’object, essayez de vérifier s’il a été initialisé correctement avec la méthode getState

  if (rec.getState() == AudioRecord.STATE_UNINITIALIZED) { // Oops looks like it was not initalized correctly } 

S’il s’agit bien d’un état non initialisé, essayez de définir différentes propriétés audio. Consultez la documentation de AudioRecord [constructeur] ( https://developer.android.com/reference/android/media/AudioRecord.html#AudioRecord(int , int, int, int, int)), la documentation fournit des détails complets sur comment initialiser les différents parameters.