Голос реализован следующим образом: - Ваш модем регистрирует всего 5 устройств. Звук передается через последовательный порт с именем «Huawei Mobile Connect - Application Interface».
Формат голосовых (in | out) данных:
wFormatTag = WAVE_FORMAT_PCM;
nChannels = 1;
nSamplesPerSec = 8000;
nAvgBytesPerSec = 16000;
nBlockAlign = 2;
wBitsPerSample = 16;
cbSize = 0;
Размер блока голосовых данных в операциях ReadFile или WriteFile (для COM-порта) должен быть установлен в 320 байты.После каждого ReadFile должна быть операция WriteFile (в других выбранных буферах будет переполнение и через некоторое время модем будет перезагружен).Образец:
// BlockSize - size of buff for wave in|out operations (in my case 320*4 bytes)
while (!bAllRead) {
if (cInfo->hCom == INVALID_HANDLE_VALUE) {
SetVoiceClosed(cInfo);//exit from thread
return 0;
}
BOOL isRead = ReadFile(cInfo->hCom, cInfo->Header[counter].lpData + currBlocLength, 320, &nActualRead, &cInfo->o);
if (isRead || (GetLastError() == ERROR_IO_PENDING && GetOverlappedResult(cInfo->hCom, &cInfo->o, &nActualRead, TRUE))) {
if (nActualRead > 0) {
// обратка
nActualWrite = 0;
int nActualWriteAll = 0;
BOOL isWrite = WriteFile(cInfo->hCom, CurrBuffPtr + currBlocLength, nActualRead, &nActualWrite, &cInfo->oVoiceOut);
while (isWrite || (GetLastError() == ERROR_IO_PENDING && GetOverlappedResult(cInfo->hCom, &cInfo->oVoiceOut, &nActualWrite, TRUE))) {
nActualWriteAll += nActualWrite;
if (nActualWriteAll >= nActualRead)
break;
}
currBlocLength += nActualRead;
if (currBlocLength >= BlockSize)
bAllRead = true;
}
else {
Sleep(25);// wait for voice data (resync)
PurgeComm(cInfo->hCom, PURGE_TXABORT | PURGE_RXABORT | PURGE_TXCLEAR | PURGE_RXCLEAR);
}
}
else {
bAllRead = true;// there are no active call
PurgeComm(cInfo->hCom, PURGE_TXABORT | PURGE_RXABORT | PURGE_TXCLEAR | PURGE_RXCLEAR);
}
}
Как то так))).Я не нахожу никакой полезной информации в Интернете, поэтому все эти рекомендации основаны на моих экспериментах.Я надеюсь, что это было полезно.
PS: Я надеюсь, что операции с выходом волны не будут для вас проблемой.
PS2: Извините за мой английский, я из Украины.