So, hab' mich mit dem Problem in den letzten Stunden mal auseinandergesetzt.

Das Ende vom Lied ist, daß es nichts mit den Aufnahmeroutinen zu tun hat, sondern mit dem Dateiformat mit dem geprüft wird.

Es werden float-Werte als .wav File geschrieben. Da scheinen aber die floats nicht identisch definiert zu sein. Inzwischen kann ich das recht leicht reproduzieren:

Erstelle ich den Inhalt des Aufnamespeichers manuell wie folgt, dann ist der Linke Kanal in Ordnung, der Rechte sieht aus wie Kraut-und-Rüben (i geht von 0 bis 8192)

Code:
audio_buffer->Left[i]  = ((float) (i%10)-5)*0.1 ;
audio_buffer->Right[i] = sin(i*3.1415926/180.0) ;
ändere ich dann wie folgt wird auch der Linke Kanal nicht mehr zu einer Sägezahnkurve.

Code:
audio_buffer->Left[i]  = ((float) (i%100)-50)*0.01 ;
audio_buffer->Right[i] = sin(i*3.1415926/180.0) ;
Meine Vermutung ist, daß die float Werte zwischen dem gcc und der Wave Datei nicht identisch definiert sind. Vermutlich unterschiedliche Grosse Mantissen.

Der Beschriebene Fehler scheint also nur bei der Erstellung der .wav Datei aufzutreten. Die aufgezeichneten Daten (innerhalb des Programms) sind m.E. korrekt.

Werde aber auch mal schauen, ob sich da noch etwas optimieren läßt.