- Published on
C#で現在のシステムの音量を取得する [C#チュートリアル]
Windowsパソコン上からC#プログラミング言語を使用して、C#で現在のシステムの音量を取得する方法について紹介します。
C#でリアルタイムに流れてる音の音量を取得します。
C#を3年越しくらいに弄りました。ほぼはじめてC#やる感じになるので、C#入門・チュートリアルみたいな感じの記事になります。メイン内容のシステム音量云々だけ知りたいのだがという方は適当に飛ばして、どうぞ。
csc.exeで外部dllモジュールを読み込む
現在のシステムの音量を取得するため、NAudio.dllというモジュールを使用します。
NAudio - CodePlex Archivedllモジュールを読み込まずにコンパイルをしようとするとerror CS0246
エラーが出ます。
dllを読み込むにはどうしたらいいんだ、というと、csc.exeに/r
オプションでファイルへのパスを指定してやることで勝手に読み込んでくれるようです。
c# - Why am I getting error CS0246: The type or namespace name could not be found? - Stack OverflowC:\Users\Noob\csharp>csc test.cs /r:SnarlNetwork.dll
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
とあったからrelative
のr
かと思っていました。
現在のシステムの音量を取得する
以下の通りファイルを作成し、コマンドで実行します。
'/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() );
}
}
}
して、以下のような出力が得られます。
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
音楽を流したりしていれば、この数値が変動します。
結論
割と簡単に実装できましたね。2時間の作業でここまでできたので、わりかしスムーズだったと思います。そのうち時間あるときにawesomeでも見ながらたまにC#いじっていきたいかなと思います。
quozd/awesome-dotnet: A collection of awesome .NET libraries, tools, frameworks and software- Authors
- Name
- Shou Arisaka / 有坂 翔
- 情報技術者 / Z世代プログラマー / 米大学院にてデータサイエンスを学ぶ
- ITプロフェッショナルとして活動しています。React.js等のモダンなウェブ制作・アプリ開発を得意としており、Java・Python・Rust等のプログラミング言語を用いたソフトウェア開発全般を行っています。
- Github 🐙StackOverflow 🔥Qiita 📝
- TechFreeTools 🔧About.me 👤