L'initialisation d'Android AudioRecord échoue à chaque fois
Mon problème est simple à expliquer, je suis en train de créer un AudioRecord objet, mais il ne parvient pas à initialiser (c'est à dire après le constructeur, getState retourne 0, indiquant l'échec). Je suis en cours d'exécution ce à partir d'Eclipse sur un MotoDroid 1 exécutant OS 2.2.1. Mon AndroidManifest.xml est, autant que je sache, à l'aide de la droite de l'autorisation, RECORD_AUDIO (je ne sais pas comment le vérifier):
<application android:icon="@drawable/icon" android:label="@string/app_name" android:debuggable="true">
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
<activity android:name=".SphinxMic"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
- Je faire pour créer le AudioRecord:
bufferSize = AudioRecord.getMinBufferSize(8000, CHANNEL_IN_MONO, ENCODING_PCM_8BIT);
audioRecorder = new AudioRecord(AudioSource.MIC, 8000, CHANNEL_IN_MONO, ENCODING_PCM_8BIT, 50*bufferSize);
if (audioRecorder.getState() != AudioRecord.STATE_INITIALIZED)
throw new Exception("AudioRecord init failed");
enregistreur audio.getState() renvoie 0 (c'est à dire STATE_UNINITIALIZED)
Je n'ai pas trouvé d'exemples complets d'utilisation de cette API et je suis très bien un Android débutant donc la solution pourrait bien être quelque chose de simple. Que puis-je faire pour savoir pourquoi il ne parvient pas?
Quelques personnes ont demandé les mêmes questions, mais ils doivent avoir été avoir différents problèmes que moi, parce que les correctifs ils approuvent n'ont pas aidé. Notamment cette. Mais la solution approuvée est perplexe et ne fonctionne pas pour moi de toute façon. J'ai aussi essayé une variété de taux de bit (8000, 16000, 11025, 44100), à la fois mono et stéréo et 8 et 16 bits. Aucune combinaison revient comme correctement initialisé.
source d'informationauteur Dave
Vous devez vous connecter pour publier un commentaire.
J'ai passé quelques heures à résoudre ce problème, et a constaté que le passage
à l'extérieur du bloc d'application effectivement résolu!
Un autre problème possible:
J'ai eu le
RECORD_AUDIO
autorisation dans mon manifeste, mais pour l'API de niveau 23 j'ai eu également à demander l'autorisation au moment de l'exécution.Essayer de 16 bits. C'est ce qui fonctionne pour moi:
Et j'ai les variables suivantes set:
Au cas où quelqu'un doit demander des autorisations de disque manuellement pour API 23+, voici une méthode que j'ai utilisé. Il suffit de l'échanger dans
permission.RECORD_AUDIO
dans les bits. La logique de la méthode dépend un peu de bits qui sont externes (par exemple,strings.xml
ActivityCompat
Snackbar
), mais pensé qu'il pourrait aider quelqu'un de toute façon.