C# Volume Auto Control Volume limit Program 자동 볼륨 조절 제한 프로그램
C# 2023. 10. 31. 13:54 |아이들이 컴퓨터로 영상을 보거나 게임할 때 습관적으로 소리를 너무 크게 해 놓는 경우가 많다. 소리를 줄이라고 말해도 그때 뿐, 다시 크게 해 놓곤 한다. 시스템 볼륨에 제한을 두고 일정 수준 이상으로 올라가면 자동으로 내리는 프로그램(Turn It Down)을 만들어 보자.
※ 참고
2021.11.21 - [C#] - C# Media Player Mp3
2022.01.06 - [C#] - C# AudioSwitcher System Audio/Sound Volume Control - 시스템 오디오/사운드 볼륨 컨트롤 1
2023.10.28 - [C#] - C# Sound Meter 사운드 미터
위 링크의 내용들을 참고해 코드를 작성한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
|
using System;
using System.Runtime.InteropServices;
using System.Windows.Media;
using AudioSwitcher.AudioApi.CoreAudio;
using NAudio.CoreAudioApi;
namespace ConsoleApp1
{
class Program
{
[DllImport("kernel32.dll")]
static extern IntPtr GetConsoleWindow();
[DllImport("user32.dll")]
static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);
// Usage: filename [maxVol(0~100)] [playTime(sec)]
static void Main(string[] args)
{
const int SW_HIDE = 0; // 창 숨기기
IntPtr handle = GetConsoleWindow();
ShowWindow(handle, SW_HIDE);
MediaPlayer MP = new MediaPlayer();
MP.Open(new Uri("turndown.mp3", UriKind.Relative));
int maxVol;
if (args.Length > 0)
maxVol = int.Parse(args[0]);
else
maxVol = 20;
int playTime;
if (MP.NaturalDuration.HasTimeSpan)
playTime = MP.NaturalDuration.TimeSpan.Milliseconds;
else if (args.Length > 1)
playTime = int.Parse(args[1]) * 1000;
else
playTime = 6000;
// 미디어 파일 시간 정보가 없다면 적당한 값을 넣는다.
MMDeviceEnumerator enumerator = new MMDeviceEnumerator();
MMDevice device = enumerator.GetDefaultAudioEndpoint(DataFlow.Render, Role.Console);
// MMDeviceEnumerator를 CoreAudioController 보다 먼저 초기화해야 한다.
CoreAudioDevice defaultPlaybackDevice = new CoreAudioController().DefaultPlaybackDevice;
// defaultPlaybackDevice.Volume: 시스템 볼륨(0~100)
// device.AudioMeterInformation.MasterPeakValue: 시스템 오디오 값(0~1)
while (true)
{
float masterPeakValue = device.AudioMeterInformation.MasterPeakValue;
if (defaultPlaybackDevice.Volume > maxVol && masterPeakValue > 0.3f)
// 볼륨이 maxVol 보다 크고 오디오 값이 0.3보다 크다면..
{
MP.Play();
System.Threading.Thread.Sleep(playTime); // 메세지 재생 대기
MP.Stop();
defaultPlaybackDevice.Volume = maxVol; // 볼륨 감소
}
System.Threading.Thread.Sleep(1000); // 1초 마다 확인
}
}
}
}
|
위 압축 파일에는 실행에 필요한 모든 파일과 설치 배치파일이 들어 있다.
아이들 컴퓨터에 이렇게 세팅해 놓고 재부팅하면 프로그램이 자동으로 시작된다. 물론 어떤 UI도 없기 때문에 아이들은 이 프로그램이 실행되었다는걸 인식할 수 없다. 초기 조건은 시스템 볼륨 20 이상이고 오디오로 출력되는 소리 값이 0.3 이상이면 지정한 MP3 파일이 플레이되고 볼륨이 20으로 줄어든다.
ex) 시스템 볼륨을 70으로 해 놓고 유튜브 영상을 보면 볼륨을 줄인다는 MP3 메세지가 플레이되고 볼륨이 20으로 줄어든다.
플레이되는 MP3 메세지는 C:\turnitdown 폴더의 turndown.mp3인데, 원하는 메세지를 녹음해서 바꿀 수 있다.
설치시 제공되는 MP3파일에는 내 조카(준석이)를 위한 메세지가 녹음되어 있다.
메세지를 바꾸거나 볼륨 제한 조건을 바꾸고 싶다면 run.bat 파일을 수정한다.
예를들어 볼륨 제한을 35로 바꾸고, 메세지가 녹음된 MP3파일이 8초로 바뀌었다면 run.bat 파일에서 위 그림과 같이 20 6으로 된 부분을 35 8로 바꾼다.
'C#' 카테고리의 다른 글
C# Sound Meter 사운드 미터 (0) | 2023.10.28 |
---|---|
C# Type Class 타입 클래스 (0) | 2022.07.20 |
C# Joystick(Gamepad) Input Check - 조이스틱(게임패드) 입력 확인 2 (0) | 2022.04.06 |
C# Joystick(Gamepad) Input Check - 조이스틱(게임패드) 입력 확인 1 (0) | 2022.04.05 |
C# Console Key Input Check - 콘솔 키 입력 확인 (0) | 2022.04.05 |