suite a un message de "fabouney" qui me demandais comment faire un mixer audio avec pixel bender,
y'a une methode ici : http://www.kaouranti...xel-bender.html
malheureusement la compilation du pbj, est faite maison en cpp (d'ailleur porter ca sous alchemy ca serai le pied
donc voici, un ptit mixer 12 pistes, qui marche parfaitement, (bon le bargraph par sur j'ai fais tout de tete et sans "trace", mais ca c'est du bonus)
pour le code, et la source complète avec les samples (source ici)
Action Script
package
{
import flash.display.*;
import flash.media.*;
import flash.events.*;
import flash.net.*;
import flash.utils.*;
import fl.controls.Slider;
[SWF(width='500', height='380', frameRate='24')]
public class AudioMixer extends Sprite{
[Embed(source = "wikka/track01.mp3")] private var Track1:Class;
[Embed(source = "wikka/track02.mp3")] private var Track2:Class;
[Embed(source = "wikka/track03.mp3")] private var Track3:Class;
[Embed(source = "wikka/track04.mp3")] private var Track4:Class;
[Embed(source = "wikka/track05.mp3")] private var Track5:Class;
[Embed(source = "wikka/track06.mp3")] private var Track6:Class;
[Embed(source = "wikka/track07.mp3")] private var Track7:Class;
[Embed(source = "wikka/track08.mp3")] private var Track8:Class;
[Embed(source = "wikka/track09.mp3")] private var Track9:Class;
[Embed(source = "wikka/track10.mp3")] private var Track10:Class;
[Embed(source = "wikka/track11.mp3")] private var Track11:Class;
[Embed(source = "wikka/track12.mp3")] private var Track12:Class;
[Embed(source = "AudioMixerFilter.pbj",mimeType = "application/octet-stream")]
private var EmbedShader:Class;
private var shader:Shader = new Shader(new EmbedShader());
private var sound:Vector.<Sound> = new Vector.<Sound>();
private var bytes:Vector.<ByteArray> = new Vector.<ByteArray>();
private var sliders:Vector.<Slider> = new Vector.<Slider>();
private var graph:Vector.<Shape> = new Vector.<Shape>();
private var BUFFER_SIZE:int = 0x800;
public var playback:Sound = new Sound();
public var container:Sprite = new Sprite();
public function AudioMixer():void{
container.y = stage.stageHeight * .5;
addChild(container);
sound.push(new Track1(), new Track2(), new Track3(), new Track4(), new Track5(), new Track6(), new Track7(), new Track8(), new Track9(), new Track10(), new Track11(), new Track12());
for(var i:int = 0; i < sound.length; i++){
var slider:Slider = new Slider();
slider.maximum = 1;
slider.minimum = 0;
slider.snapInterval = 0.025;
slider.value = 0.8;
slider.rotation += -90;
slider.x = i * 40 + 25;
container.addChild(slider);
sliders.push(slider);
var line:Shape = new Shape();
line.graphics.lineStyle(1, 0x888888);
line.graphics.drawRect(i * 40 + 14, 0, 5, -80);
line.graphics.endFill();
container.addChild(line);
var shape:Shape = new Shape();
shape.graphics.beginFill(0x00cc00);
shape.graphics.drawRect(i * 40 + 15, 0, 3, -80);
shape.graphics.endFill();
container.addChild(shape);
graph.push(shape);
}
playback.addEventListener(SampleDataEvent.SAMPLE_DATA, onSoundData);
playback.play();
}
private function onSoundData(event:SampleDataEvent):void {
for(var i:int = 0; i < sound.length; i++){
bytes[i] = new ByteArray();
bytes[i].length = BUFFER_SIZE * 4 * 2;
sound[i].extract(bytes[i], BUFFER_SIZE);
var volume:Number = 0;
bytes[i].position = 0;
for(var j:int = 0; j < BUFFER_SIZE; j++){
volume += Math.abs(bytes[i].readFloat());
volume += Math.abs(bytes[i].readFloat());
}
volume = (volume / (BUFFER_SIZE * .5)) * sliders[i].value;
shader.data['track' + (i + 1)].width = BUFFER_SIZE / 1024;
shader.data['track' + (i + 1)].height = 512;
shader.data['track' + (i + 1)].input = bytes[i];
shader.data['vol' + (i + 1)].value = [sliders[i].value];
graph[i].scaleY = volume;
}
var shaderJob:ShaderJob = new ShaderJob(shader,event.data,BUFFER_SIZE / 1024,512);
shaderJob.start(true);
}
}
}
Action Script
<languageVersion : 1.0;>
kernel AudioMixerFilter
< namespace : "stealth";
vendor : "stealth";
version : 1;
description : "Audio mixer with 12 tracks";
>
{
input image4 track1;
input image4 track2;
input image4 track3;
input image4 track4;
input image4 track5;
input image4 track6;
input image4 track7;
input image4 track8;
input image4 track9;
input image4 track10;
input image4 track11;
input image4 track12;
parameter float vol1;
parameter float vol2;
parameter float vol3;
parameter float vol4;
parameter float vol5;
parameter float vol6;
parameter float vol7;
parameter float vol8;
parameter float vol9;
parameter float vol10;
parameter float vol11;
parameter float vol12;
output pixel4 dst;
void
evaluatePixel()
{
pixel4 tmp1 = sampleNearest(track1,outCoord()) * vol1;
pixel4 tmp2 = sampleNearest(track2,outCoord()) * vol2;
pixel4 tmp3 = sampleNearest(track3,outCoord()) * vol3;
pixel4 tmp4 = sampleNearest(track4,outCoord()) * vol4;
pixel4 tmp5 = sampleNearest(track5,outCoord()) * vol5;
pixel4 tmp6 = sampleNearest(track6,outCoord()) * vol6;
pixel4 tmp7 = sampleNearest(track7,outCoord()) * vol7;
pixel4 tmp8 = sampleNearest(track8,outCoord()) * vol8;
pixel4 tmp9 = sampleNearest(track9,outCoord()) * vol9;
pixel4 tmp10 = sampleNearest(track10,outCoord()) * vol10;
pixel4 tmp11 = sampleNearest(track11,outCoord()) * vol11;
pixel4 tmp12 = sampleNearest(track12,outCoord()) * vol12;
pixel4 tmp_out = tmp1 + tmp2 + tmp3 + tmp4 + tmp5 + tmp6 + tmp7 + tmp8 + tmp9 + tmp10 + tmp11 + tmp12;
dst = tmp_out;
}
}


Connexion
Inscription
Citer
