XAPO中LockForProcess 音频格式设置以及数据处理后的音频格式
2016-04-26 14:23
381 查看
XAPO中LockForProcess 格式 是由与之绑定的IXAudioSubmixVoice来影响的。
但是貌似只能影响通道数和采样率,其中的WAVEFORMATEX.wBitsPerSample是Float型,32bit,暂时没有发现怎么去修改这个数值。
创建IXAudioSubmixVoice时会加入通道数和采样率,这两个数据要流向XAPO的话,
通过IXAudioSubmixVoice::SetEffectChain来关联,以下是过程(例子来自Microsoft DirectX SDK (June 2010)\Samples\C++\XAudio2\XAudio2BasicSound):
1.创建XAPO:
2.创建SubmixVoice需要的参数:
3.创建子混音器,并设置通道数和采样率。
4.关联起来:
如果不去抓取XAPO中的数据,而且与之关联的IXAudioVoice已经是效果链的最后与MasterVoice相关联的的SubmixVoice(SourceVoice),或者是MasterVoice,那么声音可以直接流向MasterVoice,且音质很好。
在XAPO中Process中抓到数据后,流向.wav文件或者另外自己封装的Player(只有一个IXAudioSourceVoice),那么文件的头格式或者IXAudioSourceVoice的格式,需要如下:
这样的话,才可以保证文件中的数据或者Player播放音频数据时没有杂音。但是保存文件的话,1秒钟的数据差不多有348K,暂时还不知道怎么将数据压缩一下。
交流QQ:1245178753
本文地址:http://blog.csdn.net/u011417605/article/details/51250130
但是貌似只能影响通道数和采样率,其中的WAVEFORMATEX.wBitsPerSample是Float型,32bit,暂时没有发现怎么去修改这个数值。
创建IXAudioSubmixVoice时会加入通道数和采样率,这两个数据要流向XAPO的话,
通过IXAudioSubmixVoice::SetEffectChain来关联,以下是过程(例子来自Microsoft DirectX SDK (June 2010)\Samples\C++\XAudio2\XAudio2BasicSound):
1.创建XAPO:
MyXAPO * SubmixMyXAPO=NULL; XAPO_REGISTRATION_PROPERTIES *ppRegistrationProperties; hr=XAudio2CreateReverb(&pXAPO); pXAPO->QueryInterface(__uuidof(IXAPO),(void**)&SubmixMyXAPO); SubmixMyXAPO->GetRegistrationProperties(&ppRegistrationProperties); SubmixMyXAPO->Release(); SubmixMyXAPO=new MyXAPO(ppRegistrationProperties);
2.创建SubmixVoice需要的参数:
XAUDIO2_EFFECT_DESCRIPTOR descriptor; descriptor.InitialState = true; descriptor.OutputChannels = 2; descriptor.pEffect = SubmixMyXAPO; XAUDIO2_EFFECT_CHAIN chain; chain.EffectCount = 1 ; chain.pEffectDescriptors = &descriptor;
3.创建子混音器,并设置通道数和采样率。
if(FAILED(hr=pXAudio2->CreateSubmixVoice(&pSubMixVoice2,1,44100,0,7))) //设置通道数(第二个参数)和采样率(第三个参数) { wprintf( L"Failed creating submix voice: %#X\n", hr ); SAFE_RELEASE( pXAudio2 ); CoUninitialize(); return 0; }
4.关联起来:
hr=pSubMixVoice2->SetEffectChain(&chain);//关联XAPO和SubmixVoice
如果不去抓取XAPO中的数据,而且与之关联的IXAudioVoice已经是效果链的最后与MasterVoice相关联的的SubmixVoice(SourceVoice),或者是MasterVoice,那么声音可以直接流向MasterVoice,且音质很好。
在XAPO中Process中抓到数据后,流向.wav文件或者另外自己封装的Player(只有一个IXAudioSourceVoice),那么文件的头格式或者IXAudioSourceVoice的格式,需要如下:
const WAVEFORMATEX* pWFInfo pWFInfo;//是由外部来设置的 m_pwfxEx.Format.wFormatTag = WAVE_FORMAT_EXTENSIBLE; //需要注意 m_pwfxEx.Format.nChannels = pWFInfo->nChannels; m_pwfxEx.Format.cbSize = 22; m_pwfxEx.Format.wBitsPerSample = 32; //需要注意 m_pwfxEx.Format.nBlockAlign = m_pwfxEx.Format.nChannels * (m_pwfxEx.Format.wBitsPerSample/8); m_pwfxEx.Format.nSamplesPerSec = pWFInfo->nSamplesPerSec; m_pwfxEx.Format.nAvgBytesPerSec = m_pwfxEx.Format.nSamplesPerSec * m_pwfxEx.Format.nBlockAlign; m_pwfxEx.dwChannelMask = 0; //需要注意 m_pwfxEx.SubFormat = KSDATAFORMAT_SUBTYPE_IEEE_FLOAT; m_pwfxEx.Samples.wValidBitsPerSample = m_pwfxEx.Format.wBitsPerSample;
这样的话,才可以保证文件中的数据或者Player播放音频数据时没有杂音。但是保存文件的话,1秒钟的数据差不多有348K,暂时还不知道怎么将数据压缩一下。
交流QQ:1245178753
本文地址:http://blog.csdn.net/u011417605/article/details/51250130
相关文章推荐
- 报错:org.apache.xml.utils.PrefixResolver
- 代码
- UIImage加载图片的方式以及Images.xcassets对于加载方法的影响
- 手把手教你用FineBI做数据可视化
- LDA2vec: LDA + word2vec
- 2016SDAU课程练习三1001
- 基于优先级队列java线程池
- MarkMan – 马克鳗 IU好伙伴啊
- c++ 趣味小程序
- tomcat双向认证服务器部署
- C 语言中指针、字符串与数组的一些关系
- 输出n对括号所有有效的匹配 java实现
- 函数的参数
- c语言 #define 中的UL
- Android layout_weight使用
- android权限(SIGNAL_PERSISTENT_PROCESSES已弃用)
- Session管理
- 关于博主
- ZigBee无线传感器网络远程数据采集系统设计
- 深入学习Java虚拟机(三)