我用Teamspeak的Server端进行语音保存,但总是不成功,请教有没有那位高手用这个开发过,帮忙解决下问题,谢谢了
我的代码如下:
void CAudioService::OnVoiceDataEvent(uint64 serverID, anyID clientID, unsigned char* voiceData, unsigned int voiceDataSize, unsigned int frequency)
{
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////// m_pNewBuffer = (unsigned char *)realloc (m_pSaveBuffer , m_dwDataLength + voiceDataSize);

if (m_pNewBuffer == NULL)
{
return ;
}

m_pSaveBuffer = m_pNewBuffer; //////////////////////////////////////////////////////////////////////////

CopyMemory (m_pSaveBuffer + m_dwDataLength, voiceData, voiceDataSize);
m_dwDataLength += voiceDataSize;
DWORD WaveHeaderSize = 38;
DWORD WaveFormatSize = 18;
/* Open file with client nickname as filename and write voice data */
fd =_open("E:\\Adu.wav", _O_CREAT /*| _O_APPEND | _O_BINARY */| _O_WRONLY , _S_IREAD | _S_IWRITE);
if(fd == -1) {
printf("failed to open file\n");
exit(-1);
} lseek(fd,0L,SEEK_SET);
_write(fd, "RIFF", 4);
unsigned int Sec=(sizeof(m_pSaveBuffer) + WaveHeaderSize);
_write(fd, &Sec,sizeof(Sec));
_write(fd, "WAVE",4);
_write(fd, "fmt ",4);
_write(fd, &WaveFormatSize,sizeof(WaveFormatSize));
_write(fd, &m_waveform.wFormatTag,sizeof(m_waveform.wFormatTag));
_write(fd, &m_waveform.nChannels,sizeof(m_waveform.nChannels));
_write(fd, &m_waveform.nSamplesPerSec,sizeof(m_waveform.nSamplesPerSec));
_write(fd, &m_waveform.nAvgBytesPerSec,sizeof(m_waveform.nAvgBytesPerSec));
_write(fd, &m_waveform.nBlockAlign,sizeof(m_waveform.nBlockAlign));
_write(fd, &m_waveform.wBitsPerSample,sizeof(m_waveform.wBitsPerSample));
_write(fd, &m_waveform.cbSize,sizeof(m_waveform.cbSize));
_write(fd, "data",4);
_write(fd, &m_dwDataLength,sizeof(m_dwDataLength)); _write(fd, m_pSaveBuffer,m_dwDataLength);
_lseek(fd, 0L, SEEK_END);
_close(fd);
}其中
//定义波形数据格式
m_waveform.wFormatTag = WAVE_FORMAT_PCM; //波形数据的格式
m_waveform.nChannels = 1; //波形数据的通道数:单声道或立体声
m_waveform.nSamplesPerSec = 11025; //采样率
m_waveform.nAvgBytesPerSec = 11025//数据率,数据率等于采样率乘以每样点字节数
m_waveform.nBlockAlign = 1; //每个样点字节数
m_waveform.wBitsPerSample = 8; //采样精度,采样精度为8或16
m_waveform.cbSize = 0; //附加格式信息的数据块大小