OSDN Git Service

#34732 backport to 099 series: To avoid WASAPI/ASIO BGM Sync issue, decode "RIFF...
authoryyagi <yyagi@16f42ceb-6dc6-49c8-ba94-f2d53467949d>
Sat, 27 Dec 2014 04:05:31 +0000 (04:05 +0000)
committeryyagi <yyagi@16f42ceb-6dc6-49c8-ba94-f2d53467949d>
Sat, 27 Dec 2014 04:05:31 +0000 (04:05 +0000)
git-svn-id: http://svn.osdn.jp/svnroot/dtxmania/branches/140113(DTXMania098%20with%2028821%20DTXVmode)@789 16f42ceb-6dc6-49c8-ba94-f2d53467949d

FDK17プロジェクト/コード/03.サウンド/CSound.cs
実行時フォルダ(DTXCreator)/dll/FDK.dll
実行時フォルダ/DTXManiaGR.exe
実行時フォルダ/dll/FDK.dll

index 856eeaf..5b3e1d4 100644 (file)
@@ -1407,11 +1407,25 @@ Debug.WriteLine("更に再生に失敗: " + Path.GetFileName(this.strファイ
 \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
@@ -1444,6 +1458,41 @@ Debug.WriteLine("更に再生に失敗: " + Path.GetFileName(this.strファイ
        \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
index adaa320..5122b0b 100644 (file)
Binary files a/実行時フォルダ(DTXCreator)/dll/FDK.dll and b/実行時フォルダ(DTXCreator)/dll/FDK.dll differ
index 19f1763..87a5bb6 100644 (file)
Binary files a/実行時フォルダ/DTXManiaGR.exe and b/実行時フォルダ/DTXManiaGR.exe differ
index adaa320..5122b0b 100644 (file)
Binary files a/実行時フォルダ/dll/FDK.dll and b/実行時フォルダ/dll/FDK.dll differ