Avec l’arrivée de la nouvelle classe SampleDataEvent (Flash 10 ), il est maintenant possible de générer du son en AS3, sans avoir besoin d’aucun fichier. J’ai donc fait une petite expérimentation, avec un clavier de piano, et comme la doc n’est pas très explicite, j’ai un peu galérer, mais le résultat fonctionne…
Je me suis basé sur les fréquences des notes trouvées sur le site ordiecole.com », le LA étant le même que la tonalité du téléphone, je suis parti sur ces fréquences, qui me semblent bonnes, à mon oreille en tout cas ! Le tout pour un poids total de 3ko…
Les sources sont téléchargeables ici »
/**
*
* Auteur: Vincent Helwig
* Date: 30.10.2008
* Website: http://www.tsoin.com
* Description: Clavier de Piano / SampleDataEvent
*
**/
import flash.display.MovieClip;
import flash.media.Sound;
import flash.events.MouseEvent;
import flash.events.SampleDataEvent;
import flash.media.SoundChannel;
[SWF(width = "542", height = "190", backgroundColor = "#dfdede", framerate = "30")]
public class SoundSampleDataEvent extends MovieClip {
private var _son:Sound
private var phase:Number = 0;
private var freq:Number = 440;
private const PI2:Number = Math.PI * 2;
private var soundChannelObject:SoundChannel = new SoundChannel();
private var _clavier:Clavier;
public function SoundSampleDataEvent() {
_son = new Sound();
_clavier = new Clavier(Clavier.OCTAVE3);
_clavier.x = 5;
_clavier.y = 5;
_clavier.addEventListener( MouseEvent.MOUSE_DOWN, onNoteDown );
_clavier.addEventListener( MouseEvent.CLICK, onNoteUp );
addChild(_clavier);
_clavier = new Clavier(Clavier.OCTAVE4);
_clavier.x = 271;
_clavier.y = 5;
_clavier.addEventListener( MouseEvent.MOUSE_DOWN, onNoteDown );
_clavier.addEventListener( MouseEvent.CLICK, onNoteUp );
addChild(_clavier);
}
private function onNoteDown(e:MouseEvent):void {
freq = e.target.frequence;
_son.addEventListener( SampleDataEvent.SAMPLE_DATA, onSample);
soundChannelObject = _son.play();
}
private function onNoteUp(e:MouseEvent):void {
_son.removeEventListener( SampleDataEvent.SAMPLE_DATA, onSample);
soundChannelObject.stop();
}
public function onSample(e:SampleDataEvent):void {
var smpl:Number;
var w:Number = PI2 * freq / 44000;
for (var i:int = 0; i < 8192; ++i) {
phase += w;
if (phase > PI2) { phase -= PI2; }
smpl = Math.sin(phase);
e.data.writeFloat(smpl);
e.data.writeFloat(smpl);
}
}
}
}
21 avril 2009 à 9:07
hahah cool, ça me rappel mon premier programme en C
Tu crois que de cette façon ça serait possible de connaître et de changer le pitch (la vitesse) d’un son?
Merci
13 mai 2009 à 17:29
Bonne question, j’ai fait quelques recherche, et je suis tombé sur ce post de Akaneko…
http://www.akaneko.com/yanetzel/?p=132
Donc, oui, c’est possible
13 mai 2009 à 17:35
Et aussi, l’excellent Hobnox AudioTool de André Michelle, Joa Ebert and Kai-Philipp Schöllmann :
http://www.hobnox.com/index.1056.en.html
7 octobre 2009 à 17:19
Oppps, je ne vois ce post que tres tardivement !
Donc, oui c’est possible, comme vous l’avez souligne en pontant mon post.
Voici un lien d’andre michelle qui donne un code propre pour cette procedure (plus propre que le mien !!!!)
http://blog.andre-michelle.com/2009/pitch-mp3/
Si cela peut aider