public FilterEnvelope(PeriodicFunctionsSource source) : base(source) { Source = source; }
static void Main(string[] args) { var output = new SoundioOutput(); for (var i = 0; i < output.Devices.Count; i++) { Console.WriteLine($"[{i}] {output.Devices[i].Name}"); } Console.Write("Device Index > "); var outputIndex = int.Parse(Console.ReadLine()); Console.Write("Latency(ms) > "); var intervalMs = Double.Parse(Console.ReadLine()); output.DesiredLatency = TimeSpan.FromMilliseconds(intervalMs); output.Initialize(output.Devices[outputIndex], new AudioFormat(48000, 1, 16)); Output = output; Console.WriteLine("Output device initialized"); Console.WriteLine($"Actual Latency : {output.ActualLatency.TotalMilliseconds}ms"); Source = new PeriodicFunctionsSource(output.Format.SampleRate) { Function = FunctionType.Sin, Volume = 1, }; var midi = new MidiPlayer(output.Format.SampleRate, new Synthesizer(output.Format.SampleRate)); midi.OscillatorConfigs.Add(new Oscillator() { Function = KSynthesizer.Sources.FunctionType.Sin, Volume = 0.3f }); midi.Open(MidiFile.Read("sample.mid")); Source.SetFrequency(Frequency); RecordFilter = new RecordFilter(midi); Output.Buffer += OutputOnBuffer; Output.Play(); Console.WriteLine("Player started"); bool exit = false; while (!exit) { var key = Console.ReadKey(); Console.WriteLine(); switch (key.Key) { case ConsoleKey.P: Playing = !Playing; Console.WriteLine(Playing ? "Resumed" : "Paused"); break; case ConsoleKey.R: if (RecordFilter.IsRecording) { RecordFilter.StopRecording(); } else { var now = DateTime.Now; var name = $"{now.Ticks}.wav"; RecordFilter.StartRecording(new FileStream(name, FileMode.Create, FileAccess.Write), true, false); Console.WriteLine("Output : " + name); } Console.WriteLine(RecordFilter.IsRecording ? "Recording Started" : "Recording Stopped"); break; case ConsoleKey.UpArrow: Frequency += 100; Source.SetFrequency(Frequency); Console.WriteLine($"Frequency : {Frequency}Hz"); break; case ConsoleKey.DownArrow: Frequency -= 100; if (Frequency <= 300) { Frequency = 300; } Source.SetFrequency(Frequency); Console.WriteLine($"Frequency : {Frequency}Hz"); break; case ConsoleKey.Escape: exit = true; break; default: Console.WriteLine("Unknown Key"); break; } } output.Dispose(); Console.WriteLine("Exited"); }