2009-09-20 26 views
8

Sto cercando di creare un'applicazione di laboratorio di teoria musicale, in cui è possibile vedere la relazione grafica tra concetti di teoria musicale. Mi piacerebbe che fosse disponibile online, quindi mi vengono in mente Flash e Silverlight.Dynamic Audio Generation Actionscript 3

Ma mi piacerebbe generare dinamicamente toni e accordi ecc. Dall'input dell'utente. Questo è qualcosa che conosco è un'area molto sottosviluppata in Flash Player. Quindi la mia domanda è qual è lo stato attuale delle funzionalità per la generazione di audio dinamico su entrambi i lettori Flash e Silverlight?

risposta

0

Quindi sembra che da Silverlight e Flash, Flash abbia battuto Silverlight su funzionalità di generazione audio dinamica (che mi ha sorpreso considerando il supporto audio di base in Flash). Sembra che Silverlight non sia in grado di generare audio dinamico e Flash può farlo solo ufficialmente dalla versione 10 del player.

Sono in grado di trovare pochissime informazioni sul futuro dell'audio dinamico su entrambe le piattaforme, ma Flash ha le discussioni più attive al momento.

1

Ci sono modi per farlo che coinvolgono un bel po 'di hacking. Non mi ricordo la meccanica esatta, ma si potrebbe dare un'occhiata a (o usare) le librerie di streaming esistenti come StandingWave: http://code.google.com/p/standingwave/ o la roba a Popforge: http://code.google.com/p/popforge/

Può si spera dare più informazioni di quelle che posso giusto qui. :)

+0

@Dentoid Grazie per i link darò loro un'occhiata e vedrò cosa possono fare per me –

3

Da Flash Player 10 in poi non è necessario eseguire operazioni di tipo hacky. C'è un'API per generare il suono in modo dinamico.

Questo blog post has a quick introduction. Il suo codice legge i campioni da un mp3, ma puoi scrivere campioni come preferisci.

Come sempre the docs hanno anche molte informazioni, insieme a questo esempio di codice che dovrebbe farti andare abbastanza velocemente.

var mySound:Sound = new Sound(); 
function sineWaveGenerator(event:SampleDataEvent):void { 
    for (var c:int=0; c<8192; c++) { 
     event.data.writeFloat(Math.sin((Number(c+event.position)/Math.PI/2))*0.25); 
     event.data.writeFloat(Math.sin((Number(c+event.position)/Math.PI/2))*0.25); 
    } 
} 

mySound.addEventListener(SampleDataEvent.SAMPLE_DATA,sineWaveGenerator); 
mySound.play(); 
+1

Puoi anche trovare molti codici sorgente e campioni interessanti su http://lab.andre-michelle.com/ – speps

Problemi correlati