|
4 | 4 | using Demo.Generator; |
5 | 5 | using OldBit.Beep; |
6 | 6 |
|
7 | | -var audioFormatOption = new Option<string>("--format", () => "f32le", "The format of the output file") |
8 | | - .FromAmong("f32le", "s16le", "u8"); |
9 | | -audioFormatOption.AddAlias("-f"); |
| 7 | +var audioFormatOption = new Option<string>("--format", "-f") |
| 8 | + { |
| 9 | + Description = "The format of the output file", |
| 10 | + DefaultValueFactory = _ => "f32le" |
| 11 | + } |
| 12 | + .AcceptOnlyFromAmong("f32le", "s16le", "u8"); |
10 | 13 |
|
11 | | -var sampleRateOption = new Option<int>("--rate", () => 44100, "The sample rate"); |
12 | | -sampleRateOption.AddAlias("-r"); |
| 14 | +var sampleRateOption = new Option<int>("--rate", "-r") |
| 15 | +{ |
| 16 | + Description = "The sample rate", |
| 17 | + DefaultValueFactory = _ => 44100 |
| 18 | +}; |
13 | 19 |
|
14 | | -var channelsOption = new Option<int>("--channels", () => 2, "The number of channels"); |
15 | | -channelsOption.AddAlias("-c"); |
| 20 | +var channelsOption = new Option<int>("--channels", "-c") |
| 21 | +{ |
| 22 | + Description = "The number of channels", |
| 23 | + DefaultValueFactory = _ => 2 |
| 24 | +}; |
16 | 25 |
|
17 | | -var waveOption = new Option<string>("--wave", () => "sine", "The type of wave to generate") |
18 | | - .FromAmong("sine", "square"); |
19 | | -waveOption.AddAlias("-w"); |
| 26 | +var waveOption = new Option<string>("--wave", "-w") |
| 27 | + { |
| 28 | + Description = "The type of wave to generate", |
| 29 | + DefaultValueFactory = _ => "sine" |
| 30 | + } |
| 31 | + .AcceptOnlyFromAmong("sine", "square"); |
20 | 32 |
|
21 | | -var volumeOption = new Option<int>("--vol", () => 50, "The volume level"); |
22 | | -volumeOption.AddValidator(result => |
| 33 | +var volumeOption = new Option<int>("--vol", "-v") |
| 34 | +{ |
| 35 | + Description = "The volume level", |
| 36 | + DefaultValueFactory = _ => 50 |
| 37 | +}; |
| 38 | +volumeOption.Validators.Add(result => |
23 | 39 | { |
24 | | - var volume = result.GetValueForOption(volumeOption); |
| 40 | + var volume = result.GetValue(volumeOption); |
| 41 | + |
25 | 42 | if (volume is < 0 or > 100) |
26 | 43 | { |
27 | | - result.ErrorMessage = "Volume must be between 0 and 100"; |
| 44 | + result.AddError("Volume must be between 0 and 100"); |
28 | 45 | } |
29 | 46 | }); |
30 | | -volumeOption.AddAlias("-v"); |
31 | 47 |
|
32 | 48 | var rootCommand = new RootCommand("Plays a demo audio."); |
33 | | -rootCommand.AddOption(audioFormatOption); |
34 | | -rootCommand.AddOption(sampleRateOption); |
35 | | -rootCommand.AddOption(channelsOption); |
36 | | -rootCommand.AddOption(waveOption); |
37 | | -rootCommand.AddOption(volumeOption); |
| 49 | +rootCommand.Options.Add(audioFormatOption); |
| 50 | +rootCommand.Options.Add(sampleRateOption); |
| 51 | +rootCommand.Options.Add(channelsOption); |
| 52 | +rootCommand.Options.Add(waveOption); |
| 53 | +rootCommand.Options.Add(volumeOption); |
38 | 54 |
|
39 | | -rootCommand.SetHandler(async (audioFormat, sampleRate, channels, waveType, volume) => |
| 55 | +rootCommand.SetAction(async parseResult => |
40 | 56 | { |
| 57 | + var audioFormat = parseResult.GetRequiredValue(audioFormatOption); |
| 58 | + var sampleRate = parseResult.GetRequiredValue(sampleRateOption); |
| 59 | + var channels = parseResult.GetRequiredValue(channelsOption); |
| 60 | + var waveType = parseResult.GetRequiredValue(waveOption); |
| 61 | + var volume = parseResult.GetRequiredValue(volumeOption); |
| 62 | + |
41 | 63 | Console.WriteLine("Playing demo audio..."); |
42 | | - Console.WriteLine($"Format: {audioFormat} Sample rate: {sampleRate} Channels: {channels} WaveType: {waveType} Volume: {volume}"); |
| 64 | + Console.WriteLine($"Format: {audioFormat} | Sample rate: {sampleRate} | Channels: {channels} | WaveType: {waveType} | Volume: {volume}"); |
43 | 65 |
|
44 | 66 | var parsedAudioFormat = audioFormat switch |
45 | 67 | { |
|
56 | 78 | await demoPlayer.PlayAsync(); |
57 | 79 |
|
58 | 80 | Console.WriteLine($"Finished playing audio in {timer.ElapsedMilliseconds}ms."); |
| 81 | +}); |
59 | 82 |
|
60 | | -}, audioFormatOption, sampleRateOption, channelsOption, waveOption, volumeOption); |
| 83 | +var parseResult = rootCommand.Parse(args); |
61 | 84 |
|
62 | | -await rootCommand.InvokeAsync(args); |
| 85 | +await parseResult.InvokeAsync(); |
0 commit comments