C#에서 사운드 재생

Syed Hassan Sabeeh Kazmi 2023년10월12일
  1. System.Media.SoundPlayer를 사용하여 C#에서 사운드 재생
  2. SystemSounds.Play 메서드를 사용하여 C#에서 사운드 재생
  3. 사운드 재생을 위해 C# 솔루션에 Windows Media Player 컨트롤 포함
  4. C# 프로젝트에 Microsoft.VisualBasic 참조를 추가하여 사운드 재생
C#에서 사운드 재생

이 자습서에서는 C#을 사용하여 Windows Forms에서 오디오 파일 또는 사운드를 재생하는 방법을 알려줍니다. 게임 개발이나 기술 응용 프로그램에 청중을 몰입시키는 데 사운드의 중요성을 부인할 수 없습니다.

C# 프로그래밍은 오디오 파일 또는 사운드를 Windows 응용 프로그램에 구현하는 네 가지 기본 방법을 제공하며, 각각 고유한 방식으로 유용하고 실용적입니다. 멀티플레이어용 .NET과 같은 풍부한 플랫폼을 사용하여 WAV 또는 기타 형식 파일용 사용자 지정 사운드 생성기를 쉽게 만들 수 있습니다.

또한 뛰어난 내장형 멀티플레이어(오디오) 지원을 통해 C#을 WPF 콘으로 사용하여 메모리에 직접 웨이브 파일(사운드 파일)의 바이트 기반 버퍼를 구축할 수 있습니다.

여기에서 이해해야 할 중요한 사항은 WAV 또는 웨이브 형식을 기반으로 사운드를 재생하는 SoundPlayer 클래스입니다. 대신 MediaPlayerMediaElement 클래스는 MP3 파일의 재생을 허용합니다.

System.Media.SoundPlayer를 사용하여 C#에서 사운드 재생

SoundPlayer 클래스는 파일 경로, 이름 및 System.Media 네임스페이스에 대한 참조가 필요하므로 런타임에 지정된 경로에서 사운드를 재생하는 데 도움이 될 수 있습니다.

System.Media 네임스페이스에 대한 참조를 선언하고 SoundPlayer _exp = new SoundPlayer(@"path.wav");를 사용할 수 있습니다. 개체 선언에서 네임스페이스를 언급하지 않고.

그런 다음 _exp.Play();와 같은 Play() 메서드를 사용하여 실행합니다. 가장 중요한 것은 사운드 재생과 같은 파일 작업이 문제가 발생하는 경우 효율성과 이해를 높이기 위해 적절하거나 적합한 구조적 예외 처리 블록 내에 포함되어야 한다는 것입니다. 경로 이름의 형식이 잘못되었거나 읽기 전용 사운드 파일 경로, null 경로 및 잘못된 오디오 파일 경로 이름이 오류를 유발할 수 있으며 다른 예외 클래스가 필요할 수 있습니다.

using System;
using System.Media;  // essential namespace for using `SoundPlayer`
using System.Windows.Forms;

namespace play_sound {
  public partial class Form1 : Form {
    // Initialize form components
    public Form1() {
      InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e) {}

    private void button1_Click(object sender, EventArgs e) {
      // object creation and path selection
      SoundPlayer player = new SoundPlayer(@"C:\Users\DELL\dark_souls_theme.wav");

      // apply the method to play sound
      player.Play();
    }
  }
}

출력:

SoundPlayer

SystemSounds.Play 메서드를 사용하여 C#에서 사운드 재생

기능(SystemSounds 클래스 제공)은 한 줄의 코드로 다양한 시스템 사운드를 제공하는 기능 외에도 C# 응용 프로그램에서 사운드를 구현하는 가장 간단한 방법 중 하나입니다. SystemSounds.Beep.Play();.

그러나 SystemSounds 클래스를 사용하는 데는 몇 가지 제한 사항이 있습니다. 별표, , 느낌표, 질문 및 Windows에서 시스템 소리를 비활성화하는 경우 이 방법은 작동하지 않으며 모든 소리가 무음으로 대체됩니다.

반면에 Windows와 동일한 방식으로 사운드를 매우 쉽게 재생할 수 있으며 C# 애플리케이션이 사용자의 무음 선택을 존중하는 것이 항상 좋은 선택입니다.

C# 프로젝트에서 System.Media에 대한 참조를 선언하거나 System.Media.SystemSounds.Asterrisk.Play();와 같은 것을 사용하십시오. 소리를 재생합니다.

using System;
using System.Media;  // essential namespace for `SystemSounds`
using System.Windows.Forms;

namespace play_sound {
  public partial class Form1 : Form {
    // initialize components
    public Form1() {
      InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e) {}

    private void button1_Click(object sender, EventArgs e) {
      SystemSounds.Asterisk.Play();  // you can use other sounds in the place of `Asterisk`
    }
  }
}

출력:

SystemSounds

Play() 메서드는 Windows OS 사운드 이벤트 유형 세트와 비동기적으로 연결된 사운드를 재생합니다. 시스템 사운드에 액세스하기 위한 정적 메서드를 제공하는 SystemSounds 클래스를 상속할 수 없습니다.

이러한 응용 프로그램이 Windows 환경에 완벽하게 적응하도록 도와주는 일반적인 시나리오에서 C# 응용 프로그램이 다른 시스템 사운드를 사용할 수 있도록 하는 높은 수준의 접근 방식입니다. 각 사용자 프로필이 이러한 소리를 재정의할 수 있도록 사운드 제어판에서 소리를 사용자 정의할 수 있습니다.

사운드 재생을 위해 C# 솔루션에 Windows Media Player 컨트롤 포함

C#에서 사운드를 재생하기 위해 Microsoft Visual Studio를 사용하여 Windows Media Player 컨트롤을 추가할 수 있습니다. Windows Media Player는 VS 도구 상자에 있으며 C# 응용 프로그램에서 해당 기능을 사용하려면 먼저 해당 구성 요소를 Windows Form에 추가합니다.

최신 버전의 Windows Media Player SDK를 시스템에 설치하고 COM 구성 요소에서 Windows Media Player 옵션을 추가하여 VS 도구 상자를 사용하여 액세스합니다. Visual Studio에서 Windows Media Player의 기본 이름은 axWindowsMediaPlayer1이며 기억하기 쉬운 이름으로 변경할 수 있습니다.

Windows Media Player ActiveX 컨트롤을 C# 프로젝트에 추가하고 버튼 클릭 이벤트에 구현합니다. 또한 두 가지 모드를 선택할 수 있습니다. Open 방법을 통해 열린 미디어와 유사한 Independent 모드와 재생을 제어하는 타이밍 트리의 타임라인 및 클록 항목에 해당하는 미디어 대상인 Clock 모드입니다. .

using System;
using System.Windows.Media;  // essential namespace
using System.Windows.Forms;

namespace play_sound {
  public partial class Form1 : Form {
    private MediaPlayer audio_player = new MediaPlayer();
    public Form1() {
      InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e) {}

    private void button1_Click(object sender, EventArgs e) {
      OpenFileDialog dialog_audio = new OpenFileDialog();
      dialog_audio.Filter = "MP3 files (*.mp3)|*.mp3|All files (*.*)|*.*";
      if (dialog_audio.ShowDialog() == DialogResult.OK) {
        audio_player.Open(new Uri(dialog_audio.FileName));
        audio_player.Play();
      }
    }

    private void button2_Click(object sender, EventArgs e) {
      // to pause audio
      audio_player.Pause();
    }

    private void button3_Click(object sender, EventArgs e) {
      // to resume the paused audio
      audio_player.Play();
    }
  }
}

출력:

Windows Media Player

가장 중요한 것은 MediaPlayer 클래스가 Windows Media Player 기술을 계승하여 오디오 파일과 시스템 사운드를 여러 최신 형식으로 재생한다는 것입니다. 그것의 도움으로 MediaPlayer 인스턴스에 의해 언급되거나 전달된 사운드 파일의 재생 프로세스를 제어할 수 있습니다.

C# 프로젝트에 Microsoft.VisualBasic 참조를 추가하여 사운드 재생

Audio 클래스는 Visual Basic에서 사운드 재생으로 매우 유명하며 응용 프로그램에 Visual Basic 바인딩을 포함하여 C#에서 이 클래스를 사용하면 이점을 얻을 수 있습니다. 그러나 SoundPlayer 클래스라는 Audio 클래스의 C# 특정 버전이 있지만 메모리에서 직접 웨이브의 쉬운 바이트 기반 버퍼 빌드를 허용하지 않습니다.

초기 단계로 C# 프로젝트에 Microsoft.VisualBasic 참조를 추가하고 static Audio my_obj = new Audio();와 같은 Audio 클래스에서 개체를 만듭니다. my_exp.Play("m:\\path.wav", AudioPlayMode.WaitToComplete);와 같은 사운드 파일 주소를 추가합니다.

AudioPlayMode를 직접 사용자 지정하거나 설정할 수 있으므로 사운드 재생 시간을 사용자 지정할 수 있습니다.

using System;
using System.Windows.Forms;
using Microsoft.VisualBasic;          // essential namespace
using Microsoft.VisualBasic.Devices;  // essential namespace

namespace play_sound {
  public partial class Form1 : Form {
    static Audio audio_player = new Audio();

    public Form1() {
      InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e) {}

    private void button1_Click(object sender, EventArgs e) {
      audio_player.Play(@"C:\Users\DELL\dark_souls_theme.wav", AudioPlayMode.WaitToComplete);
    }
  }
}

출력:

VisualBasic

오디오가 백그라운드에서 계속 재생되는 동안 Background 또는 BackgroundLoop 도구를 사용하여 다른 작업을 재개하는 것이 좋습니다.

선택 사항입니다. 그러나 압축되지 않은 WAV 파일을 학습하여 C# 코드만 사용하여 사용자 정의 사운드를 생성하고 시스템 메모리에서 직접 사운드를 생성할 수 있습니다.

이 자습서에서는 C#에서 사운드 파일을 효과적으로 재생하는 방법을 설명했습니다.

Syed Hassan Sabeeh Kazmi avatar Syed Hassan Sabeeh Kazmi avatar

Hassan is a Software Engineer with a well-developed set of programming skills. He uses his knowledge and writing capabilities to produce interesting-to-read technical articles.

GitHub