Пишем музыку на FlashPlayer 10
В итоге получим blink-182 – Stay Together for the Kids
Синтаксис в строках такой:
d-4 – Ре 4 октава
f#4 – Фа 4 октава диез
/ – разделение между нотами
= – означает что в конце играния ноты не будет короткого прерывания, будет так, как будь-то нажали и не отпускаете ноту
StayTogether.as
package {
import flash.display.Sprite;
import flash.events.SampleDataEvent;
import flash.media.Sound;
import flash.media.SoundTransform;
[SWF(width="550", height="400", backgroundColor="#000000")]
public class StayTogether extends Sprite {
private var sound:Sound;
private var noiseSolo:Number = 0;
private var noiseBass:Number = 0;
private var now:int = 0;
private var hold:int = 0;
private var speed:int = 5;
private var soloArr:Array;
private var bassArr:Array;
public function StayTogether() {
// stay together for the kids
var str:String =
"d-4/d-4/d-4/a-4/d-4/d-4/f#4/d-4/" +
"c#4/d-4/c#4/a-4/c#4/d-4/f#4/d-4/" +
"b-3/d-4/b-3/f#4/b-3/d-4/g-4/d-4/" +
"a-3/e-4/a-3/f#4/g-4/f#4/e-4/d-4/" +
"d-4/d-4/d-4/a-4/d-4/d-4/f#4/d-4/" +
"c#4/d-4/c#4/a-4/c#4/d-4/f#4/d-4/" +
"b-3/d-4/b-3/f#4/b-3/d-4/g-4/d-4/" +
"a-3/e-4/a-3/f#4/g-4/f#4/e-4/d-4/" +
"d-4/d-4/d-5=/d-5/d-4/d-4/d-5=/d-5/d-4/d-4/d-5=/d-5/d-4/d-4/d-5=/d-5/" +
"c#4/c#4/d-5=/d-5/c#4/c#4/d-5=/d-5/c#4/c#4/d-5=/d-5/c#4/c#4/d-5=/d-5/" +
"a-3/a-3/d-5=/d-5/a-3/a-3/d-5=/d-5/a-3/a-3/d-5=/d-5/a-3/a-3/d-5=/d-5/" +
"a-3/a-3/e-5=/e-5/a-3/a-3/e-5=/e-5/a-3/a-3/c#5=/c#5/a-3/a-3/c#5=/c#5/" +
"d-4/d-4/d-5=/d-4/d-4/d-4/d-5=/d-4/d-4/d-4/d-5=/d-4/d-4/d-4/d-5=/d-4/" +
"c#4/c#4/d-5=/c#4/c#4/c#4/d-5=/c#4/c#4/c#4/d-5=/c#4/c#4/c#4/d-5=/c#4/" +
"a-3/a-3/d-5=/a-3/a-3/a-3/d-5=/a-3/a-3/a-3/d-5=/a-3/a-3/a-3/d-5=/a-3/" +
"a-3/a-3/e-5=/a-3/a-3/a-3/e-5=/a-3/a-3/a-3/c#5=/a-3/a-3/a-3/c#5=/a-3/" +
"d-4/d-4/d-4/d-4/d-4/d-4/d-4/d-4/d-4/d-4/d-4/d-4/d-4/d-4/d-4/d-4/" +
"c#4/c#4/c#4/c#4/c#4/c#4/c#4/c#4/c#4/c#4/c#4/c#4/c#4/c#4/b-3/c#4/" +
"d-4/d-4/d-4/d-4/d-4/d-4/d-4/d-4/d-4/d-4/d-4/d-4/d-4/d-4/d-4/d-4/" +
"c#4/c#4/c#4/c#4/c#4/c#4/c#4/c#4/c#4/c#4/c#4/c#4/c#4/c#4/b-3/c#4";
soloArr = notesToHertz(str);
// stay together for the kids
str =
"d-3/d-3/d-3/d-3/d-3/d-3/d-3/d-3/" +
"c#3/c#3/c#3/c#3/c#3/c#3/c#3/c#3/" +
"b-2/b-2/b-2/b-2/b-2/b-2/b-2/b-2/" +
"a-2/a-2/a-2/a-2/a-2/a-2/a-2/a-2/" +
"d-3/d-3/d-3/d-3/d-3/d-3/d-3/d-3/" +
"c#3/c#3/c#3/c#3/c#3/c#3/c#3/c#3/" +
"b-2/b-2/b-2/b-2/b-2/b-2/b-2/b-2/" +
"a-2/a-2/a-2/a-2/a-2/a-2/a-2/a-2/" +
"d-3/d-3/a-4=/a-4/d-3/d-3/a-4=/a-4/d-3/d-3/a-4=/a-4/d-3/d-3/a-4=/a-4/" +
"c#3/c#3/a-4=/a-4/c#3/c#3/a-4=/a-4/c#3/c#3/a-4=/a-4/c#3/c#3/a-4=/a-4/" +
"a-2/a-2/a-4=/a-4/a-2/a-2/a-4=/a-4/a-2/a-2/a-4=/a-4/a-2/a-2/a-4=/a-4/" +
"a-2/a-2/a-4=/a-4/a-2/a-2/a-4=/a-4/a-2/a-2/a-4=/a-4/a-2/a-2/a-4=/a-4/" +
"d-3/d-3/a-4=/d-3/d-3/d-3/a-4=/d-3/d-3/d-3/a-4=/d-3/d-3/d-3/a-4=/d-3/" +
"c#3/c#3/a-4=/c#3/c#3/c#3/a-4=/c#3/c#3/c#3/a-4=/c#3/c#3/c#3/a-4=/c#3/" +
"a-2/a-2/a-4=/a-2/a-2/a-2/a-4=/a-2/a-2/a-2/a-4=/a-2/a-2/a-2/a-4=/a-2/" +
"a-2/a-2/a-4=/a-2/a-2/a-2/a-4=/a-2/a-2/a-2/a-4=/a-2/a-2/a-2/a-4=/a-2/" +
"g-2/g-2/g-2/g-2/g-2/g-2/g-2/g-2/g-2/g-2/g-2/g-2/g-2/g-2/g-2/g-2/" +
"f#2/f#2/f#2/f#2/f#2/f#2/f#2/f#2/f#2/f#2/f#2/f#2/f#2/f#2/e-2/f#2/" +
"g-2/g-2/g-2/g-2/g-2/g-2/g-2/g-2/g-2/g-2/g-2/g-2/g-2/g-2/g-2/g-2/" +
"f#2/f#2/f#2/f#2/f#2/f#2/f#2/f#2/f#2/f#2/f#2/f#2/f#2/f#2/e-2/f#2";
bassArr = notesToHertz(str);
sound = new Sound();
sound.addEventListener(SampleDataEvent.SAMPLE_DATA, onCallback);
sound.play(0, 0, new SoundTransform(.25, -.1));
}
private function onCallback(e:SampleDataEvent):void {
var sample1:Number;
var sample2:Number;
var flag:Boolean = hold<speed-soloArr[now].short;
for (var i:uint=0; i<2048; i++){
noiseSolo += soloArr[now].hz;
sample1 = noiseSolo * Math.PI;
sample1 = Math.min(1, Math.tan(sample1));
noiseBass += bassArr[now].hz;
sample2 = noiseBass * Math.PI;
sample2 = Math.min(1, Math.tan(sample2));
if (!flag && i>=1024) {
sample1 = 0;
sample2 = 0;
}
e.data.writeFloat(sample1);
e.data.writeFloat(sample2);
}
hold++;
if (hold==speed) {
hold = 0;
now++;
now==soloArr.length ? now=0 : null;
}
}
private function notesToHertz(str:String):Array {
var str:String = str.toUpperCase();
var arr:Array = str.split("/");
for (var i:uint=0; i<arr.length; i++){
var a:Array = arr[i].split("");
var num:Number;
if (a[1] == "#") {
num = Notes[a[0]+"_"];
} else {
num = Notes[a[0]];
}
num = 2 + num + 12*Number(a[2]) - 12*6;
var hz:Number = Math.pow(2, num/12) * 440;
hz /= 44100;
var short:int;
if (a[3]=="=") short = 0;
else short = 1;
arr[i] = {hz:hz, short:short};
}
return arr;
}
}
}
import flash.display.Sprite;
import flash.events.SampleDataEvent;
import flash.media.Sound;
import flash.media.SoundTransform;
[SWF(width="550", height="400", backgroundColor="#000000")]
public class StayTogether extends Sprite {
private var sound:Sound;
private var noiseSolo:Number = 0;
private var noiseBass:Number = 0;
private var now:int = 0;
private var hold:int = 0;
private var speed:int = 5;
private var soloArr:Array;
private var bassArr:Array;
public function StayTogether() {
// stay together for the kids
var str:String =
"d-4/d-4/d-4/a-4/d-4/d-4/f#4/d-4/" +
"c#4/d-4/c#4/a-4/c#4/d-4/f#4/d-4/" +
"b-3/d-4/b-3/f#4/b-3/d-4/g-4/d-4/" +
"a-3/e-4/a-3/f#4/g-4/f#4/e-4/d-4/" +
"d-4/d-4/d-4/a-4/d-4/d-4/f#4/d-4/" +
"c#4/d-4/c#4/a-4/c#4/d-4/f#4/d-4/" +
"b-3/d-4/b-3/f#4/b-3/d-4/g-4/d-4/" +
"a-3/e-4/a-3/f#4/g-4/f#4/e-4/d-4/" +
"d-4/d-4/d-5=/d-5/d-4/d-4/d-5=/d-5/d-4/d-4/d-5=/d-5/d-4/d-4/d-5=/d-5/" +
"c#4/c#4/d-5=/d-5/c#4/c#4/d-5=/d-5/c#4/c#4/d-5=/d-5/c#4/c#4/d-5=/d-5/" +
"a-3/a-3/d-5=/d-5/a-3/a-3/d-5=/d-5/a-3/a-3/d-5=/d-5/a-3/a-3/d-5=/d-5/" +
"a-3/a-3/e-5=/e-5/a-3/a-3/e-5=/e-5/a-3/a-3/c#5=/c#5/a-3/a-3/c#5=/c#5/" +
"d-4/d-4/d-5=/d-4/d-4/d-4/d-5=/d-4/d-4/d-4/d-5=/d-4/d-4/d-4/d-5=/d-4/" +
"c#4/c#4/d-5=/c#4/c#4/c#4/d-5=/c#4/c#4/c#4/d-5=/c#4/c#4/c#4/d-5=/c#4/" +
"a-3/a-3/d-5=/a-3/a-3/a-3/d-5=/a-3/a-3/a-3/d-5=/a-3/a-3/a-3/d-5=/a-3/" +
"a-3/a-3/e-5=/a-3/a-3/a-3/e-5=/a-3/a-3/a-3/c#5=/a-3/a-3/a-3/c#5=/a-3/" +
"d-4/d-4/d-4/d-4/d-4/d-4/d-4/d-4/d-4/d-4/d-4/d-4/d-4/d-4/d-4/d-4/" +
"c#4/c#4/c#4/c#4/c#4/c#4/c#4/c#4/c#4/c#4/c#4/c#4/c#4/c#4/b-3/c#4/" +
"d-4/d-4/d-4/d-4/d-4/d-4/d-4/d-4/d-4/d-4/d-4/d-4/d-4/d-4/d-4/d-4/" +
"c#4/c#4/c#4/c#4/c#4/c#4/c#4/c#4/c#4/c#4/c#4/c#4/c#4/c#4/b-3/c#4";
soloArr = notesToHertz(str);
// stay together for the kids
str =
"d-3/d-3/d-3/d-3/d-3/d-3/d-3/d-3/" +
"c#3/c#3/c#3/c#3/c#3/c#3/c#3/c#3/" +
"b-2/b-2/b-2/b-2/b-2/b-2/b-2/b-2/" +
"a-2/a-2/a-2/a-2/a-2/a-2/a-2/a-2/" +
"d-3/d-3/d-3/d-3/d-3/d-3/d-3/d-3/" +
"c#3/c#3/c#3/c#3/c#3/c#3/c#3/c#3/" +
"b-2/b-2/b-2/b-2/b-2/b-2/b-2/b-2/" +
"a-2/a-2/a-2/a-2/a-2/a-2/a-2/a-2/" +
"d-3/d-3/a-4=/a-4/d-3/d-3/a-4=/a-4/d-3/d-3/a-4=/a-4/d-3/d-3/a-4=/a-4/" +
"c#3/c#3/a-4=/a-4/c#3/c#3/a-4=/a-4/c#3/c#3/a-4=/a-4/c#3/c#3/a-4=/a-4/" +
"a-2/a-2/a-4=/a-4/a-2/a-2/a-4=/a-4/a-2/a-2/a-4=/a-4/a-2/a-2/a-4=/a-4/" +
"a-2/a-2/a-4=/a-4/a-2/a-2/a-4=/a-4/a-2/a-2/a-4=/a-4/a-2/a-2/a-4=/a-4/" +
"d-3/d-3/a-4=/d-3/d-3/d-3/a-4=/d-3/d-3/d-3/a-4=/d-3/d-3/d-3/a-4=/d-3/" +
"c#3/c#3/a-4=/c#3/c#3/c#3/a-4=/c#3/c#3/c#3/a-4=/c#3/c#3/c#3/a-4=/c#3/" +
"a-2/a-2/a-4=/a-2/a-2/a-2/a-4=/a-2/a-2/a-2/a-4=/a-2/a-2/a-2/a-4=/a-2/" +
"a-2/a-2/a-4=/a-2/a-2/a-2/a-4=/a-2/a-2/a-2/a-4=/a-2/a-2/a-2/a-4=/a-2/" +
"g-2/g-2/g-2/g-2/g-2/g-2/g-2/g-2/g-2/g-2/g-2/g-2/g-2/g-2/g-2/g-2/" +
"f#2/f#2/f#2/f#2/f#2/f#2/f#2/f#2/f#2/f#2/f#2/f#2/f#2/f#2/e-2/f#2/" +
"g-2/g-2/g-2/g-2/g-2/g-2/g-2/g-2/g-2/g-2/g-2/g-2/g-2/g-2/g-2/g-2/" +
"f#2/f#2/f#2/f#2/f#2/f#2/f#2/f#2/f#2/f#2/f#2/f#2/f#2/f#2/e-2/f#2";
bassArr = notesToHertz(str);
sound = new Sound();
sound.addEventListener(SampleDataEvent.SAMPLE_DATA, onCallback);
sound.play(0, 0, new SoundTransform(.25, -.1));
}
private function onCallback(e:SampleDataEvent):void {
var sample1:Number;
var sample2:Number;
var flag:Boolean = hold<speed-soloArr[now].short;
for (var i:uint=0; i<2048; i++){
noiseSolo += soloArr[now].hz;
sample1 = noiseSolo * Math.PI;
sample1 = Math.min(1, Math.tan(sample1));
noiseBass += bassArr[now].hz;
sample2 = noiseBass * Math.PI;
sample2 = Math.min(1, Math.tan(sample2));
if (!flag && i>=1024) {
sample1 = 0;
sample2 = 0;
}
e.data.writeFloat(sample1);
e.data.writeFloat(sample2);
}
hold++;
if (hold==speed) {
hold = 0;
now++;
now==soloArr.length ? now=0 : null;
}
}
private function notesToHertz(str:String):Array {
var str:String = str.toUpperCase();
var arr:Array = str.split("/");
for (var i:uint=0; i<arr.length; i++){
var a:Array = arr[i].split("");
var num:Number;
if (a[1] == "#") {
num = Notes[a[0]+"_"];
} else {
num = Notes[a[0]];
}
num = 2 + num + 12*Number(a[2]) - 12*6;
var hz:Number = Math.pow(2, num/12) * 440;
hz /= 44100;
var short:int;
if (a[3]=="=") short = 0;
else short = 1;
arr[i] = {hz:hz, short:short};
}
return arr;
}
}
}
Notes.as
package {
public class Notes {
public static const C:Number = 1;
public static const C_:Number = 2;
public static const D:Number = 3;
public static const D_:Number = 4;
public static const E:Number = 5;
public static const F:Number = 6;
public static const F_:Number = 7;
public static const G:Number = 8;
public static const G_:Number = 9;
public static const A:Number = 10;
public static const A_:Number = 11;
public static const B:Number = 12;
public function Notes() {}
}
}
public class Notes {
public static const C:Number = 1;
public static const C_:Number = 2;
public static const D:Number = 3;
public static const D_:Number = 4;
public static const E:Number = 5;
public static const F:Number = 6;
public static const F_:Number = 7;
public static const G:Number = 8;
public static const G_:Number = 9;
public static const A:Number = 10;
public static const A_:Number = 11;
public static const B:Number = 12;
public function Notes() {}
}
}
Комментариев пока нет
Ответить