修订版 | c58afd94ec5759ffb1251536d2d4af06822a21c6 (tree) |
---|---|
时间 | 2017-05-06 22:23:32 |
作者 | くまかみ工房 <kumakamikoubou@gmai...> |
Commiter | くまかみ工房 |
DirectSoundを選択すると例外が発生するミス、ならびにWASAPIを正常に選択できないミスを修正。
SharpDX.DirectSound.SecondarySoundBuffer.GetFormat() の使い方を誤っていたので、GetFormat() しなくてもいいように、private メンバでフォーマットを持っておくよう変更。
WASAPIの初期化時、BASS_Init() の device が 0 (no sound)ではなく -1 (default device) になっていたミスを修正。
WASAPIの初期化時、BASS_WASAPI_Init() の device を -1 (default output device) から、手動で列挙して見つけたデフォルトデバイス番号へせっかくなので変更。
DTXManiaのタイトルバーのバージョンを "108+(170506)"に修正。
sondlist.db, songs.dl を .gitignore に追加。
@@ -8,6 +8,8 @@ | ||
8 | 8 | *.sln.docstates |
9 | 9 | Config.xml |
10 | 10 | DTXManiaLog.txt |
11 | +songlist.db | |
12 | +songs.db | |
11 | 13 | |
12 | 14 | # User-specific files (MonoDevelop/Xamarin Studio) |
13 | 15 | *.userprefs |
@@ -23,7 +23,7 @@ namespace DTXMania | ||
23 | 23 | { |
24 | 24 | // プロパティ |
25 | 25 | #region [ properties ] |
26 | - public static readonly string VERSION = "108(170401)"; | |
26 | + public static readonly string VERSION = "108+(170506)"; | |
27 | 27 | public static readonly string SLIMDXDLL = "c_net20x86_Jun2010"; |
28 | 28 | public static readonly string D3DXDLL = "d3dx9_43.dll"; // June 2010 |
29 | 29 | //public static readonly string D3DXDLL = "d3dx9_42.dll"; // February 2010 |
@@ -974,9 +974,11 @@ namespace FDK | ||
974 | 974 | { |
975 | 975 | // セカンダリバッファを作成し、PCMデータを書き込む。 |
976 | 976 | |
977 | + this._Format = wfx; | |
978 | + | |
977 | 979 | this.Buffer = new SecondarySoundBuffer( DirectSound, new SoundBufferDescription() |
978 | 980 | { |
979 | - Format = ( wfx.Encoding == WaveFormatEncoding.Pcm ) ? wfx : (SharpDX.Multimedia.WaveFormatExtensible) wfx, | |
981 | + Format = this._Format, | |
980 | 982 | Flags = flags, |
981 | 983 | BufferBytes = nPCMサイズbyte, |
982 | 984 | } ); |
@@ -991,13 +993,9 @@ namespace FDK | ||
991 | 993 | |
992 | 994 | // DTXMania用に追加 |
993 | 995 | this.nオリジナルの周波数 = wfx.SampleRate; |
994 | - var format = new SharpDX.Multimedia.WaveFormatExtensible[] { new SharpDX.Multimedia.WaveFormatExtensible( 0, 0, 0 ) }; | |
995 | - this.Buffer.GetFormat( format, Marshal.SizeOf<SharpDX.Multimedia.WaveFormatExtensible>(), out _ ); | |
996 | - n総演奏時間ms = (int) ( ( (double) nPCMサイズbyte ) / ( format[ 0 ].AverageBytesPerSecond * 0.001 ) ); | |
997 | - | |
996 | + n総演奏時間ms = (int) ( ( (double) nPCMサイズbyte ) / ( this._Format.AverageBytesPerSecond * 0.001 ) ); | |
998 | 997 | |
999 | 998 | // インスタンスリストに登録。 |
1000 | - | |
1001 | 999 | CSound.listインスタンス.Add( this ); |
1002 | 1000 | } |
1003 | 1001 |
@@ -1238,13 +1236,10 @@ Debug.WriteLine("更に再生に失敗: " + Path.GetFileName(this.strファイ | ||
1238 | 1236 | } |
1239 | 1237 | else if( this.bDirectSoundである ) |
1240 | 1238 | { |
1241 | - var format = new SharpDX.Multimedia.WaveFormatExtensible[] { new SharpDX.Multimedia.WaveFormatExtensible( 0, 0, 0 ) }; | |
1242 | - this.Buffer.GetFormat( format, Marshal.SizeOf<SharpDX.Multimedia.WaveFormatExtensible>(), out _ ); | |
1243 | - | |
1244 | - int n位置sample = (int) ( format[ 0 ].SampleRate * n位置ms * 0.001 * _db周波数倍率 * _db再生速度 ); // #30839 2013.2.24 yyagi; add _db周波数倍率 and _db再生速度 | |
1239 | + int n位置sample = (int) ( this._Format.SampleRate * n位置ms * 0.001 * _db周波数倍率 * _db再生速度 ); // #30839 2013.2.24 yyagi; add _db周波数倍率 and _db再生速度 | |
1245 | 1240 | try |
1246 | 1241 | { |
1247 | - this.Buffer.CurrentPosition = n位置sample * format[ 0 ].BlockAlign; | |
1242 | + this.Buffer.CurrentPosition = n位置sample * this._Format.BlockAlign; | |
1248 | 1243 | } |
1249 | 1244 | catch ( Exception e ) |
1250 | 1245 | { |
@@ -1272,11 +1267,7 @@ Debug.WriteLine("更に再生に失敗: " + Path.GetFileName(this.strファイ | ||
1272 | 1267 | { |
1273 | 1268 | this.Buffer.GetCurrentPosition( out int pos, out _ ); |
1274 | 1269 | n位置byte = (long) pos; |
1275 | - | |
1276 | - var format = new SharpDX.Multimedia.WaveFormatExtensible[] { new SharpDX.Multimedia.WaveFormatExtensible( 0, 0, 0 ) }; | |
1277 | - this.Buffer.GetFormat( format, Marshal.SizeOf<SharpDX.Multimedia.WaveFormatExtensible>(), out _ ); | |
1278 | - | |
1279 | - db位置ms = n位置byte / format[ 0 ].SampleRate / 0.001 / _db周波数倍率 / _db再生速度; | |
1270 | + db位置ms = n位置byte / this._Format.SampleRate / 0.001 / _db周波数倍率 / _db再生速度; | |
1280 | 1271 | } |
1281 | 1272 | else |
1282 | 1273 | { |
@@ -1502,6 +1493,7 @@ Debug.WriteLine("更に再生に失敗: " + Path.GetFileName(this.strファイ | ||
1502 | 1493 | private double _db周波数倍率 = 1.0; |
1503 | 1494 | private double _db再生速度 = 1.0; |
1504 | 1495 | private bool bIs1倍速再生 = true; |
1496 | + private WaveFormat _Format; | |
1505 | 1497 | |
1506 | 1498 | private void tBASSサウンドを作成する( string strファイル名, int hMixer, BASSFlag flags ) |
1507 | 1499 | { |
@@ -172,7 +172,6 @@ namespace FDK | ||
172 | 172 | |
173 | 173 | // BASS の初期化。 |
174 | 174 | |
175 | - int nデバイス = 0; // 0:"no device" … BASS からはデバイスへアクセスさせない。アクセスは BASSWASAPI アドオンから行う。 | |
176 | 175 | int n周波数 = 44100; // 仮決め。lデバイス(≠ドライバ)がネイティブに対応している周波数であれば何でもいい?ようだ。BASSWASAPIでデバイスの周波数は変えられる。いずれにしろBASSMXで自動的にリサンプリングされる。 |
177 | 176 | // BASS_Initは、WASAPI初期化の直前に行うよう変更。WASAPIのmix周波数を使って初期化することで、余計なリサンプリング処理を省き高速化するため。 |
178 | 177 | //if( !Bass.BASS_Init( nデバイス, n周波数, BASSInit.BASS_DEVICE_DEFAULT, IntPtr.Zero ) ) |
@@ -200,7 +199,6 @@ namespace FDK | ||
200 | 199 | |
201 | 200 | // BASS WASAPI の初期化。 |
202 | 201 | |
203 | - nデバイス = -1; | |
204 | 202 | n周波数 = 0; // デフォルトデバイスの周波数 (0="mix format" sample rate) |
205 | 203 | int nチャンネル数 = 0; // デフォルトデバイスのチャンネル数 (0="mix format" channels) |
206 | 204 | this.tWasapiProc = new WASAPIPROC( this.tWASAPI処理 ); // アンマネージに渡す delegate は、フィールドとして保持しておかないとGCでアドレスが変わってしまう。 |
@@ -221,7 +219,7 @@ namespace FDK | ||
221 | 219 | } |
222 | 220 | if ( nDevNo != -1 ) |
223 | 221 | { |
224 | - if ( !Bass.BASS_Init( nデバイス, deviceInfo.mixfreq, BASSInit.BASS_DEVICE_DEFAULT, IntPtr.Zero ) ) | |
222 | + if ( !Bass.BASS_Init( 0, deviceInfo.mixfreq, BASSInit.BASS_DEVICE_DEFAULT, IntPtr.Zero ) ) // device = 0:"no device": BASS からはデバイスへアクセスさせない。アクセスは BASSWASAPI アドオンから行う。 | |
225 | 223 | throw new Exception( string.Format( "BASS (WASAPI) の初期化に失敗しました。(BASS_Init)[{0}]", Bass.BASS_ErrorGetCode().ToString() ) ); |
226 | 224 | |
227 | 225 |
@@ -246,7 +244,7 @@ namespace FDK | ||
246 | 244 | { |
247 | 245 | flags |= BASSWASAPIInit.BASS_WASAPI_EVENT; // Win7以降の場合は、WASAPIをevent drivenで動作させてCPU負荷減、レイテインシ改善 |
248 | 246 | } |
249 | - if ( BassWasapi.BASS_WASAPI_Init( nデバイス, n周波数, nチャンネル数, flags, ( n希望バッファサイズms / 1000.0f ), ( n更新間隔ms / 1000.0f ), this.tWasapiProc, IntPtr.Zero ) ) | |
247 | + if ( BassWasapi.BASS_WASAPI_Init( nDevNo, n周波数, nチャンネル数, flags, ( n希望バッファサイズms / 1000.0f ), ( n更新間隔ms / 1000.0f ), this.tWasapiProc, IntPtr.Zero ) ) | |
250 | 248 | { |
251 | 249 | if( mode == Eデバイスモード.排他 ) |
252 | 250 | { |