Skip to content

Commit 3f6db5f

Browse files
authored
.NET demo updates (#1040)
1 parent 4739cd1 commit 3f6db5f

File tree

4 files changed

+38
-36
lines changed

4 files changed

+38
-36
lines changed

Diff for: demo/dotnet-vui/AvaloniaVUI/AvaloniaVUI.csproj

+2-2
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
<PackageReference Include="Avalonia" Version="0.9.12" />
1717
<PackageReference Include="Avalonia.Desktop" Version="0.9.12" />
1818
<PackageReference Include="Avalonia.ReactiveUI" Version="0.9.12" />
19-
<PackageReference Include="PvRecorder" Version="1.1.1" />
20-
<PackageReference Include="Porcupine" Version="2.2.0" />
19+
<PackageReference Include="PvRecorder" Version="1.2.1" />
20+
<PackageReference Include="Porcupine" Version="2.2.1" />
2121
</ItemGroup>
2222
</Project>

Diff for: demo/dotnet-vui/AvaloniaVUI/ViewModels/MainWindowViewModel.cs

+3-3
Original file line numberDiff line numberDiff line change
@@ -87,16 +87,16 @@ public MainWindowViewModel()
8787
using Porcupine porcupine = Porcupine.FromBuiltInKeywords(ACCESS_KEY, commands);
8888

8989
// create and start recording
90-
using PvRecorder recorder = PvRecorder.Create(-1, porcupine.FrameLength);
90+
using PvRecorder recorder = PvRecorder.Create(porcupine.FrameLength);
9191
recorder.Start();
9292

9393
Console.WriteLine($"Using device: {recorder.SelectedDevice}");
9494
Console.WriteLine("Listening...");
9595

9696
while (true)
9797
{
98-
short[] pcm = recorder.Read();
99-
int keywordIndex = porcupine.Process(pcm);
98+
short[] frame = recorder.Read();
99+
int keywordIndex = porcupine.Process(frame);
100100
if (keywordIndex >= 0)
101101
{
102102
switch (keywordIndex)

Diff for: demo/dotnet/PorcupineDemo/MicDemo.cs

+32-30
Original file line numberDiff line numberDiff line change
@@ -48,62 +48,64 @@ public static void RunDemo(
4848
int audioDeviceIndex,
4949
string outputPath = null)
5050
{
51-
Porcupine porcupine = null;
52-
BinaryWriter outputFileWriter = null;
53-
int totalSamplesWritten = 0;
54-
5551
// init porcupine wake word engine
56-
porcupine = Porcupine.FromKeywordPaths(accessKey, keywordPaths, modelPath, sensitivities);
52+
using Porcupine porcupine = Porcupine.FromKeywordPaths(accessKey, keywordPaths, modelPath, sensitivities);
5753

5854
// get keyword names for labeling detection results
5955
List<string> keywordNames = keywordPaths.Select(k => Path.GetFileNameWithoutExtension(k).Split("_")[0]).ToList();
6056

57+
// create recorder
58+
using PvRecorder recorder = PvRecorder.Create(frameLength: porcupine.FrameLength, deviceIndex: audioDeviceIndex);
59+
Console.WriteLine($"Using device: {recorder.SelectedDevice}");
60+
Console.CancelKeyPress += delegate (object sender, ConsoleCancelEventArgs e)
61+
{
62+
e.Cancel = true;
63+
recorder.Stop();
64+
Console.WriteLine("Stopping...");
65+
};
66+
6167
// open stream to output file
68+
BinaryWriter outputFileWriter = null;
69+
int totalSamplesWritten = 0;
6270
if (!string.IsNullOrWhiteSpace(outputPath))
6371
{
6472
outputFileWriter = new BinaryWriter(new FileStream(outputPath, FileMode.OpenOrCreate, FileAccess.Write));
65-
WriteWavHeader(outputFileWriter, 1, 16, 16000, 0);
73+
WriteWavHeader(outputFileWriter, 1, 16, recorder.SampleRate, 0);
6674
}
6775

68-
Console.CancelKeyPress += (s, o) =>
69-
{
70-
Console.WriteLine("Stopping...");
71-
72-
if (outputFileWriter != null)
73-
{
74-
// write size to header and clean up
75-
WriteWavHeader(outputFileWriter, 1, 16, 16000, totalSamplesWritten);
76-
outputFileWriter.Flush();
77-
outputFileWriter.Dispose();
78-
}
79-
porcupine?.Dispose();
80-
};
81-
82-
// create and start recording
83-
using PvRecorder recorder = PvRecorder.Create(deviceIndex: audioDeviceIndex, frameLength: porcupine.FrameLength);
84-
Console.WriteLine($"Using device: {recorder.SelectedDevice}");
76+
// start recording
8577
Console.Write($"Listening for [{string.Join(' ', keywordNames.Select(k => $"'{k}'"))}]...\n");
8678
recorder.Start();
8779

88-
while (true)
80+
while (recorder.IsRecording)
8981
{
90-
short[] pcm = recorder.Read();
82+
short[] frame = recorder.Read();
9183

92-
int result = porcupine.Process(pcm);
84+
int result = porcupine.Process(frame);
9385
if (result >= 0)
9486
{
9587
Console.WriteLine($"[{DateTime.Now.ToLongTimeString()}] Detected '{keywordNames[result]}'");
9688
}
9789

9890
if (outputFileWriter != null)
9991
{
100-
foreach (short sample in pcm)
92+
foreach (short sample in frame)
10193
{
10294
outputFileWriter.Write(sample);
10395
}
104-
totalSamplesWritten += pcm.Length;
96+
totalSamplesWritten += frame.Length;
10597
}
106-
_ = Thread.Yield();
98+
99+
Thread.Yield();
100+
}
101+
102+
if (outputFileWriter != null)
103+
{
104+
// write size to header and clean up
105+
WriteWavHeader(outputFileWriter, 1, 16, recorder.SampleRate, totalSamplesWritten);
106+
outputFileWriter.Flush();
107+
outputFileWriter.Dispose();
108+
Console.Write($"Wrote audio to '{outputPath}'");
107109
}
108110
}
109111

@@ -143,7 +145,7 @@ private static void WriteWavHeader(BinaryWriter writer, ushort channelCount, ush
143145
/// </summary>
144146
public static void ShowAudioDevices()
145147
{
146-
string[] devices = PvRecorder.GetAudioDevices();
148+
string[] devices = PvRecorder.GetAvailableDevices();
147149
for (int i = 0; i < devices.Length; i++)
148150
{
149151
Console.WriteLine($"index: {i}, device name: {devices[i]}");

Diff for: demo/dotnet/PorcupineDemo/PorcupineDemo.csproj

+1-1
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,6 @@
2020

2121
<ItemGroup>
2222
<PackageReference Include="Porcupine" Version="2.2.1" />
23-
<PackageReference Include="PvRecorder" Version="1.1.1" />
23+
<PackageReference Include="PvRecorder" Version="1.2.1" />
2424
</ItemGroup>
2525
</Project>

0 commit comments

Comments
 (0)