【问题标题】:AudioSwitcher API change output deviceAudioSwitcher API 更改输出设备
【发布时间】:2018-12-27 01:09:22
【问题描述】:

我用 Arduino 制作了一个小工具,它通过串行向我的 c# 程序发送 2 个值(音量电位器值和切换按钮以更改输出设备)。音量部分已经完成,但我无法在两个输出设备(监听音频和耳机)之间进行切换。

我现在的代码:

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
            }
        }
    }
}
}

我正在使用一个名为 AudioSwitcher.AudioApi.CoreAudio 的 API,它应该允许我做我想做的事,但我无法找到方法。

【问题讨论】:

    标签: c# windows api audio device


    【解决方案1】:

    首先你需要得到所有的 PlaybackDevices

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

    然后您可以使用这样的全名更改默认播放设备的功能

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

    【讨论】:

    • 更新 CoreAudioController 非常慢……知道为什么吗?
    猜你喜欢
    • 2021-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-04
    • 2021-07-27
    • 2013-02-12
    • 1970-01-01
    相关资源
    最近更新 更多