2011-04-23 5 views
1

J'ai un problème avec l'initialisation AudioTrack android. J'ai Nexus One avec Android 2.3.3.Android AudioTrack ne peut pas être INITIALISÉ

Voici mon code:

int _rate = AudioTrack.getNativeOutputSampleRate (AudioManager.STREAM_SYSTEM);

int buffersize = AudioRecord.getMinBufferSize (_rate, AudioFormat.CHANNEL_IN_MONO, AudioFormat.ENCODING_PCM_16BIT);

AudioTrack UnTrack = new AudioTrack (AudioManager.STREAM_VOICE_CALL, _rate, AudioFormat.CHANNEL_OUT_MONO, AudioFormat.ENCODING_PCM_16BIT, buffersize, AudioTrack.MODE_STREAM);

if (atrack.getState() == AudioTrack.STATE_UNINITIALIZED) ...

Ainsi, l'état de la UnPiste est toujours AudioTrack.STATE_UNINITIALIZED

Le manifeste d'application est

<application android:icon="@drawable/icon" android:label="@string/app_name"> 
    <activity android:name="BigLeftEarActivity" 
       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> 

<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"></uses-permission> 
<uses-permission android:name="android.permission.BLUETOOTH"></uses-permission> 
<uses-permission android:name="android.permission.RECORD_AUDIO"></uses-permission> 

<uses-sdk android:minSdkVersion="10" /> 

Pourriez-vous m'aider? Quel pourrait être le problème?

Merci!

Répondre

3

je trouve une solution:

Après la ligne

int buffersize = AudioRecord.getMinBufferSize (_rate, AudioFormat.CHANNEL_IN_MONO, AudioFormat.ENCODING_PCM_16BIT);

J'ai ajouté

buffersize * = 2;

et la piste audio a été initialisée.

Ce n'est pas une solution parfaite. Peut-être qu'il suffirait d'ajouter juste un octet à la mémoire tampon, mais cela fonctionne.

"Fifi quod potui, faciant meliora potentes Fiod quod potui, faciant meliora potentes."

+1

Je suis le même problème avec mon Nexus One, je vois une ligne de ligne de journal qui dit "minFrameCount 3072, FrameCount 1536". Cependant, bien sûr, je suis passé en 3072 en tant que taille de la mémoire tampon ... est-ce un bug Nexus One ??? – Ivan

+1

Vous pouvez trouver que c'est parce que "getMinBufferSize retourne la taille minimale dans BYTES.Si vous écrivez exactement le même nombre de SHORTS (qui sont deux octets chacun), alors vous remplissez le tampon. tableau dont la longueur est ce nombre exact, vous ne devriez pas avoir de problème. – protectedmember

3

Je pense avoir trouvé votre problème:

Vous utilisez le AudioRecord.getMinBufferSize() pour un AudioTrack. Vous devriez utiliser le AudioTrack.getMinBUfferSize() à la place, cela devrait vous donner la valeur appropriée.

mAudioRecBufferSize = AudioRecord.getMinBufferSize(44100, AudioFormat.CHANNEL_IN_MONO , AudioFormat.ENCODING_PCM_16BIT);

mAudioPlayBufferSize = AudioTrack.getMinBufferSize(44100, AudioFormat.CHANNEL_OUT_MONO , AudioFormat.ENCODING_PCM_16BIT);

Questions connexes