Sinusgenerator, was mache ich hier falsch?



  • Ich bastel mir gerade einen Sinusgenerator zur Klangsynthese.
    Funtioniert auch alles soweit ganz gut, nur dass ich keine saubere Sinuswelle hinbekomme. Ich hab mal einen 100 Hz Ton erzeugt und ihn mit einem Audioprog aufgenommen, die Welle sieht dann so aus:

    http://img339.imageshack.us/img339/1500/waves.gif

    Das liegt nicht an der Aufnahme, der Ton hört sich auch nicht nach original 100Hz an.

    Hier ist die Funktion die meinen Audiopuffer mit den Samples füllt:

    int Wave::MakeSine()
    {
    	float	t;			// Periodendauer
    	int		c	= 0;
    
    	while(c < BUFFER_SIZE)
    	{
    		// rechter Kanal:
    		t = (float)sine_count / (float)wfx.nSamplesPerSec;
    
    		buffer[c] = (char)synth_dat[P_LEFT].amplitude * sin(2.0f * PI * synth_dat[P_LEFT].frequency * t);
    		c++;
    		sine_count++;
    
    		t = (float)sine_count / (float)wfx.nSamplesPerSec;
    		buffer[c] = (char)synth_dat[P_LEFT].amplitude * sin(2.0f * PI * synth_dat[P_LEFT].frequency * t);
    		c++;
    		sine_count++;
    
    		// linker Kanal:
    		t = (float)sine_count / (float)wfx.nSamplesPerSec;
    		buffer[c] = (char)synth_dat[P_RIGHT].amplitude * sin(2.0f * PI * synth_dat[P_RIGHT].frequency * t);
    		c++;
    		sine_count++;
    
    		t = (float)sine_count / (float)wfx.nSamplesPerSec;
    		buffer[c] = (char)synth_dat[P_RIGHT].amplitude * sin(2.0f * PI * synth_dat[P_RIGHT].frequency * t);
    		c++;
    		sine_count++;
    
        }
    
    	return 0;
    }
    

    Wie Ihr seht können 2 seperate Signale auf dem linken & rechten Kanal erzeugt werden, das haut im Prinziep auch alles hin. Auch mit anderen Frequenzen, nur is halt die Welle nie "sauber".
    Ich versteh nicht was ich falsch mache, ich hoffe mir kann jemand helfen.



  • Ich verstehe überhaupt nicht warum du die Berechnung pro Kanal zweimal durchführst (und trotzdem für den jeweiligen die Zeit weiterlaufen lässt)? Ich verstehe auch nicht warum du alle berechneten Bytes in ein und dasselbe array packst? Edit: Bist du dir sicher, dass was auch immer deinen Buffer bekommt das so auch haben will?



  • sieht aus als ob die Kurve den WErtebereich -32768...0...+32767 vollkommen übersteuert. Reduzier mal die Amplitude.




Anmelden zum Antworten