Has anybody tried to use NAudio and recording directly in Powershell?
I tried to translate teh C# code into powershell.. most of that works but I’m strugling to translate this in Powershell:
waveIn.DataAvailable += (s, e) =>
{
waveFile.Write(e.Buffer, 0, e.BytesRecorded);
};
Any Idea?
In general.. I want to translate this c# code into powershell:
using System;
using NAudio.Wave;
namespace RecordAudioCSharpNAudio
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Please enter a filename");
string filename = Console.ReadLine();
filename += ".wav";
Console.WriteLine("Press any key to start recording...");
Console.ReadKey();
var waveFormat = new WaveFormat(44100, 1);
using (var waveFile = new WaveFileWriter(filename, waveFormat))
{
using (var waveIn = new WaveInEvent())
{
waveIn.WaveFormat = waveFormat;
waveIn.DataAvailable += (s, e) =>
{
waveFile.Write(e.Buffer, 0, e.BytesRecorded);
};
waveIn.StartRecording();
Console.WriteLine("Recording... Press any key to stop.");
Console.ReadKey();
waveIn.StopRecording();
Console.WriteLine("Recording stopped.");
}
}
Console.WriteLine("Audio recorded and saved as " + filename);
}
}
}
Ashkan is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
The line:
waveIn.DataAvailable += (s, e) =>
{
waveFile.Write(e.Buffer, 0, e.BytesRecorded);
};
Is subscribing to an event
called DataAvailable
. In this case the PowerShell translation would be via Register-ObjectEvent
:
try {
$waveFormat = [NAudio.Wave.WaveFormat]::new(44100, 1)
$waveFile = [NAudio.Wave.WaveFileWriter]::new($filename, $waveFormat)
$waveIn = [NAudio.Wave.WaveInEvent]::new()
$waveIn.WaveFormat = $waveFormat
$evt = Register-ObjectEvent -InputObject $waveIn -EventName DataAvailable -Action {
param($s, $e)
$waveFile.Write($e.Buffer, 0, $e.BytesRecorded)
}
$waveIn.StartRecording()
[Console]::WriteLine('Recording... Press any key to stop.')
[Console]::ReadKey()
$waveIn.StopRecording()
[Console]::WriteLine('Recording stopped.')
}
finally {
$waveIn.Dispose()
$waveFormat.Dispose()
$evt | Unregister-Event
}
[Console]::WriteLine('Audio recorded and saved as ' + $filename)