linux采集语音传输给windows播放发出“嘟嘟嘟”华为手机设置语音设置 。参数设置求助!
linux采集语音:
#include <unistd.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/ioctl.h>
#include <stdlib.h>
#include <stdio.h>
#include <linux/soundcard.h>
#define LENGTH 3 /* 存储秒数 */
#define RATE 8000 /* 采样频率 */
#define SIZE 8 /* 量化位数 */
#define CHANNELS 1 /* 声道数目 */
read(fd, buf, sizeof(buf));
生成的pcm数据华为手机设置语音设置 。经过socket传输后。windows接收。
windows 将这些pcm数据写入声卡:
//检查设备
if(!waveInGetNumDevs())
MessageBeep(MB_OK);
MessageBox("找不到语音input设备华为手机设置语音设置 !");
return FALSE;
if(!waveOutGetNumDevs())
MessageBeep(MB_OK);
MessageBox("找不到语音 output 设备华为手机设置语音设置 !");
return FALSE;
//Format of voice: 16 bits,11.025kHz,mono audio
pcm.wf.wFormatTag =WAVE_FORMAT_PCM; //格式为PCM
pcm.wf.nChannels =1; //单声道 mono
pcm.wf.nSamplesPerSec =8000; //采样率
pcm.wf.nAvgBytesPerSec =8000*2; //数据率
pcm.wf.nBlockAlign =1; //每样点的字节数
pcm.wBitsPerSample =8; //采样精度
pWaveOutHdr =(LPWAVEHDR)GlobalAllocPtr(GHND|GMEM_SHARE,sizeof(WAVEHDR));
pWaveHdr1 =(LPWAVEHDR)GlobalAllocPtr(GHND|GMEM_SHARE,sizeof(WAVEHDR));
pWaveHdr2 =(LPWAVEHDR)GlobalAllocPtr(GHND|GMEM_SHARE,sizeof(WAVEHDR));
//放音缓冲区
pOutBuffer1 =(char *)GlobalAllocPtr(GHND|GMEM_SHARE,PCMBUFFER_SIZE*BLOCK_PER_BUFFER+500);
pOutBuffer2 =(char *)GlobalAllocPtr(GHND|GMEM_SHARE,PCMBUFFER_SIZE*BLOCK_PER_BUFFER+500);
//接收缓冲区
rBuffer =(char *)GlobalAllocPtr(GHND|GMEM_SHARE,PCMBUFFER_SIZE);
m_PlayFirst=TRUE;
return TRUE; // return TRUE unless you set the focus to a control
这是一部分代码华为手机设置语音设置 。现在是linux下面说话,windows那边播放,但是windows播放出“嘟嘟”的声音,播放的声音完全失真了,不断地类似于“次次次”的声音。求高手解答。
是不是linux采集成pcm的参数:
#define LENGTH 3 /* 存储秒数 */
#define RATE 8000 /* 采样频率 */
#define SIZE 8 /* 量化位数 */
#define CHANNELS 1 /* 声道数目 */
和windows写入pcm的参数:
//Format of voice: 16 bits,11.025kHz,mono audio
pcm.wf.wFormatTag =WAVE_FORMAT_PCM; //格式为PCM
pcm.wf.nChannels =1; //单声道 mono
pcm.wf.nSamplesPerSec =8000; //采样率
pcm.wf.nAvgBytesPerSec =8000*2; //数据率
pcm.wf.nBlockAlign =1; //每样点的字节数
pcm.wBitsPerSample =8; //采样精度
要格式一致华为手机设置语音设置 ,这个怎么弄好呢?谢谢了