• R/O
  • HTTP
  • SSH
  • HTTPS

CsWin10Desktop3: Commit

Visual C# 7.0, Windows10 Desktop App


Commit MetaInfo

Revision5a24da0bfd320f70c82c06b56af2572c0f2baa27 (tree)
Time2017-10-15 15:54:02
Authorくまかみ工房 <kumakamikoubou@gmai...>
Commiterくまかみ工房

Log Message

一部のwavで音が鳴らないミスを修正。

Sound.Dispose で SampleSource を解放しないよう修正。
Mixer.AddSound でフォーマットが Extensible であるときに不適合とされるミスを修正。

Change Summary

Incremental Difference

--- a/FDK/メディア/サウンド/WASAPI/Mixer.cs
+++ b/FDK/メディア/サウンド/WASAPI/Mixer.cs
@@ -100,9 +100,7 @@ namespace FDK.メディア.サウンド.WASAPI
100100 }
101101
102102 // Soundのフォーマットがミキサーのフォーマットと適合するかをチェック。
103- if( ( sound.WaveFormat.Channels != this._WaveFormat.Channels ) || // 同じチャンネル数、
104- ( sound.WaveFormat.SampleRate != this._WaveFormat.SampleRate ) || // 同じ周波数、
105- ( sound.WaveFormat.WaveFormatTag != AudioEncoding.IeeeFloat ) ) // 常に 32bit-float であること。
103+ if( !( this._フォーマットがミキサーと互換性がある( sound.WaveFormat ) ) )
106104 {
107105 // 違った場合の変換はサポートしない。
108106 throw new ArgumentException( "ミキサーと同じチャンネル数、サンプルレート、かつ 32bit float 型である必要があります。" );
@@ -211,5 +209,35 @@ namespace FDK.メディア.サウンド.WASAPI
211209 private WaveFormat _WaveFormat = null;
212210 private float[] _中間バッファ = null;
213211 private readonly object _スレッド間同期 = new object();
212+
213+ private bool _フォーマットがミキサーと互換性がある( WaveFormat waveFormat )
214+ {
215+ // チャンネル数が違うと NG
216+ if( waveFormat.Channels != this._WaveFormat.Channels )
217+ return false;
218+
219+ // サンプルレートが違うと NG
220+ if( waveFormat.SampleRate != this._WaveFormat.SampleRate )
221+ return false;
222+
223+ // 以下、ミキサーフォーマットは IEEE Float であると想定。
224+
225+ // IeeeFloat なら OK
226+ if( waveFormat.WaveFormatTag == AudioEncoding.IeeeFloat )
227+ return true;
228+
229+ // Extensible である場合、
230+ if( waveFormat.WaveFormatTag == AudioEncoding.Extensible )
231+ {
232+ var waveFormatEx = waveFormat as WaveFormatExtensible;
233+
234+ // サブフォーマットが IEEE Float なら OK
235+ if( waveFormatEx.SubFormat == CSCore.AudioSubTypes.IeeeFloat )
236+ return true;
237+ }
238+
239+ // それ以外は NG
240+ return false;
241+ }
214242 }
215243 }
--- a/FDK/メディア/サウンド/WASAPI/SampleSourceFactory.cs
+++ b/FDK/メディア/サウンド/WASAPI/SampleSourceFactory.cs
@@ -14,7 +14,7 @@ namespace FDK.メディア.サウンド.WASAPI
1414 /// 指定されたファイルから <see cref="ISampleSource"/> を生成して返す。
1515 /// 失敗すれば例外発生。
1616 /// </summary>
17- public static ISampleSource Create( SoundDevice device, string ファイルパス, bool オンメモリ = true )
17+ public static ISampleSource Create( SoundDevice device, string ファイルパス )
1818 {
1919 var path = Folder.絶対パスに含まれるフォルダ変数を展開して返す( ファイルパス );
2020
--- a/FDK/メディア/サウンド/WASAPI/Sound.cs
+++ b/FDK/メディア/サウンド/WASAPI/Sound.cs
@@ -81,7 +81,7 @@ namespace FDK.メディア.サウンド.WASAPI
8181 {
8282 this.Stop();
8383
84- this._SampleSource?.Dispose();
84+ //this._SampleSource?.Dispose(); Dispose は外部で。(SampleSource は複数の Sound で共有されている可能性があるため。)
8585 this._SampleSource = null;
8686
8787 this._DeviceRef = null;
Show on old repository browser