SoundPlayer는 실제로 매우 부진하지만 .NET 2.0이 모두 포함되어 있습니다. 소리 재생 MCI를 사용 (this article 기준) 내 플레이어 대신에, 시도 :
http://pastebin.com/aVDWBJ45
당신은 (MP3와 같은) 다른 오디오 코덱을 사용할 수 있습니다, 그리고 당신은 한 번만 파일을로드 할 수있다 (그리고 공격 할 때마다 지연이 발생 함). 또한 추가 스레드를 만들지 않고 사운드를 비동기 적으로 재생할 수 있습니다.
정말 사용하기 쉽습니다. 소리를 식별하고자하는 항목 (예 : enum
, string
또는 int
)의 일반적인 인수를 사용하여 새 QueuedSamplesPlayer
을 간단히 만듭니다. 시작시 모든 사운드를로드하려면 AddSample
메서드를 사용하십시오. 그런 다음 파일을 동 기적 또는 비동기 적으로 재생하려면 Play
또는 PlayAsync
을 각각 사용하십시오.
PlayAsync
번으로 전화를 걸면 사운드가 차례대로 (현재 스레드 차단없이) 차례대로 재생됩니다. 사운드가 재생되는 동안 PlayAsync
으로 전화를 걸어도 재생할 사운드 대기열에 추가됩니다. 모든 사운드 재생이 끝나면 QueueEmpty 이벤트가 발생합니다.
이 플레이어는 Windows XP, Vista 및 7에서 테스트를 마쳤습니다.
Letters 변수에 항상 사운드 리소스 이름 _Letters에 해당하는 것이 포함되어 있는지 확인할 수 있습니까? –
lock() 블록을 (적어도 일시적으로) 제거하면 어떻게됩니까? _procLock에 너무 많은 코드가 잠겨 있다는 것이 이상하게 보입니다. 이 자물쇠가 당신이 의도하지 않은 것들을 금지하고있을 가능성이 있습니다 :-) –
@Bob : 예. 나는 그것을 확인 했으므로 문제는 없습니다. lock()은 논리적 인 흐름을 구현합니다. 즉 이미 처리하는 동안 다른 것을 처리하지 않습니다. – iTEgg