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.wav")
When you are done and want to stop your recording, use this to stop your recording and dispose all used objects.
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, .mp3 and .wav. For all formats except wave files, you can specify the bitrate, here's an example of how you can record an mp3 file in 320kbps:
$Recording::StartRecording("C:\Users\Bart Simons\Desktop\testing.mp3", 320000)
Happy system audio recording with PowerShell!