音频采样率转换问题
在程序里用acm进行音频转换,例如22050-》44100,44100-》22050
代码如下:
代码如下:
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严重失真
...全文
相关推荐
音频转换器音频转换器音频转换器
**版权问题**:转换音频文件时,应注意遵守版权法律,未经授权的音乐文件不应被非法转换和分发。10.
音频转换可将任何格式的音频文件转换成MP3
在进行音频转换时,还应注意版权问题。确保你拥有转换的所有音频文件的合法使用权,以避免侵犯他人知识产权。
am200mc录音笔音频转换工具
兼容性问题:不同的设备和平台对音频格式的支持程度不同,转换工具的主要作用就是解决这些兼容性问题。
amr 转换为mp3格式
需要注意的是,版权问题在音频转换中也需关注。如果你不拥有AMR文件的版权,未经许可的转换可能侵犯原作者权益。此外,转换过程可能会对音质造成轻微损失,特别是在低比特率设置下。
能将各种音频文件转mp3格式的软件,MP3转换器
使用MP3转换器时,用户需要注意版权问题,确保转换的音频文件是自己拥有版权或者已经获得合法授权的。


