Anzeige

Wiedergabe eines Tones mit einstellbarer Frequenz


3dsmaxer

Erfahrenes Mitglied
#1
Hallo,
ich möchte in Flash ein kleines Programm schreiben, das einen Ton wiedergibt, dessen Frequenz man mit einem Slider einstellen kann.

Den Ton erzeuge ich folgendermaßen:
Code:
var ton:Sound = new Sound();

function tonerzeuger(event:SampleDataEvent):void{
	for (var k:int=0; k<14700; k++){
		event.data.writeFloat( Math.sin(2*Math.PI*frequenz*(event.position+k)/44100));
		}
}

ton.addEventListener(SampleDataEvent.SAMPLE_DATA,tonerzeuger);
		ton.play();
Leider kann man keinen Ton mit 44100 Samples erzeugen, weswegen beim Abspielen es zu "Knaxern" kommt. Kennt da jemand ne gute Methode um das zu beseitigen?
 

3dsmaxer

Erfahrenes Mitglied
#2
Ich denke ich weiß nun woran es liegen könnte.
Man muss sicherstellen, dass in den samples ganzzahlig-vielfache Schwingungen enthalten sind. Ich habe versucht das ganze folgendermaßen umzusetzen:

Code:
function tonerzeuger(event:SampleDataEvent):void{
	for (var k:int=0; k<int(44100*100/frequenz); k++){
		event.data.writeFloat( Math.sin(2*Math.PI*frequenz*(event.position+k)/44100));
		}
}
Solange ich die Frequenz nicht ändere, funktioniert das auch ohne Probleme, wenn ich sie allerdings ändere kommt:
RangeError: Error #2004: One of the parameters is invalid.
 

Jens B.

Damn good coffee!
#3
Welchen Wert hat denn die frequenz wenn es funktioniert? Ich tippe mal auf Rundungsfehler ... evtl. mal das int() durch Math.floor oder Math.ceil ersetzen.
 

3dsmaxer

Erfahrenes Mitglied
#4
Es ist abhängig von der Sampleanzahl. Bei 10022 Samples funktioniert z.B. n*440Hz, also 440, 880...
floor oder ceil hat an dem invalid parameter-Problem nichts geändert.
 
Anzeige

Neue Beiträge

Anzeige