Hi,
ich experimentiere gerade mit der Windows Multimedia APi im M2 Client.
Ziel ist es Voice Messages verschicken zu können, im 2. Schritt dann Ingame Voice Chat.
Der erste Teil klappt schon ganz gut, bis auf die Tatsache dass der Client einfriert während eine "Sprachnachricht" aufgenommen wird.
Ich habe das ganze erstmal so konfiguriert, dass das Mikrofon für 10 Sekunden abgehört wird. Während dieser 10 Sekunden ist dann aber auch der Client tot.
Nach der angegeben Zeit wird dann das Gesprochene verarbeitet.
Idealerweise würde ich gerne die CTimer Klasse als Eventhandler benutzen:
- StartVoiceRecording
- Async await (CTimer) 10 sec
- StopVoiceRecording
- Processing
Das wäre meine Idealvorstellung. Während meines prototypes habe ich einfach eine do ... while Schleife eingebunden.
Hat jemand eine Idee?
Code
- // Insert a wave input buffer
- result = waveInAddBuffer(hWaveIn, &WaveInHdr, sizeof(WAVEHDR));
- if (result == 0)
- {
- // Commence sampling input
- result = waveInStart(hWaveIn);
- if (result == 0)
- {
- // Wait until finished recording
- // 'timer' is set by WaveInHdr bufferLenght / 2
- do {} while (waveInUnprepareHeader(hWaveIn, &WaveInHdr, sizeof(WAVEHDR)) == WAVERR_STILLPLAYING);
- waveInClose(hWaveIn);
- //todo: move to "StopRecordVoice" which is triggered after 10 sec. elapsed
- waveOutOpen(&hWaveOut, WAVE_MAPPER, &pFormat, 0, 0, CALLBACK_NULL);
- waveOutPrepareHeader(hWaveOut, &WaveInHdr, sizeof(WaveInHdr));
- waveOutWrite(hWaveOut, &WaveInHdr, sizeof(WaveInHdr));
- do {} while (!(WaveInHdr.dwFlags & WHDR_DONE)); // -> async/MessageQueue
- waveOutUnprepareHeader(hWaveOut, &WaveInHdr, sizeof(WaveInHdr));
- waveOutClose(hWaveOut);
- }
- }