OSDN Git Service

#39490 環境によっては同じ名前のWASAPIデバイスが複数定義されている場合に対応。 実際に利用可能なWASAPIデバイスのみ利用する。
[dtxmania/dtxmania.git] / FDK / コード / 03.サウンド / CSoundDeviceWASAPI.cs
index f273f83..4ad9cff 100644 (file)
@@ -234,11 +234,15 @@ namespace FDK
                        BASS_WASAPI_DEVICEINFO deviceInfo;
                        for ( int n = 0; ( deviceInfo = BassWasapi.BASS_WASAPI_GetDeviceInfo( n ) ) != null; n++ )
                        {
-                               // BASS_DEVICEINFOとBASS_WASAPI_DEVICEINFOで、IsDefaultとなっているデバイスが異なる場合がある。
+                               // #37940 2018.2.15: BASS_DEVICEINFOとBASS_WASAPI_DEVICEINFOで、IsDefaultとなっているデバイスが異なる場合がある。
                                // (WASAPIでIsDefaultとなっているデバイスが正しくない場合がある)
                                // そのため、BASS_DEVICEでIsDefaultとなっているものを探し、それと同じ名前のWASAPIデバイスを使用する。
+                               // #39490 2019.8.19: 更に、環境によっては同じ名前のWASAPIデバイスが複数定義されている場合があるため、
+                               // 実際に利用可能なWASAPIデバイスのみに対象を絞り込む。
+                               // (具体的には、defperiod, minperiod, mixchans, mixfreqがすべて0のデバイスは使用不可のため
+                               //  これらが0でないものを選択する)
                                //if ( deviceInfo.IsDefault )
-                               if ( deviceInfo.name == strDefaultSoundDeviceName)
+                               if ( deviceInfo.name == strDefaultSoundDeviceName && deviceInfo.mixfreq > 0 )
                                {
                                        nDevNo = n;
 #region [ 既定の出力デバイスの情報を表示 ]
@@ -348,6 +352,10 @@ Trace.TraceInformation("WASAPI Device #{0}: {1}: IsDefault={2}, defPeriod={3}s,
                                else
                                {
                                        f更新間隔sec = n希望バッファサイズms / 1000.0f;
+                                       if (f更新間隔sec < deviceInfo.minperiod)
+                                       {
+                                               f更新間隔sec = deviceInfo.minperiod;
+                                       }
                                }
                                f希望バッファサイズsec = 0.0f;
                        }