JP Coders

Published on

C#で現在のシステムの音量を取得する [C#チュートリアル]

Windowsパソコン上からC#プログラミング言語を使用して、C#で現在のシステムの音量を取得する方法について紹介します。

C#でリアルタイムに流れてる音の音量を取得します。

C#を3年越しくらいに弄りました。ほぼはじめてC#やる感じになるので、C#入門・チュートリアルみたいな感じの記事になります。メイン内容のシステム音量云々だけ知りたいのだがという方は適当に飛ばして、どうぞ。

csc.exeで外部dllモジュールを読み込む

現在のシステムの音量を取得するため、NAudio.dllというモジュールを使用します。

NAudio - CodePlex Archive

dllモジュールを読み込まずにコンパイルをしようとするとerror CS0246エラーが出ます。

dllを読み込むにはどうしたらいいんだ、というと、csc.exeに/rオプションでファイルへのパスを指定してやることで勝手に読み込んでくれるようです。

C:\Users\Noob\csharp>csc test.cs /r:SnarlNetwork.dll

c# - Why am I getting error CS0246: The type or namespace name could not be found? - Stack Overflow

csc /helpでヘルプが見れますので、/rがどういうものなのか見てみます。 /reference:<file list> 指定されたアセンブリ ファイルのメタデータを参照とありますね。

PS C:\pg> csc.exe /help | sls "/r"

 /refout:<file>                生成する参照アセンブリ出力
 /recurse:<wildcard>           ワイルドカードの指定に従い、現行ディレクトリおよび
 /reference:<alias>=<file>     指定されたエイリアスを使用して、指定された
                               アセンブリ ファイルのメタデータを参照します (短い形式: /r)
 /reference:<file list>        指定されたアセンブリ ファイルのメタデータを参照
                               します (短い形式: /r)
 /resource:<resinfo>           指定されたリソースを埋め込みます (短い形式: /res)
 /refonly                      メイン出力の代わりに参照アセンブリを生成します
 /ruleset:<file>               特定の診断を無効にするルールセット ファイルを
 /reportanalyzer               追加のアナライザー情報を報告します

軽く総当りで検証をしてみましたので参考にどうぞ。

cp '/mnt/c/Program Files/BlueStacks/NAudio.dll' .

'/mnt/c/Program Files (x86)/Microsoft Visual Studio/2017/Community/MSBuild/15.0/Bin/Roslyn/csc.exe' dev-cs.cs NAudio.dll  
# => error

'/mnt/c/Program Files (x86)/Microsoft Visual Studio/2017/Community/MSBuild/15.0/Bin/Roslyn/csc.exe' dev-cs.cs "C:/Program Files/BlueStacks/NAudio.dll"  
# => error

'/mnt/c/Program Files (x86)/Microsoft Visual Studio/2017/Community/MSBuild/15.0/Bin/Roslyn/csc.exe' dev-cs.cs /r:NAudio.dll
# => success

'/mnt/c/Program Files (x86)/Microsoft Visual Studio/2017/Community/MSBuild/15.0/Bin/Roslyn/csc.exe' dev-cs.cs /r:./NAudio.dll  
# => success

'/mnt/c/Program Files (x86)/Microsoft Visual Studio/2017/Community/MSBuild/15.0/Bin/Roslyn/csc.exe' dev-cs.cs /r:"C:/Program Files/BlueStacks/NAudio.dll"  
# => success

'/mnt/c/Program Files (x86)/Microsoft Visual Studio/2017/Community/MSBuild/15.0/Bin/Roslyn/csc.exe' dev-cs.cs /r:"C:\Program Files\BlueStacks\NAudio.dll"  
# => success

上記の通り、パスは絶対パスでも相対パスでもいけるようです。helpする前までは、/rとあったからrelativerかと思っていました。

c# - Can I load a .NET assembly at runtime and instantiate a type knowing only the name? - Stack Overflow reflection - Loading DLLs at runtime in C# - Stack Overflow

現在のシステムの音量を取得する

以下の通りファイルを作成し、コマンドで実行します。

'/mnt/c/Program Files (x86)/Microsoft Visual Studio/2017/Community/MSBuild/15.0/Bin/Roslyn/csc.exe' dev-cs.cs /r:"C:\Program Files\BlueStacks\NAudio.dll" ; ./dev-cs.exe

dev-cs.cs

using NAudio.CoreAudioApi;
// using System.Console;
using System;

namespace Dev
{
  public static class Program
  {
    public static void Main(params string[] args)
    {
      // System.Console.WriteLine("Hello !!");

      MMDeviceEnumerator devEnum = new MMDeviceEnumerator();
      MMDevice defaultDevice = devEnum.GetDefaultAudioEndpoint(DataFlow.Render, Role.Multimedia);

      Console.WriteLine( "The realtime volume is " + defaultDevice.AudioMeterInformation.MasterPeakValue.ToString() );


    }
  }
}
audio - Get Master Sound Volume in c# - Stack Overflow

して、以下のような出力が得られます。

https://yuis.xsrv.jp/images/ss/ShareX_ScreenShot_9fb19bdb-c200-41b8-96f9-60057c3e3450.png
yuis ASUS /mnt/c/pg/cs$ '/mnt/c/Program Files (x86)/Microsoft Visual Studio/2017/Community/MSBuild/15.0/Bin/Roslyn/csc.exe' dev-cs.cs /r:"C:\Program Files\BlueStacks\NAudio.dll" ; ./dev-cs.exe
Microsoft (R) Visual C# Compiler バージョン 2.7.0.62715 (db02128e)
Copyright (C) Microsoft Corporation. All rights reserved.

The realtime volume is 0

音楽を流したりしていれば、この数値が変動します。

結論

https://yuis.xsrv.jp/data/MjQuC3Aeoxgi4YZvwYxCRCXfuwXbGI1H.png

割と簡単に実装できましたね。2時間の作業でここまでできたので、わりかしスムーズだったと思います。そのうち時間あるときにawesomeでも見ながらたまにC#いじっていきたいかなと思います。

quozd/awesome-dotnet: A collection of awesome .NET libraries, tools, frameworks and software
Authors
  • avatar
  • Name
  • 情報技術者 / Z世代プログラマー / 米大学院にてデータサイエンスを学ぶ

  • ITプロフェッショナルとして活動しています。React.js等のモダンなウェブ制作・アプリ開発を得意としており、Java・Python・Rust等のプログラミング言語を用いたソフトウェア開発全般を行っています。

お手伝いできますか? 🤝

他の方法でのご連絡をご希望ですか?
web制作ご依頼受付中

本記事で掲載している情報やコードは執筆時点のものであり、動作を保証するものではありません。 自己責任のもと、プログラムの実行や情報の利用にあたってはご注意ください。


本記事には提携する企業の広告が含まれる場合があります。