}
// Soundのフォーマットがミキサーのフォーマットと適合するかをチェック。
- if( ( sound.WaveFormat.Channels != this._WaveFormat.Channels ) || // 同じチャンネル数、
- ( sound.WaveFormat.SampleRate != this._WaveFormat.SampleRate ) || // 同じ周波数、
- ( sound.WaveFormat.WaveFormatTag != AudioEncoding.IeeeFloat ) ) // 常に 32bit-float であること。
+ if( !( this._フォーマットがミキサーと互換性がある( sound.WaveFormat ) ) )
{
// 違った場合の変換はサポートしない。
throw new ArgumentException( "ミキサーと同じチャンネル数、サンプルレート、かつ 32bit float 型である必要があります。" );
private WaveFormat _WaveFormat = null;
private float[] _中間バッファ = null;
private readonly object _スレッド間同期 = new object();
+
+ private bool _フォーマットがミキサーと互換性がある( WaveFormat waveFormat )
+ {
+ // チャンネル数が違うと NG
+ if( waveFormat.Channels != this._WaveFormat.Channels )
+ return false;
+
+ // サンプルレートが違うと NG
+ if( waveFormat.SampleRate != this._WaveFormat.SampleRate )
+ return false;
+
+ // 以下、ミキサーフォーマットは IEEE Float であると想定。
+
+ // IeeeFloat なら OK
+ if( waveFormat.WaveFormatTag == AudioEncoding.IeeeFloat )
+ return true;
+
+ // Extensible である場合、
+ if( waveFormat.WaveFormatTag == AudioEncoding.Extensible )
+ {
+ var waveFormatEx = waveFormat as WaveFormatExtensible;
+
+ // サブフォーマットが IEEE Float なら OK
+ if( waveFormatEx.SubFormat == CSCore.AudioSubTypes.IeeeFloat )
+ return true;
+ }
+
+ // それ以外は NG
+ return false;
+ }
}
}
/// 指定されたファイルから <see cref="ISampleSource"/> を生成して返す。
/// 失敗すれば例外発生。
/// </summary>
- public static ISampleSource Create( SoundDevice device, string ファイルパス, bool オンメモリ = true )
+ public static ISampleSource Create( SoundDevice device, string ファイルパス )
{
var path = Folder.絶対パスに含まれるフォルダ変数を展開して返す( ファイルパス );