首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Voice API通过华为3g调制解调器拨打电话?

如何使用Voice API通过华为3g调制解调器拨打电话?
EN

Stack Overflow用户
提问于 2011-12-03 21:08:26
回答 1查看 10.7K关注 0票数 6

像我的(E1752)这样的一些华为3g调制解调器可以拨打和接听电话。我相信船上有PCM通道,可以在拨打或接听电话时使用,但我没有更多关于这方面的信息。

我正在使用他们的应用程序,称为移动合作伙伴,这是一个相当完整的应用程序,支持拨打和接听电话。但我想建立我自己的应用程序,将在Mac OS X上运行。但我无法找到任何详细说明语音API和板载PCM通道的文档。如果有人知道这一点,请让我知道。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-12-15 03:22:41

语音实现如下:-您的Modem寄存器总共5个devices.The音频通过名为“华为移动连接-应用程序接口”的串口发送。

语音(输入|输出)数据格式:

代码语言:javascript
复制
  wFormatTag = WAVE_FORMAT_PCM;
  nChannels = 1;
  nSamplesPerSec = 8000;
  nAvgBytesPerSec = 16000;
  nBlockAlign = 2;
  wBitsPerSample = 16;
  cbSize = 0;

ReadFile或WriteFile操作(用于COM端口)中的语音数据块大小必须以320字节为单位设置。在每次ReadFile之后,必须执行WriteFile操作(在其他选择中,缓冲区将溢出,调制解调器将在一段时间后重新启动)。示例:

代码语言:javascript
复制
//   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:我希望wave in|out操作对您来说不是问题。

PS2:对不起,我的英语很差,我来自乌克兰。

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8367864

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档