\r
private void tBASSサウンドを作成する( string strファイル名, int hMixer, BASSFlag flags )\r
{\r
- if ( String.Compare( Path.GetExtension( strファイル名 ), ".xa", true ) == 0 ) // caselessで文字列比較\r
+ #region [ xaとwav(RIFF chunked vorbis)に対しては専用の処理をする ]\r
+ switch ( Path.GetExtension( strファイル名 ) )\r
{\r
- tBASSサウンドを作成するXA( strファイル名, hMixer, flags );\r
- return;\r
- }\r
+ case ".xa":\r
+ tBASSサウンドを作成するXA( strファイル名, hMixer, flags );\r
+ return;\r
+\r
+ case ".wav":\r
+ if ( tRIFFchunkedVorbisならDirectShowでDecodeする( strファイル名, ref byArrWAVファイルイメージ ) )\r
+ {\r
+ tBASSサウンドを作成する( byArrWAVファイルイメージ, hMixer, flags );\r
+ return;\r
+ }\r
+ break;\r
+\r
+ default:\r
+ break;\r
+ }\r
+ #endregion\r
\r
this.e作成方法 = E作成方法.ファイルから;\r
this.strファイル名 = strファイル名;\r
\r
tBASSサウンドを作成する・ストリーム生成後の共通処理( hMixer );\r
}\r
+ /// <summary>\r
+ /// Decode "RIFF chunked Vorbis" to "raw wave"\r
+ /// because BASE.DLL has two problems for RIFF chunked Vorbis;\r
+ /// 1. time seek is not fine 2. delay occurs (about 10ms)\r
+ /// </summary>\r
+ /// <param name="strファイル名">wave filename</param>\r
+ /// <param name="byArrWAVファイルイメージ">wav file image</param>\r
+ /// <returns></returns>\r
+ private bool tRIFFchunkedVorbisならDirectShowでDecodeする( string strファイル名, ref byte[] byArrWAVファイルイメージ )\r
+ {\r
+ bool bファイルにVorbisコンテナが含まれている = false;\r
+\r
+ #region [ ファイルがWAVかつ、Vorbisコンテナが含まれているかを調べ、それに該当するなら、DirectShowでデコードする。]\r
+ //-----------------\r
+ try\r
+ {\r
+ using ( var ws = new WaveStream( strファイル名 ) )\r
+ {\r
+ if ( ws.Format.FormatTag == (WaveFormatTag) 0x6770 || // Ogg Vorbis Mode 2+\r
+ ws.Format.FormatTag == (WaveFormatTag) 0x6771 ) // Ogg Vorbis Mode 3+\r
+ {\r
+ Trace.TraceInformation( Path.GetFileName( strファイル名 ) + ": RIFF chunked Vorbis. Decode to raw Wave first, to avoid BASS.DLL troubles" );\r
+ CDStoWAVFileImage.t変換( strファイル名, out byArrWAVファイルイメージ );\r
+ bファイルにVorbisコンテナが含まれている = true;\r
+ }\r
+ }\r
+ }\r
+ catch\r
+ {\r
+ Trace.TraceWarning( "Error: " + Path.GetFileName( strファイル名 ) + " : RIFF chunked Vorbisのデコードに失敗しました。" );\r
+ }\r
+ #endregion\r
+\r
+ return bファイルにVorbisコンテナが含まれている;\r
+ }\r
private void tBASSサウンドを作成するXA( string strファイル名, int hMixer, BASSFlag flags )\r
{\r
int nPCMデータの先頭インデックス;\r