Wiedergabe eines Tones mit einstellbarer Frequenz


3dsmaxer

Erfahrenes Mitglied
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
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.

Erfahrenes Mitglied
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
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.