2010-08-02 19 views
2

Y a-t-il un code commun disponible qui produit des formes d'onde carrées, triangulaires, en dents de scie ou autres formes d'ondes personnalisées en utilisant la classe mathématique? Ci-dessous est une fonction de base qui gère un SampleDataEvent et joue une onde sinusoïdale de type c-440 (440 Hz). je voudrais changer le ton en incorporant des vagues carrées, triangulaires et autres.ActionScript - Création de vagues carrées, triangulaires et en dents de scie depuis Math.sin()?

var position:int = 0; 

var sound:Sound = new Sound(); 
sound.addEventListener(SampleDataEvent.SAMPLE_DATA, sampleDataHandler); 
sound.play(); 

function sampleDataHandler(event:SampleDataEvent):void 
    { 
    for(var i:int = 0; i < 2048; i++) 
     { 
     var phase:Number = position/44100 * Math.PI * 2; 
     position ++; 

     var sample:Number = Math.sin(phase * 440); 
     event.data.writeFloat(sample); // left 
     event.data.writeFloat(sample); // right 
     } 
    } 
+0

Doit-on utiliser 'sin'? Pouvez-vous juste écrire votre propre fonction? – kennytm

+0

Je n'ai pas besoin d'utiliser Math.sin(), mais je suppose que l'utilisation de Math.sin() (ou .cos()) serait la façon de créer des formes d'ondes personnalisées? ou au moins accompli facilement. – TheDarkIn1978

Répondre

3

Wikipédia donne des équations simples pour les square, triangle et sawtooth vagues. Voici probablement les plus simples (qui ont tous la période 1):

 
square(t) = sgn(sin(2πt)) 
sawtooth(t) = t - floor(t + 1/2) 
triangle(t) = abs(sawtooth(t)) 
+0

salut BlurRaja. J'ai un peu de difficulté à suivre votre exemple. J'ai peur que mes compétences en mathématiques ne soient pas si bonnes. Comment incorporeriez-vous ces nouvelles formes d'onde dans l'échantillon sonore de base suivant: var sample: Number = Math.sin (phase * 440); J'ai mis à jour ma question pour montrer cette fonction. – TheDarkIn1978

+0

en particulier, je n'ai aucune idée de ce que 2πt signifie ou comment il devrait être substitué dans AS3. – TheDarkIn1978

+0

@ TDI1978: 2πt signifie deux fois pi (3.141592 ...) fois t (qui est votre variable, comme sin (t)). [sgn] (http://en.wikipedia.org/wiki/Sign_function) est le signe (-1 pour le négatif, 0 pour le zéro, +1 pour le positif), [floor] (http://en.wikipedia.org/wiki/Floor_and_ceiling_functions) signifie arrondi vers le bas, et [abs] (http://en.wikipedia.org/wiki/Absolute_value) est la valeur absolue (enlever le signe négatif si la valeur est négative) –