XAPO中LockForProcess 音頻格式設定以及資料處理後的音頻格式

來源:互聯網
上載者:User

標籤:

XAPO中LockForProcess 格式 是由與之綁定的IXAudioSubmixVoice來影響的。但是貌似只能影響通道數和採樣率,其中的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

XAPO中LockForProcess 音頻格式設定以及資料處理後的音頻格式

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.