2010-12-13 23 views
3

Je veux jouer un son d'une fréquence particulière dans android basé sur l'entrée de l'utilisateur, un peu similaire à l'application de la guitare. Quelqu'un peut-il me dire comment faire cela? Dois-je avoir tous les sons freq dans le dossier res \ raw?Jouer le son d'une fréquence particulière en android

Répondre

4

Non, vous n'avez pas besoin de stocker cela dans les ressources. Je pense qu'une meilleure approche serait de synthétiser les sons en temps réel. A cette fin, vous avez besoin:

  • java.lang.Math pour le calcul des fonctions trigonométriques pour remplir le tampon (après conversion du flotteur PCM (int)) avec le ton correct
  • android.media.AudioTrack pour lecture audio (à partir du tampon). Je suppose que le mode statique serait ce dont vous avez besoin - une réponse plus rapide et plus facile à utiliser. Cependant, la lecture audio n'est pas une tâche triviale du tout, donc vous auriez besoin d'en savoir plus sur le système audio sur Android. Bien sûr, certaines connaissances de base sur le traitement du signal sont plus que bienvenues.
  • vous pouvez même ajouter quelques effets sympas à l'aide android.media.audiofx
+0

Je vais essayer cela et revenir vers vous en cas de difficultés, que je suis sûr que je vais trouver ..: p .. Merci beaucoup Desiderio ... :) – Ashwin

1

C'est une question extrêmement complexe, même si elle ne semble pas comme ça. Quand vous dites 'son', vous voulez simplement dire un son (sinus, carré, triangle, dents de scie par exemple) ou voulez-vous jouer des sons de 'vrais' instruments tels que guitare, piano, etc.? Si c'est le premier (sons simples) alors la réponse de Desiderio peut être sur la bonne voie mais si vous voulez de vrais sons d'insrument, alors vous aurez besoin d'un court 'sample' dans/res/raw ou dans votre répertoire/assets.

Vous pouvez les charger dans une instance SoundPool et l'utiliser pour lire à différents 'taux', par exemple un 'taux' de 2 sera deux fois plus rapide et doublera la fréquence, augmentant ainsi d'une octave. Un «taux» de 0,5 sera la moitié de la vitesse, réduisant ainsi le son d'une octave.

+1

D'accord. J'ai essayé d'y répondre aussi simple que possible. Juste pour mentionner que la modélisation physique d'instruments réels est possible, en utilisant par ex. Algorithme Karplus-Strong. Ainsi, en utilisant la puissance de calcul actuelle des smartphones Android, il devrait être possible de mettre en œuvre une synthèse en temps réel. – Zelimir

+0

Je cherchais à jouer des sons d'instruments .. Donc, pour cela, il n'y a pas d'autre moyen que celui suggéré? Dans ce cas, le choix de l'échantillon serait très important ...? – Ashwin

+0

@ashwin Il y a aussi du MIDI, je crois. – ksoo

2

Envoie le son à une instance AudioTrack et modifie sa fréquence d'échantillonnage à la volée.