Search code examples
c#windowsaudio

AudioSwitcher API change output device


I made a small gadget with an Arduino that sends two values via serial to my C# program (potentiometer value for volume and switch button to change output device). The volume part is already complete but I'm not being able to change between the two output devices (monitor audio and Headphones).

My code at the moment:

using AudioSwitcher.AudioApi.CoreAudio;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Volume
{
public partial class Form1 : Form
{
    //msg recieved by serial
    String msg;
    string[] tokens;
    
    //active device
    CoreAudioDevice defaultPlaybackDevice = new CoreAudioController().DefaultPlaybackDevice;

    String PHONES = "Headphones (Razer Kraken USB)";
    String COLUNA = "ASUS VP228-4 (NVIDIA High Definition Audio)";

    public Form1()
    {
        //open port for serial msg and start timmer
        InitializeComponent();
        serialPort1.Open();
        timer1.Enabled = true;
    }

    private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
    {
        //handling of the msg
        msg = serialPort1.ReadLine();
        tokens = msg.Split('%');
    }

    private void timer1_Tick(object sender, EventArgs e)
    {
        label1.Text = tokens[0];
        label2.Text = tokens[1];
        label6.Text = defaultPlaybackDevice.FullName;

        //change volume
        defaultPlaybackDevice.Volume = Int32.Parse(tokens[0]);

        //change output device
        if (tokens[1] == "ON")
        {
            if (defaultPlaybackDevice.FullName == PHONES)
            {
                //do nothing
            }
            else
            {
                //change to monitor output
            }
        }
        else
        {
            if (defaultPlaybackDevice.FullName == COLUNA)
            {
                //do nothing
            }
            else
            {
                //change to headphones
            }
        }
    }
}
}

I am using an API called AudioSwitcher.AudioApi.CoreAudio which should allow me to do what I want but I am not being able to find how.


Solution

  • First you need to get all the PlaybackDevices

    IEnumerable<CoreAudioDevice> devices = new CoreAudioController().GetPlaybackDevices();
    

    and then you can make a function to change your Default playbackdevice with the fullname like this

    private void ChangeOutput(string op)
        {
            foreach (CoreAudioDevice d in devices)
            {
                if (d.FullName == op)
                    d.SetAsDefault();
            }
        }