怎么样把对wav文件的格式进行转换?

friendzj 2006-11-30 11:16:27
我需要把8bit 采样,采样级别 16k 的pcm文件转换成 16bit 采样,级别8k的pcm文件,有什么办法,或者现成的库?
...全文
215 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
friendzj 2006-12-01
  • 打赏
  • 举报
回复
楼上的,能不能加点说明呀?这样全是代码小弟有点晕~
xuzheng318 2006-11-30
  • 打赏
  • 举报
回复
{
VIDEOINFOHEADER* phead;
//ISampleGrabber* pSample;
IAMStreamConfig* iconfig;

HRESULT hr;
IBaseFilter* pRender;
hr = m_pGraph -> FindFilterByName( L"Video Capture", &pRender );

if ( FAILED( hr ) )
{
MessageBox( "请求的接口未找到!", "查找接口失败", MB_ICONSTOP );
return S_OK;
}

hr = m_pCapture -> FindInterface( &PIN_CATEGORY_CAPTURE,
&MEDIATYPE_Interleaved,
pRender, IID_IAMStreamConfig, (void **)&iconfig );
if ( hr != NOERROR )
{
hr = m_pCapture -> FindInterface( &PIN_CATEGORY_CAPTURE,
&MEDIATYPE_Video, pRender,
IID_IAMStreamConfig, (void **)&iconfig);
}

if ( FAILED( hr ) )
{
MessageBox( "请求的接口未找到!", "查找接口失败", MB_ICONSTOP );
return S_OK;
}

AM_MEDIA_TYPE* pmt;
if ( iconfig -> GetFormat( &pmt ) != S_OK )
MessageBox( "读格式失败!", "TITLE", MB_ICONSTOP );

if ( pmt -> formattype == FORMAT_VideoInfo)
{
phead = ( VIDEOINFOHEADER* )pmt ->pbFormat;
phead ->bmiHeader.biBitCount = 24;
phead ->bmiHeader.biWidth = 320;
phead ->bmiHeader.biHeight = 240;
phead ->bmiHeader.biSizeImage = phead ->bmiHeader.biWidth*phead ->bmiHeader.biHeight*3;
if ( ( hr = iconfig ->SetFormat( pmt ) ) != S_OK )
MessageBox( "设置格式失败!", "TITLE", MB_ICONSTOP );
}

iconfig -> Release();
iconfig = NULL;

}
王国凡 2006-11-30
  • 打赏
  • 举报
回复
采样频率比较复杂, 这里就不现场写 code 了, 见谅 .
王国凡 2006-11-30
  • 打赏
  • 举报
回复
>能不能给详细一点的资料,这样说实在太模糊了
---------------------------------
bit 转换很容易办到, 比如:
unsigned char *srcBuffer = GetAudioData(); // 原始数据放在 srcBuffer 中
转换 bit 的数据是:
unsigned int len = sizeof(srcBuffer) / sizeof(srcBuffer[0]);
unsigned char *des = new unsighed char[len * 2]; // 因为转换后是 16 bit 的
unsigned int i=0;
for (i=0; i<len; i++)
{
des[0] = 0;
des[1] = srcBuffer[i];
des += 2;
}
friendzj 2006-11-30
  • 打赏
  • 举报
回复
楼上的也太....了吧???
httpaspjspphp 2006-11-30
  • 打赏
  • 举报
回复
8 bit 到 16 bit
可以把一个 8 bit 填充到 16 bit 的高 8 位的位置上.

采样频率 16k 到 8k
这个忘了, 好象是从 16k 的曲线上取临近的两个点的值求和再除以 2
friendzj 2006-11-30
  • 打赏
  • 举报
回复
能不能给详细一点的资料,这样说实在太模糊了
王国凡 2006-11-30
  • 打赏
  • 举报
回复
8 bit 到 16 bit
可以把一个 8 bit 填充到 16 bit 的高 8 位的位置上.

采样频率 16k 到 8k
这个忘了, 好象是从 16k 的曲线上取临近的两个点的值求和再除以 2

16,470

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧