# Sinusgenerator für eine Hp



## tomovic (24. Nov 2013)

hallo,
mein neues Projekt ist, einen Sinusgenerator zu erstellen, den man über einen HP bedienen läst?
Mit welchen Schlagwörtern sollte ich googlen? Oder kann mir jemand ein Beispiel machen?


----------



## rme (24. Nov 2013)

Hallo,

wie soll die Schwingung denn dargestellt werden? Ich nehme mal an, du meinst akustisch.

Dann könntest du die Sound-API von Java benutzen. Du musst dir prinzipiell einen PCM-Buffer anlegen, den mit deinen berechneten Daten füllen und dann abspielen. Hier ist ein Beispiel (die akzeptierte Antwort dort):

python - Java raw audio output - Stack Overflow


----------



## tomovic (24. Nov 2013)

hallo,
ich habe bis jetzt ( 10 Jahre )  immer in c/c++ geproggt. Ich muss erstmal eclipse installieren.
Das Beispiel ist reine akustik, richtig?


----------



## rme (24. Nov 2013)

Ja. Was genau hast du denn vor? Wolltest du ein Applet machen, das den Zusammenhang zwischen visueller und akustischer Schwingung verdeutlicht?

Wenn du eh eine neue Sprache dafür lernen musst, würde ich dir eher zu JavaScript statt Java raten - denn Applets gelten offiziell als veraltet (wurden durch WebStart abgelöst) und die Mehrheit der Nutzer hat deshalb gar kein Java mehr im Browser.


----------



## tomovic (24. Nov 2013)

mega thx.
Es geht mir erstmal nur, einen Regler zu haben mit ich die Frequenz und Amplitute verändern kann.
und das alles über einer Hp darstellen. Dann bin ich überglücklich !!! Das läuft vielleicht auf ein Patent raus.  

JDK und Eclipse habe ich installiert.
Ich muss mich erstmal schlau machen, was ein Javascript und Java ist


----------



## tomovic (24. Nov 2013)

....
Teil 2
ich sattle gerne das Pferd von hinten auf.
Welchen Quellcode von deinem Link muss ich in Eclipse einfügen? ODER was mache ich mit dem 2ten Quellcode ?
Sobald das Projekt 1 zu 1 läuft, werde ich jede Zeile nachgehen und lernen was was ist.
Den Rest bekomme ich dann selber hin.


----------



## rme (24. Nov 2013)

Das, was die Überschrift Beeper.java hat, in eine Datei mit genau diesem Namen kopieren.


----------



## tomovic (25. Nov 2013)

thx für den Tip. Sorry ich stehe voll auf dem Schlauch. Was soll ich kopieren?


----------



## tomovic (16. Mrz 2014)

aus Zeitgründen musste ich das Projekt aus Eis legen.
Der link von oben habe ich ausprobiert in Eclipse, funkt ganz gut.


```
/** Generates a tone, and assigns it to the Clip. */
public void generateTone()
    throws LineUnavailableException {
    if ( clip!=null ) {
        clip.stop();
        clip.close();
    } else {
        clip = AudioSystem.getClip();
    }
    boolean addHarmonic = harmonic.isSelected();

    int intSR = ((Integer)sampleRate.getSelectedItem()).intValue(); // <---- meine Frequnz
    int intFPW = framesPerWavelength.getValue(); // <---- meine Bitrate

    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
        );

    int maxVol = 127;
    for(int i=0; i<intFPW*wavelengths; i++){
        double angle = ((float)(i*2)/((float)intFPW))*(Math.PI);
        buf[i*2]=getByteValue(angle);
        if(addHarmonic) {
            buf[(i*2)+1]=getByteValue(2*angle);
        } else {
            buf[(i*2)+1] = buf[i*2];
        }
    }

    try {
        byte[] b = buf;
        AudioInputStream ais = new AudioInputStream(
            new ByteArrayInputStream(b),
            af,
            buf.length/2 );

        clip.open( ais );
    } catch(Exception e) {
        e.printStackTrace();
    }
```


Ok ich verstehe den Code und kann ein bischen java, das ist nicht das Problem.

Es wird  eine Periode mit einer Spannung und einen Frequenz, soweit kein Problem.Mein Ziel ist jetzt, dass ich ein Ton erzeuge der in 10 sek von 1 kHz bis 10 kHz hoch läuft.

Meine Idee ist jetzt: Ich erstelle ein  Buffer dass eine Sek. 1 kHz hat, dann für eine Sek 2kHz...
Gibt es einen besseren Weg?


----------

