ノートパソコンで現在使用中のオーディオ機器情報をボタン一つで取得する【C#】

# 動機

今回はボタン一つで、ノートパソコンに接続しているオーディオ機器の情報を取得してみました。

ちなみに、今回も作成に関しては WpfApp で作成をしました。

> 参考 1：[ノートパソコンの画面の明るさをボタン一つで変更する【C#】](https://qiita.com/kewpie134134/items/d81461aab1ab1b9a26af)
> 参考 2：[ノートパソコンの画面の音量をボタン一つで変更する【C#】](https://qiita.com/kewpie134134/items/22acfa606071fbc22018#mainwindowxamlcs)
> 参考 3：[ノートパソコンの画面のバッテリー状況をボタン一つで取得する【C#】](https://qiita.com/kewpie134134/items/744d52aea14662732c6c)
> 参考 4：[ノートパソコンの画面の通信料状況をボタン一つで取得する【C#】](https://qiita.com/kewpie134134/items/8b1f7e709a1483b84cf0)
> 参考 5：[ノートパソコンで現在使用中のアプリをボタン一つで把握する【C#】](https://qiita.com/kewpie134134/items/bb9fc6d2efd03237e31f)

# イメージ画像

ボタンを設置した UI です。（プロトのため、もはや UI をきれいにしようとは思わなくなっています。。。すみません。。）

![オーディオ情報メイン画面.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/407150/941bbff9-0172-9264-eccf-4eea528f1d60.png)

こちらを選択すると現在使用中のオーディオ機器の情報が表示されるようになります。

![オーディオ画面結果.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/407150/42d21a04-256b-ecba-d60c-63dca3f6f44c.png)

# ソース

## MainWindow.xaml

```MainWindow.xaml
<Window x:Class="WpfApp1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:WpfApp1"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">
    <Grid>
        <Button x:Name="button" Content="Button" HorizontalAlignment="Left" Margin="119,91,0,0" VerticalAlignment="Top" Width="75" Click="button_Click"/>

    </Grid>
</Window>
```

## MainWindow.xaml

```MainWindow.xaml.cs
using NAudio.Wave;
using System.Collections.Generic;
using System.Windows;

namespace WpfApp1
{
    /// <summary>
    /// MainWindow.xaml の相互作用ロジック
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        private void button_Click(object sender, RoutedEventArgs e)
        {
            MessageBox.Show(GetDevices());
        }

        public string GetDevices()
        {
            string items = "";
            List<string> deviceList = new List<string>();
            for (int i = 0; i < WaveOut.DeviceCount; i++)
            {
                var capabilities = WaveOut.GetCapabilities(i);
                deviceList.Add(capabilities.ProductName);
            }
            foreach(string item in deviceList)
            {
                items += item;
            }
            return items;
        }

        public void PlaySound(string filePath, int index)
        {
            var waveReader = new WaveFileReader(filePath);
            var waveOut = new WaveOut();
            waveOut.DeviceNumber = index;
            waveOut.Init(waveReader);
            waveOut.Play();
        }
    }
}
```

# Release 版での起動について

Release ビルドで正常に実行ファイルは作成されるのですが、実行するには開発中にインストールしたプラグインなどが一緒に入っているフォルダ内に実行ファイルを入れて、起動する必要が有ります。

（NAudioo に関連するプラグインなどを入れて開発したので、それらと一緒にする必要が有ります。）

```cmd
実行フォルダ
  ├─ ★★オーディオ機器情報取得.exe★★
  ├─ Microsoft.Win32.Registry.dll
  ├─ Microsoft.Win32.Registry.xml
  ├─ NAudio.Asio.dll
  ├─ NAudio.Core.dll
  ├─ NAudio.dll
  ├─ NAudio.Midi.dll
  ├─ NAudio.Wasapi.dll
  ├─ NAudio.WinForms.dll
  ├─ NAudio.WinMM.dll
  ├─ NAudio.xml
  ├─ System.Security.AccessControl.dll
  ├─ System.Security.AccessControl.xml
  ├─ System.Security.Principal.Windows.dll
  ├─ System.Security.Principal.Windows.xml
  ├─ WpfApp1.exe.config
  └─ WpfApp1.pdb
```

# おわりに

ノートパソコンに接続されているオーディオ機器の情報を、ボタン一つで取得することができるようになりました。

こちらは私の Windows10 便利化計画へは参画しなさそうですが、もしかしたら今後使用るかもしれないということで、一応調査してプロトタイプ作成をしてみました。

誰かのお役に立てればと思います。