문제

각 키가 1에서 9까지의 샘플러 프로그램을 만들고 있습니다. 모든 것이 잘 작동하지만 동시에 두 개 (또는 그 이상) 소리를 누르면 두 번째는 첫 번째 소리를 "죽인다".

.wav 파일에서 사운드를 사용하고 있습니다 SoundPlayer. 이것을 어떻게 해결할 수 있습니까?

도움이 되었습니까?

해결책

DirectX (DirectSound) 또는 동시에 여러 사운드를 재생하도록 설계된 유사한 API를 사용해야합니다.

다른 팁

C# 또는 vb.net에서 한 번에 여러 사운드를 재생하는 간단한 방법이 하나 있습니다. 당신은 전화해야합니다 mciSendString() API 함수 각 .wav 파일을 재생합니다. 루프 플레이를하지 않는 한 멀티 스레딩을 할 필요조차 없습니다. 여기 a의 완전한 작업 예입니다 MusicPlayer 사용한 클래스 mciSendString().

// Sound api functions
[DllImport("winmm.dll")]
static extern Int32 mciSendString(string command, StringBuilder buffer, int bufferSize, IntPtr hwndCallback);

위의 함수에서 키는 첫 번째 매개 변수 명령입니다. 별도의 명령 이름으로 두 기능을 호출하는 한 별도로/동시에 재생됩니다. 이것이 제가 C# 프로그램 중 하나에서 한 일입니다.

private void PlayWorker()
{
    StringBuilder sb = new StringBuilder();
    mciSendString("open \"" + FileName + "\" alias " + this.TrackName, sb, 0, IntPtr.Zero);
    mciSendString("play " + this.TrackName, sb, 0, IntPtr.Zero);
    IsBeingPlayed = true;
}

편집 : 작업 예제에 링크가 추가되었습니다.

당신은 이것을 할 수 있습니다 :

SoundPlayer WAV 스트림을 지원합니다. 당신은 할 수 있습니다

  • 'By-Hand'및
  • 가짜 (어딘가에서 wav 헤더를 얻으십시오. 복잡하지 않습니다).

매개 변수와 같은 스트림을 제공합니다 그만큼 SoundPlayer 건설자.

그렇게하면 어떻게 든 복잡한 DirectSound 라이브러리를 사용할 필요가 없으며 여전히 믹싱 (한 번에 여러 사운드)이 있습니다.

Keypress 이벤트 (또는 사용중인 무엇이든)에서 WAV 파일로의 경로를 가져 오는 생성자를 사용하여 새로운 사운드 플레이어 인스턴스를 만들고 재생 메소드를 호출한다고 생각합니다. 이론적으로 이것은 Windows가 Windows 98 이후 동시에 여러 WAV 파일을 동시에 재생할 수 있었기 때문에 발생하는 "모노"효과를 유발해서는 안됩니다. 두 번째 사운드가 시작될 때 첫 번째 사운드의 컷오프가 아니라 실제로 WAV 파일이 디스크에서로드 될 때 전체 재생 일시 중지로 인한 글리치입니다.

각 키 프레스에서 새로운 사운드 플레이어 인스턴스를로드하는 대신 클래스 스코프 드 사운드 플레이어 객체 배열을 만들고 양식의로드 이벤트에서 디스크에서 사전로드하십시오. 그런 다음 키를 누르면 각 Soundplayer의 재생 방법을 호출하십시오. 이것은 당신이 여전히 이런 식으로 때때로 결함을 얻을 것이라고 생각하지만 문제를 해결할 수 있습니다.

using System.Windows.Media

Function void Play(string audioPath)
{
MediaPlayer myPlayer = new MediaPlayer();
myPlayer.Open(new System.Uri(audioPath));
myPlayer.Play();
}

Play(Application.StartupPath + "\\Track1.wav");
Play(Application.StartupPath + "\\Track2.wav");

이 코드는 재생 될 수 있습니다 오디오 파일은 동시에 두 번째 오디오로 호출됩니다 track2.wav 놀이를 방해하지 않을 것입니다 track1.wav .

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top