Bart Simons

Bart Simons


Thoughts, stories and ideas.

Bart Simons
Author

Share


Tags


Twitter


Recording system audio through WASAPI with PowerShell

Bart SimonsBart Simons

If you are planning to create certain audio-related automation tasks in PowerShell, you might come to the conclusion that there are not many ready to use cmdlets available. Luckily, there are some smart ways to work around that. Since PowerShell is capable to load and work with .NET assemblies, I decided to dive deeper into a project called CSCore, which claims to be an advanced audio library written in pure C# capable of playing and recording, encoding and decoding, and much more.

WASAPI stands for Windows Audio Session API and is one of the many audio APIs available for Windows. One of the features of WASAPI is the ability to record system audio as if it was a loopback audio device like in Linux. Luckily, CSCore has bindings available for the loopback recording functionality of WASAPI. Neat!

I was in need of a loopback audio recording solution for PowerShell, hence this post's title. In order to work around some minor problems I came through when directly adding the CSCore compiled DLL as a type in PowerShell, a wrapper was needed for me to create a more elegant way of calling methods. Check out this example:

Add-Type -Path PSCore.dll

$Recording = [PSCore.LoopbackRecorder]
$Recording::StartRecording("C:\Users\Bart Simons\Desktop\testing.mp3", 320000)

When you are done and want to stop your recording, use this to stop your recording and dispose all used objects (if you don't dispose properly, PowerShell will crash on exit of the PowerShell process).

$Recording::StopRecording()
$Recording::Dispose()

You can find the source code for my assembly at https://github.com/bmsimons/PSCore. If you need a pre-compiled assembly: I have included that as well in the debug folder.

You can record in .wma, .aac and .mp3. You can also specify your own desired bitrate, in my example I used 320kbps as the bitrate. Happy system audio recording with PowerShell!

Bart Simons
Author

Bart Simons

Comments