加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

XAPO中LockForProcess 音频格式设置以及数据处理后的音频格式

发布时间:2021-05-22 01:15:21 所属栏目:大数据 来源:网络整理
导读:XAPO中LockForProcess 名目 是由与之绑定的IXAudioSubmixVoice来影响的。 可是貌似只能影响通道数和采样率,个中的WAVEFORMATEX.wBitsPerSample是Float型,32bit,暂且没有发明怎么去修改这个数值。 建设IXAudioSubmixVoice时会插手通道数和采样率,这两个数

XAPO中LockForProcess 名目 是由与之绑定的IXAudioSubmixVoice来影响的。 可是貌似只能影响通道数和采样率,个中的WAVEFORMATEX.wBitsPerSample是Float型,32bit,暂且没有发明怎么去修改这个数值。 建设IXAudioSubmixVoice时会插手通道数和采样率,这两个数据要流向XAPO的话, 通过IXAudioSubmixVoice::SetEffectChain来关联,以下是进程(例子来自Microsoft DirectX SDK (June 2010)SamplesC++XAudio2XAudio2BasicSound):
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,7))) //配置通道数(第二个参数)和采样率(第三个参数)
 {
  wprintf( L"Failed creating submix voice: %#Xn",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://www.voidcn.com/article/p-bytrropr-bmp.html

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读