Beispiel #1
0
        // 生成と終了


        public SoundTimer(サウンドデバイス device)
        {
            using (Log.Block(FDKUtilities.現在のメソッド名))
            {
                this._DeviceRef = new WeakReference <サウンドデバイス>(device);
                this.リセットする();
            }
        }
        /// <summary>
        ///		指定されたファイルの音声をデコードし、<see cref="ISampleSource"/> オブジェクトを返す。
        ///		失敗すれば null 。
        /// </summary>
        public static ISampleSource Create(サウンドデバイス device, VariablePath ファイルパス, double 再生速度 = 1.0)
        {
            if (!(File.Exists(ファイルパス.数なしパス)))
            {
                Log.ERROR($"ファイルが存在しません。[{ファイルパス.変数付きパス}]");
                return(null);
            }

            var 拡張子 = Path.GetExtension(ファイルパス.数なしパス).ToLower();

            if (".ogg" == 拡張子)
            {
                #region " OggVorvis "
                //----------------
                try
                {
                    using (var audioStream = new FileStream(ファイルパス.数なしパス, FileMode.Open, FileAccess.Read))
                    {
                        // ファイルを読み込んで IWaveSource を生成。
                        using (var waveSource = new NVorbisOnStreamingSampleSource(audioStream, device.WaveFormat).ToWaveSource())
                        {
                            // IWaveSource をリサンプルして ISampleSource を生成。
                            return(new ResampledOnMemoryWaveSource(waveSource, device.WaveFormat, 再生速度).ToSampleSource());
                        }
                    }
                }
                catch
                {
                    // ダメだったので次へ。
                }
                //----------------
                #endregion
            }
            if (".wav" == 拡張子)
            {
                #region " WAV "
                //----------------
                try
                {
                    // ファイルを読み込んで IWaveSource を生成。
                    using (var waveSource = new WavOnMemoryWaveSource(ファイルパス, device.WaveFormat))
                    {
                        // IWaveSource をリサンプルして ISampleSource を生成。
                        return(new ResampledOnMemoryWaveSource(waveSource, device.WaveFormat, 再生速度).ToSampleSource());
                    }
                }
                catch
                {
                    // ダメだったので次へ。
                }
                //----------------
                #endregion
            }
            if (".xa" == 拡張子)
            {
                #region " XA "
                //----------------
                try
                {
                    // ファイルを読み込んで IWaveSource を生成。
                    using (var waveSource = new XAOnMemoryWaveSource(ファイルパス, device.WaveFormat))
                    {
                        // IWaveSource をリサンプルして ISampleSource を生成。
                        return(new ResampledOnMemoryWaveSource(waveSource, device.WaveFormat, 再生速度).ToSampleSource());
                    }
                }
                catch
                {
                    // ダメだったので次へ。
                }
                //----------------
                #endregion
            }
            else
            {
                #region " MediaFoundation "
                //----------------
                try
                {
                    // ファイルを読み込んで IWaveSource を生成。
                    using (var waveSource = new MediaFoundationOnMemoryWaveSource(ファイルパス, device.WaveFormat))
                    {
                        // IWaveSource をリサンプルして ISampleSource を生成。
                        return(new ResampledOnMemoryWaveSource(waveSource, device.WaveFormat, 再生速度).ToSampleSource());
                    }
                }
                catch
                {
                    // ダメだったので次へ。
                }
                //----------------
                #endregion
            }

            Log.ERROR($"未対応のオーディオファイルです。{ファイルパス.変数付きパス}");
            return(null);
        }