public static bool TryCreate(int part, string name, string type, string value, out Handle handle) { HandleType handleType; int data1; float data2; handle = null; if (!Enum.TryParse(name, true, out handleType)) return false; data1 = (string.IsNullOrWhiteSpace(type)) ? 0 : HandleCreator.ParseOperators(handleType, type); if (string.IsNullOrWhiteSpace(value)) data2 = 0.0f; else if (!float.TryParse(value, out data2)) return false; handle = new Handle(part, handleType, data1, data2); return true; }
public HandleItem(Handle handle, long tick) : base(tick) { this.Handle = handle; }
/// <summary> /// 単一のハンドルをキューにプッシュします。 /// </summary> /// <param name="handle">プッシュされるハンドル。</param> public void PushHandle(Handle handle) { lock (((ICollection)this.handleQueue).SyncRoot) this.handleQueue.Enqueue(handle); }
/// <summary> /// ベースとなる Handle オブジェクトと新しいパートを指定して Handle クラスのインスタンスを初期化します。 /// </summary> /// <param name="handle">ベースとなる Handle オブジェクト。</param> /// <param name="newTargetPart">新しいパート。</param> public Handle(Handle handle, int newTargetPart) { this.targetPart = newTargetPart; this.type = handle.Type; this.data1 = handle.data1; this.data2 = handle.data2; }
/// <summary> /// このパートにハンドルを適用します。 /// </summary> /// <param name="handle">適用されるハンドル。</param> public void ApplyHandle(Handle handle) { switch (handle.Type) { //パラメータリセット case HandleType.Reset: this.Reset(); break; //サイレンス case HandleType.Silence: this.Silence(); break; //ボリューム設定 case HandleType.Volume: this.ApplyForVolume(handle.Data1, handle.Data2); break; //パンポット case HandleType.Panpot: this.panpot = new Panpot(handle.Data2); break; //ビブラート case HandleType.Vibrate: this.ApplyForVibrate(handle.Data1, handle.Data2); break; //波形追加 case HandleType.Waveform: this.ApplyForWaveform(handle.Data1, handle.Data2); break; //波形編集 case HandleType.EditWaveform: this.waveform.SetParameter(handle.Data1, handle.Data2); break; //エンベロープ case HandleType.Envelope: this.envelope.SetParameter(handle.Data1, handle.Data2); break; //ファインチューン case HandleType.FineTune: this.finetune = handle.Data2.Clamp(float.MaxValue, 0.0f); break; //キーシフト case HandleType.KeyShift: this.keyShift = handle.Data1.Clamp(128, -128); break; //ポルタメント case HandleType.Portament: this.ApplyForPortament(handle.Data1, handle.Data2); break; //ゼロゲート case HandleType.ZeroGate: this.ZeroGate(handle.Data1); break; //ノートオフ case HandleType.NoteOff: this.Release(); break; //ノートオン case HandleType.NoteOn: this.Attack(handle.Data1); this.velocity = handle.Data2.Clamp(1.0f, 0.0f); break; default: break; } }
private void AddHandle(Handle handle) { this.output.Add(new HandleItem(handle, this.nowTick)); }