2010-06-04 8 views
2

J'ai essayé d'utiliser la fonction de chargement de SoundPool qui prend un FileDescriptor, car je voulais pouvoir définir le décalage et la longueur. Le fichier n'est pas stocké dans les ressources mais un fichier sur la carte de stockage. Même si ni la charge ni la fonction de lecture du SoundPool ne lèvent d'exception ou n'impriment rien sur la console, le son n'est pas joué. Utiliser le même code, mais utiliser la chaîne de chemin de fichier dans le constructeur SoundPool fonctionne parfaitement.SoundPool.load() et FileDescriptor à partir du fichier

Voilà comment j'ai essayé le chargement (début est égale à 0 et la longueur est la longueur du fichier dans miliseconds):

FileInputStream fileIS = new FileInputStream(new File(mFile)); 
mStreamID = mSoundPool.load(fileIS.getFD(), start, length, 0); 
mPlayingStreamID = mSoundPool.play(mStreamID, 1f, 1f, 1, 0, 1f); 

Si je l'utiliser, cela fonctionne:

mStreamID = mSoundPool.load(mFile, 0); 
mPlayingStreamID = mSoundPool.play(mStreamID, 1f, 1f, 1, 0, 1f); 

Des idées quelqu'un?

Merci

Répondre

3

Peut-être vous avez déjà compris cela, mais la lecture de la documentation, il semble que la longueur est probablement en octets et non millisecondes. Il indique que le passage d'un descripteur de fichier est utile si vous stockez plusieurs sons dans un seul fichier binaire. Cela implique que vous dites au système quel son des multiples sortir, mais je pense qu'il doit être capable de le traiter comme un seul son. Donc, ceci est utilisé si vous concaténez plusieurs fichiers wave ensemble, et que vous voulez lui dire de jouer un fichier wave unique à partir du binaire.

Questions connexes