Stereo Audio-Buffer
-
Hallo zusammen erstmal!
Ich war mir nicht ganz sicher in welches Forum ich am besten posten sollte,
hab mich aber dann für dieses entschieden da ich ja auch mit WinAPI-Funktionen
arbeite (waveOutXXX)Ich arbeite an einem kleinen Frequenzgenerator der soweit auch prima funzt,
hab nur 1 kleines Problem:
Ich öffne das Wave-Out-Device im "stereo-modus", meine WAVEFORMATEX Struktur
sieht so aus:wfx.wFormatTag = WAVE_FORMAT_PCM; wfx.nSamplesPerSec = 44100L; wfx.wBitsPerSample = 16; wfx.nChannels = 2; wfx.nBlockAlign = (wfx.wBitsPerSample * wfx.nChannels) / 8; wfx.nAvgBytesPerSec = wfx.nBlockAlign * wfx.nSamplesPerSec; wfx.cbSize = 0;
Dann generiere ich einen Ton anhand einer eingegebenen Frequenz:
int MakeSine(char *buffer, int size) { sample s; float amplitude = 100.0f; float frequency = 300.0f; char tmp[20]; GetWindowText(freq, tmp, 80); frequency = atof(tmp); for(int c = 0; c < size; c++) { s.x = (amplitude * sin(0.5f * PI * frequency * float(i) / (float)wfx.nSamplesPerSec)); buffer[c] = (char)s.x; i++; } return 0; }
typedef struct { short int x; }sample;
Das haut auch wunderbar hin, bloss ich höre nun auf beiten Kanälen den selben Ton, ich würde aber gern auf jedem Kanal einen anderen Ton haben z.B. links 100Hz und rechts 500Hz!
Kann mir jemand weiterhelfen?
-
sind die beiden kanäle nicht einfach verschränkt?
int makeSines(sample* buf,int size,double frequency1,double frequency2) {//size ist die anzahl der samples, nicht bytes. for(int i=0;i!=size;++i) { buf[i].x=amplitude*sin(...frequency1...); buf[i].y=amplitude*sin(...frequency2...); } return 0; } struct sample { short x; short y; };
-
Danke für deine Hilfe, jetzt hauts hin!