wave 文件中的数据转换

chensunhui 2012-10-15 11:28:28
最近很想去做音频开发,于是私自研究了下播放器,

目前用win7的 core audio 写了个小demo,界面弄了一下下,然后写到了播放部分,core audio这块的api熟悉了之后,目前开始写第一个支持的格式,从wave下手了,因为这个是最直白的格式了吧....

然后我创建了共享模式的IAudioClient,然后手头上有个wave文件,使用千千静听转换的;

pwfDeviceFormat 是WAVEFORMATEX指针


//如果数据格式不是整数或浮点则创建失败
switch (m_pwfDeviceFormat->wFormatTag)
{
case WAVE_FORMAT_IEEE_FLOAT:
m_eDeviceDataFormat = Data_Float;
break;

case WAVE_FORMAT_PCM:
m_eDeviceDataFormat = Data_Int;
break;

case WAVE_FORMAT_EXTENSIBLE:
{
WAVEFORMATEXTENSIBLE *pExt = reinterpret_cast<WAVEFORMATEXTENSIBLE*>(m_pwfDeviceFormat);
if ( KSDATAFORMAT_SUBTYPE_IEEE_FLOAT == pExt->SubFormat )
m_eDeviceDataFormat = Data_Float;
else if ( KSDATAFORMAT_SUBTYPE_PCM == pExt->SubFormat )
m_eDeviceDataFormat = Data_Int;
}
break;

default:
m_eDeviceDataFormat = Data_Unknown;
break;
}

1 得到的匹配的数据格式是浮点格式,然后wave的数据内容好像是PCM,也就是整数?

然后现在该怎么将整数格式转换到浮点呢??

2 文件的格式是 两个通道, 每个nBlockAlign是16bit ,而设备支持的格式是nBlockAlign = 32bit ,并且每秒采样数(nSamplesPerSec)大于文件中的采样率,这个大概是要进行线性插值,但是如何从16bit 转换到 32bit?

已经研究好久了 ,实在搞不定了特此求助各位高手!! 多谢了!
...全文
182 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
看不见的裂痕 2012-10-16
  • 打赏
  • 举报
回复
1.整数转浮点数还不简单/1.0后就直接变成浮点数了

2.16bit转32bit

一般情况下X86 windows的都是低位在后,高位在前的。

就是short 和int的转换
直接强转附值过去即可。

(万一不正确的话,通过>>16来保证正确性)
赵4老师 2012-10-16
  • 打赏
  • 举报
回复
推荐使用NCTAudioStudio控件处理音频。

18,141

社区成员

发帖
与我相关
我的任务
社区描述
Windows客户端使用相关问题交流社区
社区管理员
  • Windows客户端使用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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