wave 文件中的数据转换
最近很想去做音频开发,于是私自研究了下播放器,
目前用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?
已经研究好久了 ,实在搞不定了特此求助各位高手!! 多谢了!
------最佳解决方案--------------------推荐使用NCTAudioStudio控件处理音频。
------其他解决方案--------------------1.整数转浮点数还不简单/1.0后就直接变成浮点数了
2.16bit转32bit
一般情况下X86 windows的都是低位在后,高位在前的。
就是short 和int的转换
直接强转附值过去即可。
(万一不正确的话,通过>>16来保证正确性)