2010-09-17 9 views
1

J'essaie de changer la fréquence d'un fichier son unique. J'ai réussi à le faire dans Android avec la chose SoundPool. Mais le résultat semble vraiment mauvais. J'ai donc fait un pas à propos de la Transformation de Fourier - mais je ne sais pas si c'est ce que je cherche.changer la fréquence d'un fichier son en android

Je veux charger un seul fichier et changer la fréquence de ce fichier chaque fois que ce fichier est lu. Je peux donc créer des mélodies sur un ton. Est-ce possible avec Android/Java?


C'est ainsi que j'ai réussi à le faire. Avec "mauvais", je veux dire que ça sonne faux.

Si je veux jouer la prochaine fréquence de la note dans le fichier, je dois le multiplier par 2^(1/12). Mais puisque c'est juste un float, je suppose que ce n'est pas assez précis pour obtenir la "vraie" fréquence de la note suivante.

Existe-t-il un moyen "simple" d'atteindre cet objectif?

+2

Que voulez-vous dire par des sons mauvais? Je m'attends à ce que ça sonnera mal si vous changez la fréquence au hasard .. –

Répondre

0

La façon la plus simple avec le SOUNDPOOL est d'ajuster le taux de votre appel à jouer():

play(aSoundId, leftVolume, rightVolume, 1, 0, rate); 

Le taux peut varier de .5f à 2.0f, bien que les extrêmes en général ne sonnent pas grand , vous pouvez donc vouloir définir une plage acceptable (par exemple, .4f) et un taux minimum (par exemple, .85f). Ensuite, vous pouvez avoir une variable pour contrôler où vous êtes dans cette plage (par exemple, un flottant qui se situe entre .0f et 1.0f):

float rate = RATE_RANGE * pitch + MINIMUM_RATE; 
+0

J'ai eu des difficultés avec l'utilisation du paramètre rate - voir http://stackoverflow.com/questions/2291531/android-soundpool-rate-range. Est-ce que quelqu'un d'autre rencontre cela, ou a une solution de contournement? – Chris

Questions connexes