{\r
// セカンダリバッファを作成し、PCMデータを書き込む。\r
\r
+ this._Format = wfx;\r
+\r
this.Buffer = new SecondarySoundBuffer( DirectSound, new SoundBufferDescription()\r
{\r
- Format = ( wfx.Encoding == WaveFormatEncoding.Pcm ) ? wfx : (SharpDX.Multimedia.WaveFormatExtensible) wfx,\r
+ Format = this._Format,\r
Flags = flags,\r
BufferBytes = nPCMサイズbyte,\r
} );\r
\r
// DTXMania用に追加\r
this.nオリジナルの周波数 = wfx.SampleRate;\r
- var format = new SharpDX.Multimedia.WaveFormatExtensible[] { new SharpDX.Multimedia.WaveFormatExtensible( 0, 0, 0 ) };\r
- this.Buffer.GetFormat( format, Marshal.SizeOf<SharpDX.Multimedia.WaveFormatExtensible>(), out _ );\r
- n総演奏時間ms = (int) ( ( (double) nPCMサイズbyte ) / ( format[ 0 ].AverageBytesPerSecond * 0.001 ) );\r
-\r
+ n総演奏時間ms = (int) ( ( (double) nPCMサイズbyte ) / ( this._Format.AverageBytesPerSecond * 0.001 ) );\r
\r
// インスタンスリストに登録。\r
-\r
CSound.listインスタンス.Add( this );\r
}\r
\r
}\r
else if( this.bDirectSoundである )\r
{\r
- var format = new SharpDX.Multimedia.WaveFormatExtensible[] { new SharpDX.Multimedia.WaveFormatExtensible( 0, 0, 0 ) };\r
- this.Buffer.GetFormat( format, Marshal.SizeOf<SharpDX.Multimedia.WaveFormatExtensible>(), out _ );\r
-\r
- int n位置sample = (int) ( format[ 0 ].SampleRate * n位置ms * 0.001 * _db周波数倍率 * _db再生速度 ); // #30839 2013.2.24 yyagi; add _db周波数倍率 and _db再生速度\r
+ int n位置sample = (int) ( this._Format.SampleRate * n位置ms * 0.001 * _db周波数倍率 * _db再生速度 ); // #30839 2013.2.24 yyagi; add _db周波数倍率 and _db再生速度\r
try\r
{\r
- this.Buffer.CurrentPosition = n位置sample * format[ 0 ].BlockAlign;\r
+ this.Buffer.CurrentPosition = n位置sample * this._Format.BlockAlign;\r
}\r
catch ( Exception e )\r
{\r
{\r
this.Buffer.GetCurrentPosition( out int pos, out _ );\r
n位置byte = (long) pos;\r
-\r
- var format = new SharpDX.Multimedia.WaveFormatExtensible[] { new SharpDX.Multimedia.WaveFormatExtensible( 0, 0, 0 ) };\r
- this.Buffer.GetFormat( format, Marshal.SizeOf<SharpDX.Multimedia.WaveFormatExtensible>(), out _ );\r
-\r
- db位置ms = n位置byte / format[ 0 ].SampleRate / 0.001 / _db周波数倍率 / _db再生速度;\r
+ db位置ms = n位置byte / this._Format.SampleRate / 0.001 / _db周波数倍率 / _db再生速度;\r
}\r
else\r
{\r
private double _db周波数倍率 = 1.0;\r
private double _db再生速度 = 1.0;\r
private bool bIs1倍速再生 = true;\r
+ private WaveFormat _Format;\r
\r
private void tBASSサウンドを作成する( string strファイル名, int hMixer, BASSFlag flags )\r
{\r
\r
// BASS の初期化。\r
\r
- int nデバイス = 0; // 0:"no device" … BASS からはデバイスへアクセスさせない。アクセスは BASSWASAPI アドオンから行う。\r
int n周波数 = 44100; // 仮決め。lデバイス(≠ドライバ)がネイティブに対応している周波数であれば何でもいい?ようだ。BASSWASAPIでデバイスの周波数は変えられる。いずれにしろBASSMXで自動的にリサンプリングされる。\r
// BASS_Initは、WASAPI初期化の直前に行うよう変更。WASAPIのmix周波数を使って初期化することで、余計なリサンプリング処理を省き高速化するため。\r
//if( !Bass.BASS_Init( nデバイス, n周波数, BASSInit.BASS_DEVICE_DEFAULT, IntPtr.Zero ) )\r
\r
// BASS WASAPI の初期化。\r
\r
- nデバイス = -1;\r
n周波数 = 0; // デフォルトデバイスの周波数 (0="mix format" sample rate)\r
int nチャンネル数 = 0; // デフォルトデバイスのチャンネル数 (0="mix format" channels)\r
this.tWasapiProc = new WASAPIPROC( this.tWASAPI処理 ); // アンマネージに渡す delegate は、フィールドとして保持しておかないとGCでアドレスが変わってしまう。\r
}\r
if ( nDevNo != -1 )\r
{\r
- if ( !Bass.BASS_Init( nデバイス, deviceInfo.mixfreq, BASSInit.BASS_DEVICE_DEFAULT, IntPtr.Zero ) )\r
+ if ( !Bass.BASS_Init( 0, deviceInfo.mixfreq, BASSInit.BASS_DEVICE_DEFAULT, IntPtr.Zero ) ) // device = 0:"no device": BASS からはデバイスへアクセスさせない。アクセスは BASSWASAPI アドオンから行う。\r
throw new Exception( string.Format( "BASS (WASAPI) の初期化に失敗しました。(BASS_Init)[{0}]", Bass.BASS_ErrorGetCode().ToString() ) );\r
\r
\r
{\r
flags |= BASSWASAPIInit.BASS_WASAPI_EVENT; // Win7以降の場合は、WASAPIをevent drivenで動作させてCPU負荷減、レイテインシ改善\r
}\r
- if ( BassWasapi.BASS_WASAPI_Init( nデバイス, n周波数, nチャンネル数, flags, ( n希望バッファサイズms / 1000.0f ), ( n更新間隔ms / 1000.0f ), this.tWasapiProc, IntPtr.Zero ) )\r
+ if ( BassWasapi.BASS_WASAPI_Init( nDevNo, n周波数, nチャンネル数, flags, ( n希望バッファサイズms / 1000.0f ), ( n更新間隔ms / 1000.0f ), this.tWasapiProc, IntPtr.Zero ) )\r
{\r
if( mode == Eデバイスモード.排他 )\r
{\r