1
0
mirror of https://github.com/SirusDoma/VoxCharger.git synced 2024-11-28 01:10:49 +01:00
VoxCharger/Sources/Effects/Effect.cs
2020-04-19 03:24:48 +07:00

106 lines
3.8 KiB
C#

using System;
using System.Collections.Generic;
namespace VoxCharger
{
public partial class Effect
{
public static readonly Effect Empty = new Effect();
public static readonly Effect Default = new Retrigger(24, 95f, 1f, 1f, 0.85f, 0.16f, true);
public FxType Type { get; private set; }
public int Id { get; set; } = 1;
public Effect()
: this(FxType.None)
{
}
public Effect(FxType type)
{
Type = type;
}
public override string ToString()
{
return "0,\t0,\t0,\t0,\t0,\t0,\t0";
}
public static Effect FromVox(string data)
{
if (string.IsNullOrEmpty(data))
return null;
var prop = data.Trim().Split(',');
if (!Enum.TryParse(prop[0], out FxType type))
return null;
switch(type)
{
case FxType.Retrigger:
case FxType.RetriggerEx: return Retrigger.FromVox(data);
case FxType.Gate: return Gate.FromVox(data);
case FxType.Phaser: return Phaser.FromVox(data);
case FxType.TapeStopEx:
case FxType.TapeStop: return TapeStop.FromVox(data);
case FxType.SideChain: return SideChain.FromVox(data);
case FxType.Wobble: return Wobble.FromVox(data);
case FxType.BitCrusher: return BitCrusher.FromVox(data);
case FxType.PitchShift: return PitchShift.FromVox(data);
case FxType.LowPass: return LowPass.FromVox(data);
case FxType.Flanger: return Flanger.FromVox(data);
default: return new Effect();
}
}
public static Effect FromKsh(string data)
{
if (string.IsNullOrEmpty(data))
return null;
var prop = data.Trim().Split(',');
if (!Enum.TryParse(prop[0].Replace("Echo", "Retrigger"), out FxType type))
return null;
switch(type)
{
case FxType.Retrigger:
case FxType.RetriggerEx: return Retrigger.FromKsh(data);
case FxType.Gate: return Gate.FromKsh(data);
case FxType.Phaser: return Phaser.FromKsh(data);
case FxType.TapeStopEx:
case FxType.TapeStop: return TapeStop.FromKsh(data);
case FxType.SideChain: return SideChain.FromKsh(data);
case FxType.Wobble: return Wobble.FromKsh(data);
case FxType.PitchShift: return PitchShift.FromKsh(data);
case FxType.Flanger: return Flanger.FromKsh(data);
default: return Default;
}
}
public static Effect FromKsh(KshDefinition definition)
{
if (!definition.GetString("type", out string type))
return new Effect();
switch(type)
{
case "Echo":
case "Retrigger": return Retrigger.FromKsh(definition);
case "Gate": return Gate.FromKsh(definition);
case "Phaser": return Phaser.FromKsh(definition);
case "TapeStop": return TapeStop.FromKsh(definition);
case "SideChain": return SideChain.FromKsh(definition);
case "LowPass":
case "Wobble": return Wobble.FromKsh(definition);
case "PitchShift":
case "BitCrusher": return BitCrusher.FromKsh(definition);
case "Flanger": return Flanger.FromKsh(definition);
default: return new Effect();
}
}
}
}