1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

Wiedergabe eines Tones mit einstellbarer Frequenz

Dieses Thema im Forum "Flash Plattform" wurde erstellt von 3dsmaxer, 20. Januar 2012.

  1. 3dsmaxer

    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 (Text):
    1. var ton:Sound = new Sound();
    2.  
    3. function tonerzeuger(event:SampleDataEvent):void{
    4.     for (var k:int=0; k<14700; k++){
    5.         event.data.writeFloat( Math.sin(2*Math.PI*frequenz*(event.position+k)/44100));
    6.         }
    7. }
    8.  
    9. ton.addEventListener(SampleDataEvent.SAMPLE_DATA,tonerzeuger);
    10.         ton.play();
    11.  
    12.  
    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?
     
  2. 3dsmaxer

    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 (Text):
    1. function tonerzeuger(event:SampleDataEvent):void{
    2.     for (var k:int=0; k<int(44100*100/frequenz); k++){
    3.         event.data.writeFloat( Math.sin(2*Math.PI*frequenz*(event.position+k)/44100));
    4.         }
    5. }
    Solange ich die Frequenz nicht ändere, funktioniert das auch ohne Probleme, wenn ich sie allerdings ändere kommt:
     
  3. Jens B.

    Jens B. Damn good coffee!

    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.
     
  4. 3dsmaxer

    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.
     
Die Seite wird geladen...