?
Guten Tag,
ich bin dabei ein einfachen p2p Audiochat zu schreiben.
Bevor ich aber erst meine Fragen stelle,
hier der Code in auszügen (erst nur der 'Sender'):
HWAVEIN hWaveIn;
WAVEHDR WaveHdrIn[AUDIOBUFS];
BYTE BufferIn[AUDIOBUFS][BUFSIZE];
// blabla ...
WAVEHDR *Hdr = (WAVEHDR *) Msg.lParam;
// blabla ...
waveInAddBuffer(hWaveIn, Hdr, sizeof(*Hdr));
// blabla ...
WAVEFORMATEX waveform;
HANDLE WaveInThreadHandle;
DWORD WaveInThreadId;
// blabla ...
// Init Audio
waveform.nChannels = AUDIOCHANNELS;
waveform.wBitsPerSample = 8;
waveform.nAvgBytesPerSec = AUDIOSPEED * waveform.nChannels * waveform.wBitsPerSample / 8;
waveform.wFormatTag = AUDIOFORMAT;
waveform.nSamplesPerSec = AUDIOSPEED;
waveform.nBlockAlign = 1;
waveform.cbSize = 0;
WaveInThreadHandle = CreateThread(NULL, 0, WaveInThread, NULL, 0, &WaveInThreadId);
winexit_if(NULL == WaveInThreadHandle, hWnd, "CreateThread failed");
rv = waveInOpen(&hWaveIn, WAVE_MAPPER, &waveform, (DWORD)WaveInThreadId,0,CALLBACK_THREAD);
winexit_if(rv != MMSYSERR_NOERROR, hWnd, "waveInOpen failed f");
for (i = 0; i < AUDIOBUFS; ++i) {
WaveHdrIn[i].lpData = BufferIn[i];
WaveHdrIn[i].dwBufferLength = sizeof(BufferIn[0]);
WaveHdrIn[i].dwBytesRecorded = 0;
WaveHdrIn[i].dwUser = 0;
WaveHdrIn[i].dwFlags = 0;
WaveHdrIn[i].dwLoops = 0;
WaveHdrIn[i].lpNext = NULL;
WaveHdrIn[i].reserved = 0;
waveInPrepareHeader(hWaveIn, WaveHdrIn + i, sizeof(WaveHdrIn[0]));
waveInAddBuffer(hWaveIn, WaveHdrIn + i, sizeof(WaveHdrIn[0]));
}
waveInStart(hWaveIn); // starte Aufnahme
// blabla ...
Wie ihr seht, arbeite ich mit der WinAPI (waveIn... uns so).
Da ich nun aber auf Grund verschiedener Vorteile zu Ogg Speex wechseln will, brauch ich eure hilfe.
Speex: http://www.speex.org/
So. Erst dachte ich ... hmm. Frag doch mal wie ich das Codetechnisch umsetzen soll, aber ich merke gerade, dass ich nicht weiß, ob meine Lösung gut wäre.
Zwei Ansätze gibt es schließlich:
Ich arbeite die ganze Zeit mit wave nur kurz vor dem versand encode ich es in ogg speex.
schon der Buffer der Aufnahme ist in legt alles für ogg aus.
Vorteil in meinen Augen bei 1 wäre, dass es einfacher wäre. Nachteil die verwendung der ganzen Ressourcen. Ich brauche bei ogg die header daten nicht die bei wave dabei sind. Ich wüsste hier nicht wie ich ein Encoder gestallten soll.
Bei 2 sähe ich nur den Nachteil, dass ich garkein Plan habe (bei 1 kenn ich zwar die funktionen, verstehe aber das 'zusammenspiel' nicht). Bei 2 nicht mal ne vorstellung der Lösung.
Naja, daher auch dieses Thema.
Ich hoffe, ihr könnt helfen.