XAudio2で再生すると先頭にノイズが入る

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
てるん

XAudio2で再生すると先頭にノイズが入る

#1

投稿記事 by てるん » 14年前

はじめまして、てるんと申します。
ちょっと困っていることがあるので質問させていただきます。

アーカイブデータ(複数のWavファイルを一つにまとめたもの)から一つのデータをメモリに読み込み、
ファイルを再生するプログラムを書きました。
無事に再生できたのですが、必ず先頭にプチッというノイズが鳴ってから再生が始まります。
アーカイブにまとめる前の、単体Wavファイルではそのようなことはなく、原因の特定に困っています。

この場合、どのような要因が考えられるのでしょうか?何かお気づきの点がありましたら、教えてください。
ソースコードは次のとおりです(一部抜粋)

// initialize
CoInitializeEx( NULL, COINIT_MULTITHREADED );
XAudio2Create( &pXAudio2, 0);
IXAudio2* pXAudio2 = NULL;
pXAudio2->CreateMasteringVoice( &pMasteringVoice );

// load archive
CArchive* a=new CArchive();
a->SetPassWord(xxx);
a->LoadData("00.wav","wav.sound");// wav.soundというアーカイブファイルから00.wavというファイルを抽出

// Get format of wave file
WAVEFORMATEX pwfx;
pwfx.cbSize=0;
pwfx.nAvgBytesPerSec=176400;
pwfx.wFormatTag=WAVE_FORMAT_PCM;
pwfx.nBlockAlign=4;
pwfx.nChannels=2;
pwfx.nSamplesPerSec=44100;
pwfx.wBitsPerSample=16;

// Calculate how many bytes and samples are in the wave
DWORD cbWaveSize = (DWORD)a->GetFileSize();

// Create the source voice
pXAudio2->CreateSourceVoice( &pSourceVoice, &pwfx,
0, XAUDIO2_DEFAULT_FREQ_RATIO, NULL, NULL, NULL );


// Submit the wave sample data using an XAUDIO2_BUFFER structure
XAUDIO2_BUFFER buffer;
buffer.LoopCount=0;
buffer.LoopBegin=0;
buffer.LoopLength=0;
buffer.pContext=0;
buffer.PlayBegin=0;
buffer.PlayLength=0;
buffer.pAudioData = a->GetData();
buffer.Flags = XAUDIO2_END_OF_STREAM;
buffer.AudioBytes = a->GetFileSize();

pSourceVoice->SubmitSourceBuffer( &buffer );
pSourceVoice->Start();

SDKのサンプルコードを元に書きました。恐らく何かの設定値が原因なんじゃないかと思うのですが、
原因を把握しかねています。よろしくお願いします。

アバター
lriki
記事: 88
登録日時: 14年前

Re: XAudio2で再生すると先頭にノイズが入る

#2

投稿記事 by lriki » 14年前

貼っていただいたコードでは WAVEFORMATEX の設定を直接書いてますけど、
実際はちゃんとファイルからフォーマットを調べているのでしょうか?

あと、

pSourceVoice->SubmitSourceBuffer( &buffer );

の前に

pSourceVoice->FlushSourceBuffers();

と書いてみたらどうでしょうか?

てるん

Re: XAudio2で再生すると先頭にノイズが入る

#3

投稿記事 by てるん » 14年前

>貼っていただいたコードでは WAVEFORMATEX の設定を直接書いてますけど、
実際はちゃんとファイルからフォーマットを調べているのでしょうか?

ファイルから調べていませんでした。なのでファイル読み込み->設定値の格納としてみたのですが・・・
現象は解決できずでした。

>pSourceVoice->SubmitSourceBuffer( &buffer );
の前に
pSourceVoice->FlushSourceBuffers();
と書いてみたらどうでしょうか?

こちらの方法も、やはり現象は解決できませんでした。

この他にも、構造体の設定値を変更したり、ちゃんとファイルが読み込めているのか、書き出しを行って
確認しました。しかし異常は見られず・・・といった感じです。
このことから、OSやDirectXのファイル破損が要因として考えられるかな、と思い、再インストールを実行してみようと思います。

お時間とアドバイスを頂きまして、誠にありがとうございました。

閉鎖

“C言語何でも質問掲示板” へ戻る