2009-12-17 7 views
1

Je construis une application de musique dans l'iphone que j'ai faite en utilisant AVAudioPlayer, et elle joue de la musique avec succès.Comment générer une onde sinusoïdale w.r.t une chanson dans l'iphone?

Mais maintenant, mon exigence est de générer une onde (sinus/carré/numérique/analogique) à l'écran que la musique commence à jouer et arrêter la vague après la fin du fichier de musique.

Comment puis-je faire cela?

Répondre

3

Vous pouvez peut-être utiliser le projet core-plot pour dessiner vos courbes.

0

C'est un très bon blog qui montre comment dessiner des formes d'ondes: Drawing Waveforms
Il contient également des conseils sur la façon de traite la réduction des données pour les grands tampons.

EDIT:
L'article est écrit pour Mac OS X, mais comme il utilise Quartz pour afficher la forme d'onde, il devrait fonctionner correctement sur l'iPhone.

0

Il est plus facile de générer simplement une onde sinusoïdale. J'implémenté onde sinusoïdale dans le procédé de drawRect UIView comme suit:

float x=75; 
float yc=50; 
float w=0; 
while (w<=rect.frame.size.width) { 
CGPathMoveToPoint(path, nil, w,y/2); 
CGPathAddQuadCurveToPoint(path, nil, w+x/4, -yc,w+ x/2, y/2); 
CGPathMoveToPoint(path, nil, w+x/2,y/2); 
CGPathAddQuadCurveToPoint(path, nil, w+3*x/4, y+yc, w+x, y/2); 
CGContextAddPath(context, path); 
CGContextDrawPath(context, kCGPathStroke); 
w+=x; 
} 

Ici x serait la largeur de chaque onde sinusoïdale, tandis que y est la hauteur du cadre. Cela dessinerait nombre d'ondes sinusoïdales pour s'adapter à l'ensemble UIViewFrame. Il produirait une onde sinusoïdale d'apparence claire et yc étant une poignée de contrôle. Essayez-le, vous pourriez aimer.

Si la largeur ie. x est similaire à la largeur du cadre puis une seule onde sinusoïdale sera produite. Nombre d'onde sinusoïdale complète = (largeur de trame)/(largeur x de chaque onde sinusoïdale) Maintenant, essayez d'ajuster l'amplitude et la fréquence de l'onde par rapport à la puissance de l'audio.

Questions connexes