Sinus Bau...

tomovic

Bekanntes Mitglied
hallo,
mein Ziel ist: Ein Buffer zu bauen mit 2 Frequenzen, sprich eine Priode mit 8 kHz und eine mit 10 kHz.

PHP:
    int buffzz =  0 ;
        int maxVol = 127;
        int wavelengths = 20;
        int intFPW = 8000;
        int intFPW_two = 10000;
        byte[] buf = new byte[(2*intFPW*wavelengths) +(2*intFPW_two*wavelengths) ];
        int i;
        for(i = 0; i<intFPW*wavelengths; i++)
        {
            double angle = ((float)(i*2)/((float)intFPW))*(Math.PI);
                buf[i*2]= (new Integer((int)Math.round(Math.sin(angle)*maxVol))).byteValue();  
                buffzz = i;
           
        }
        
        for(i = buffzz; i<(intFPW_two*wavelengths) + (intFPW*wavelengths); i++)
        {
            double angle = ((float)(i*2)/((float)intFPW_two))*(Math.PI);
                buf[i*2]= (new Integer((int)Math.round(Math.sin(angle)*maxVol))).byteValue();  
          
           
        }

Das Original mit einer Sinus Periode, das geht:
PHP:
        int wavelengths = 20;
        byte[] buf = new byte[2*intFPW*wavelengths];
        int maxVol = 127;
        for(int i=0; i<intFPW*wavelengths; i++){
            double angle = ((float)(i*2)/((float)intFPW))*(Math.PI);

                buf[i*2]= (new Integer((int)Math.round(Math.sin(angle)*maxVol))).byteValue();
        }
 

Gucky

Top Contributor
Was funktioniert nicht?
Was passiert stattdessen?
Wie hast du es bisher versucht?
Woran könnte es liegen?
Warum benutzt du die php-Tags? :D
 

tomovic

Bekanntes Mitglied
Was funktioniert nicht?
-ich höre nichts auf den Lautsprecher :-( mit dem Original schon.

Was passiert stattdessen?
-Original = 10 kHz
-meine Version: 10 kHz und 8 kHz abwechseln

Wie hast du es bisher versucht?
-Mehrere Stunden lang eine 2te Schleife aufzubauen. Erst eine Periode mit 10 kHz dann eine mit 8 kHz.

Woran könnte es liegen?
-An meiner Erfahrung mit Java oder ich mache einen Denkfehler

Warum benutzt du die php-Tags? :D
-Weil ich nicht die Java Tasse gesehen habe
 

tomovic

Bekanntes Mitglied
erst mal thx.
habe die Lösung:
Java:
    for(int i=0; i<intFPW*wavelengths; i++){
            double angle = ((float)(i*2)/((float)intFPW))*(Math.PI);

                buf[i*2]= (new Integer((int)Math.round(Math.sin(angle)*maxVol))).byteValue();
  
                frequency.setText( intFPW + " xx/T\nxxxHz" );           
        }
        wavelengths = 20;
        for(int i=20; i<100*wavelengths; i++){
            double angle = ((float)(i*2)/((float)100))*(Math.PI);
                buf[i*2]= (new Integer((int)Math.round(Math.sin(angle)*maxVol))).byteValue();          
        }

intFPW <---- ist nicht die Frequenz 10 kHz sondern der Reglerwert.

Buffer 1.Teil der Reglerwert
Buffer 2.Teil fester Wert 100 Reglnermitte.

Der nächste Schritt wäre rauschen?
hmmmm??? per Zufallsgerator verschiedene Sinusperioden erstellen und auf die API geben ? Oder nicht ?
 

tomovic

Bekanntes Mitglied
... ich habe eine Nacht darüber geschlafen und dachte ich wäre am Ziel...
Java:
 int intSR = 190000;
        //int intFPW = framesPerWavelength.getValue();[B] // Original !!![/B]
        int intFPW = 19+ (int) (Math.random()*40); // [B]Zufallszahl von 19 bis 40 meine Idee[/B]

        float sampleRate = (float)intSR;

        // oddly, the sound does not loop well for less than around 5 or so, wavelengths
        int wavelengths = 20;
        byte[] buf = new byte[2*intFPW*wavelengths];
        AudioFormat af = new AudioFormat(
            sampleRate,
            8,  // sample size in bits
            2,  // channels
            true,  // signed
            false  // bigendian
            );
        wavelengths = 20;
        int maxVol = 127;
        
        
        
        for(int i=0; i<intFPW*wavelengths; i++){
            double angle = ((float)(i*2)/((float)intFPW))*(Math.PI);

                buf[i*2]= (new Integer((int)Math.round(Math.sin(angle)*maxVol))).byteValue();
  
                frequency.setText( intFPW + " xx/T\nxxxHz" );           
        }


Meine Idee war:
Per Zufallsgenerator erzeige ich Reglerwerte zwieschen 19 und 20, umgerechnet 11 kHz und 12 kHz.

AAAAAAAAHHHHHHHHHH !!!!!!!! ;(;(;(;(
Sobald ich den Regler verändere wird eine Zahl gewürfelt und per "test Ton" klick höre ich NUR die z.B. 11,3 KHz eine Frequenz mehr nicht.

Ich will aber den "test Ton" Buttion anklicken und Töne zwieschen 11 kHz und 12 kHz hören. Sozusagen leicht verrauscht.Hat jemand eine Idee ?
Clip wird doch nicht gepuffert.
 

eMmiE

Bekanntes Mitglied
Bau ne Schleife drum rum und spiel immer mal wieder (in der Schleife ein Thread.sleep(), was sich aber nicht auf die Tonausgabe auswirkt) einen Ton ab.

Du erzeugst Zufallszahlen von 19 bis 59!
 

Ähnliche Java Themen

Neue Themen


Oben