Android: Jouer un son sur Sco oreillette Bluetooth

Depuis quelques jours, j'ai essayé de jouer n'importe quel son sur mon sco oreillette bluetooth de mon téléphone android. Mon objectif final de ce projet est à terme de faire un ouvre-porte de garage, mais je dois d'abord être en mesure de jouer le son sur le casque.

Ici est la base de l'actuel code que j'utilise:

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


==Code==
    audioManager = (AudioManager) getSystemService(AUDIO_SERVICE);

    audioManager.setMode(AudioManager.MODE_IN_CALL);
    audioManager.startBluetoothSco();
    audioManager.setBluetoothScoOn(true);

    short[] soundData = new short [8000*20];
    for (int iii = 0; iii < 20*8000; iii++) {
        soundData[iii] = 32767;
        iii++;
        soundData[iii] = -32768;
    }

    audioTrack = new AudioTrack(AudioManager.STREAM_VOICE_CALL,
            8000, AudioFormat.CHANNEL_OUT_MONO,
            AudioFormat.ENCODING_PCM_16BIT, soundData.length
            * Short.SIZE, AudioTrack.MODE_STATIC);
    audioTrack.write(soundData, 0, soundData.length);
    audioTrack.play();

Avant que je l'exécute, j'ai ma paire de casque de bluetooth de mon téléphone et vous l'avez connecté. J'ai vérifié qu'il fonctionne en appelant ma messagerie vocale. Lorsque j'exécute mon code cependant, aucun son n'est émis à partir de n'importe où.

Ici sont les effets des différentes lignes de code:

Quand je suis juste en cours d'exécution de mon application:

    audioManager.setMode(AudioManager.MODE_IN_CALL);

Cette ligne fait tout mon son arrêt de travail, peu importe ce que je fais, de sorte qu'il est généralement commenté.

    audioManager.startBluetoothSco();
    audioManager.setBluetoothScoOn(true);

Ces deux lignes que le son s'arrête de sortir de l'enceinte avant et faire mon casque sur et souffle comme il est allumé mais il n'y a pas de sortie.

AudioManager.STREAM_VOICE_CALL

Cela fait partie de mon appel au constructeur AudioTrack, mais cela fait toute une différence. Depuis ce paramètre est défini à STREAM_VOICE_CALL le son sort du haut-parleur avant, si j'ai mis ce à STREAM_MUSIC, le son sort du haut-parleur arrière à la place.

Quand j'ouvre mon application pendant un appel:

    audioManager.setMode(AudioManager.MODE_IN_CALL);

Pendant un appel, cette ligne n'a pas d'effet, car MODE_IN_CALL était déjà réglé. Mais ce qui est différent, cependant, est que mon son est mélangé avec de l'appel téléphonique, alors que normalement il ne joue pas du tout.

    audioManager.startBluetoothSco();
    audioManager.setBluetoothScoOn(true);

Ces, avec son homologue hors moitiés, de contrôle où l'audio. Si je les désactiver, mon son et l'appel téléphonique venir de l'avant haut-parleur, avec ces sur, l'appel téléphonique vient de mon casque et mon son est perdu.

Pourquoi mon code ne fonctionne pas, honnêtement, je n'ai aucune idée. Je crois que j'ai rempli la liste de contrôle pour l'utilisation de startBluetoothSco().

Even if a SCO connection is established, the following restrictions 
apply on audio output streams so that they can be routed to SCO headset: 
- the stream type must be STREAM_VOICE_CALL - the format must be mono - 
the sampling must be 16kHz or 8kHz

Donc, quelqu'un aurait-il une idée de ce que je fais de mal? Il était une fois, que j'ai réussi à obtenir mon son à jouer dans le casque, mais c'est seulement une courte tonalité quand j'ai oublié de stop() mon AudioTrack donc je suppose que c'était un problème.

Où avez-vous mis AudioManager.MODE_NORMAL dans ce code?

OriginalL'auteur thepenguin77 | 2011-08-27