tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
3
ZUGRIFFE
939
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    3dsmaxer 3dsmaxer ist offline Mitglied Gold
    Registriert seit
    Jan 2002
    Ort
    hinterm mond
    Beiträge
    159
    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 :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
    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?
     

  2. #2
    3dsmaxer 3dsmaxer ist offline Mitglied Gold
    Registriert seit
    Jan 2002
    Ort
    hinterm mond
    Beiträge
    159
    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 :
    1
    2
    3
    4
    5
    
    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.
     

  3. #3
    Avatar von Jens B.
    Jens B. Jens B. ist offline Damn good coffee!
    tutorials.de Premium-User
    Registriert seit
    Nov 2001
    Beiträge
    2.477
    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. #4
    3dsmaxer 3dsmaxer ist offline Mitglied Gold
    Registriert seit
    Jan 2002
    Ort
    hinterm mond
    Beiträge
    159
    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.
     

Ähnliche Themen

  1. CPU Frequenz auslesen
    Von muater im Forum .NET Café
    Antworten: 0
    Letzter Beitrag: 13.03.09, 14:23
  2. Wie stelle ich die CPU Frequenz ein?
    Von alphadog im Forum Hardware
    Antworten: 5
    Letzter Beitrag: 01.02.09, 01:07
  3. frequenz der worte
    Von shysdrag im Forum C/C++
    Antworten: 1
    Letzter Beitrag: 23.12.05, 16:55
  4. Videoquelle durch Wiedergabe eines Videos simulieren
    Von Veränderung im Forum Videoschnitt, Videotechnik & -produktion
    Antworten: 0
    Letzter Beitrag: 02.05.05, 19:33
  5. Antworten: 1
    Letzter Beitrag: 19.01.05, 08:35