16,472
社区成员
发帖
与我相关
我的任务
分享
LPWAVEFORMATEX sourceFormat = (LPWAVEFORMATEX) new char [maxSize];
LPWAVEFORMATEX destFormat = (LPWAVEFORMATEX) new char [maxSize];
memset(sourceFormat, 0, maxSize);
memset(destFormat, 0, maxSize);
sourceFormat->wFormatTag = WAVE_FORMAT_PCM;
sourceFormat->nChannels = 2;
sourceFormat->nSamplesPerSec = 22050;
sourceFormat->wBitsPerSample = 16;
sourceFormat->cbSize = 0;
sourceFormat->nBlockAlign = 4;
sourceFormat->nAvgBytesPerSec = 22050* 4;
destFormat->wFormatTag = WAVE_FORMAT_PCM;
destFormat->nChannels = 2;
destFormat->nSamplesPerSec = 44100;
destFormat->wBitsPerSample = 16;
destFormat->cbSize = 0;
destFormat->nBlockAlign = 4;
destFormat->nAvgBytesPerSec = 44100* 4;
HACMSTREAM hstr1;
mmr = acmStreamOpen(&hstr1,
NULL, // driver handle
sourceFormat, // source format
m_destFormat, // destination format
NULL, // no filter
NULL, // no callback
0, // instance data (not used)
ACM_STREAMOPENF_NONREALTIME);
DWORD suggestedDestSize;
suggestedDestSize = 0;
hr = acmStreamSize(hstr1, numFramesAvailable*pwfx->nBlockAlign, &suggestedDestSize, ACM_STREAMSIZEF_DESTINATION);
BYTE* pDstData = new BYTE [dwDstBytes];
ACMSTREAMHEADER shdr;
memset(&shdr, 0, sizeof(shdr));
shdr.cbStruct = sizeof(shdr);
shdr.pbSrc = pData; //
shdr.cbSrcLength = numFramesAvailable*pwfx->nBlockAlign;
shdr.pbDst = pDstData; //
shdr.cbDstLength = suggestedDestSize;
mmr = acmStreamPrepareHeader(hstr1, &shdr, 0);
mmr = acmStreamConvert(hstr1, &shdr, 0);
......
mmr = acmStreamUnprepareHeader(hstr1, &shdr, 0);
.....
现在的问题是从44100-》22050正常,但是从22050-》44100严重失真