Пример #1
0
        public static システム設定 読み込む()
        {
            using (Log.Block(FDKUtilities.現在のメソッド名))
            {
                // (1) 読み込み or 新規作成

                var config = (システム設定)null;

                try
                {
                    var yaml         = File.ReadAllText(システム設定ファイルパス.数なしパス);
                    var deserializer = new YamlDotNet.Serialization.Deserializer();
                    config = deserializer.Deserialize <システム設定>(yaml);

                    switch (config.Version)
                    {
                    case 1:
                        Log.ERROR($"バージョン 2 を新規に作成して保存します。[{システム設定ファイルパス.変数付きパス}]");
                        config = new システム設定();
                        config.保存する();
                        break;

                    case 2:
                        break;      // 現行バージョン

                    default:
                        Log.ERROR($"未対応のバージョンです。新規に作成して保存します。[{システム設定ファイルパス.変数付きパス}]");
                        config = new システム設定();
                        config.保存する();
                        break;
                    }
                }
                catch (FileNotFoundException)
                {
                    Log.Info($"ファイルが存在しないため、新規に作成します。[{システム設定ファイルパス.変数付きパス}]");
                    config = new システム設定();
                    config.保存する();
                }
                catch
                {
                    Log.ERROR($"ファイルの内容に誤りがあります。新規に作成して保存します。[{システム設定ファイルパス.変数付きパス}]");
                    config = new システム設定();
                    config.保存する();
                }


                // (2) 読み込み後の処理

                // パスの指定がなければ、とりあえず exe のあるフォルダを検索対象にする。
                if (0 == config.曲検索フォルダ.Count)
                {
                    config.曲検索フォルダ.Add(@"$(Exe)");
                }

                return(config);
            }
        }
Пример #2
0
        // 生成と終了


        /// <summary>
        ///		コンストラクタ。
        /// </summary>
        /// <param name="keyboard">キーボードデバイス。キーボードはフォームに依存するため、外部から共有する。</param>
        ///	<param name="最大入力履歴数">1つのシーケンスの最大入力サイズ。</param>
        public 入力管理(システム設定 systemConfig, キーボードデバイス keyboard, int 最大入力履歴数 = 32)
        {
            using (Log.Block(FDKUtilities.現在のメソッド名))
            {
                this._SystemConfig = systemConfig;

                this.キーボード  = keyboard;
                this.MIDI入力 = new MIDI入力デバイス();

                Trace.Assert(0 < 最大入力履歴数);
                this._最大入力履歴数 = 最大入力履歴数;

                this.ポーリング結果.Clear();
                this._入力履歴 = new List <ドラム入力イベント>(this._最大入力履歴数);

                // MIDI入力デバイスの可変IDへの対応を行う。
                if (0 < this.MIDI入力.DeviceName.Count)
                {
                    var デバイスリスト = new Dictionary <int, string>();    // <デバイスID, デバイス名>

                    #region " (1) 先に列挙された実際のデバイスに合わせて、デバイスリスト(配列番号がデバイス番号)を作成する。"
                    //----------------
                    for (int i = 0; i < this.MIDI入力.DeviceName.Count; i++)
                    {
                        デバイスリスト.Add(i, this.MIDI入力.DeviceName[i]);
                    }
                    //----------------
                    #endregion
                    #region " (2) キーバインディングのデバイスリストとマージして、新しいデバイスリストを作成する。"
                    //----------------
                    foreach (var kvp in this._SystemConfig.MIDIデバイス番号toデバイス名)
                    {
                        var キーバインディング側のデバイス名 = kvp.Value;

                        if (デバイスリスト.ContainsValue(キーバインディング側のデバイス名))
                        {
                            // (A) 今回も存在しているデバイスなら、何もしない。
                        }
                        else
                        {
                            // (B) 今回は存在していないデバイスなら、末尾(=未使用ID)に登録する。
                            デバイスリスト.Add(デバイスリスト.Count, キーバインディング側のデバイス名);
                        }
                    }
                    //----------------
                    #endregion
                    #region " (3) キーバインディングのデバイスから新しいデバイスへ、キーのIDを付け直す。"
                    //----------------
                    var 中間バッファ = new Dictionary <システム設定.IdKey, ドラム入力種別>();

                    foreach (var kvp in this._SystemConfig.MIDItoドラム)
                    {
                        var キーのデバイスID = kvp.Key.deviceId;

                        // キーバインディングのデバイス番号 から、デバイスリストのデバイス番号 へ付け替える。
                        if (this._SystemConfig.MIDIデバイス番号toデバイス名.TryGetValue(キーのデバイスID, out string キーのデバイス名))
                        {
                            キーのデバイスID = デバイスリスト.First((kvp2) => (kvp2.Value == キーのデバイス名)).Key;          // マージしたので、必ず存在する。
                        }

                        中間バッファ.Add(new システム設定.IdKey(キーのデバイスID, kvp.Key.key), kvp.Value);        // デバイスID以外は変更なし。
                    }

                    this._SystemConfig.MIDItoドラム.Clear();

                    for (int i = 0; i < 中間バッファ.Count; i++)
                    {
                        var kvp = 中間バッファ.ElementAt(i);
                        this._SystemConfig.MIDItoドラム.Add(new システム設定.IdKey(kvp.Key.deviceId, kvp.Key.key), kvp.Value);
                    }
                    //----------------
                    #endregion
                    #region " (4) 新しいデバイスリストをキーバインディングに格納して、保存する。"
                    //----------------
                    this._SystemConfig.MIDIデバイス番号toデバイス名.Clear();

                    for (int i = 0; i < デバイスリスト.Count; i++)
                    {
                        this._SystemConfig.MIDIデバイス番号toデバイス名.Add(i, デバイスリスト[i]);
                    }

                    this._SystemConfig.保存する();
                    //----------------
                    #endregion
                }
                else
                {
                    // 列挙されたMIDI入力デバイスがまったくないなら、キーバインディングは何もいじらない。
                }
            }
        }