2010-04-19 5 views
3

나는이가 비스타에서C# XP 사운드 QuickFix가

을 /를 FireAttackProc에 사운드 클립을 WIN7 재생됩니다.

그러나 XP에서는 FireAttackProc에 포함 된 로직이 실행되지만 사운드 클립은 재생되지 않습니다.

XP에서 사운드가 재생 될 수있는 빠른 해결책이 있습니까?

나는 Vista/Win7에서 완벽하게 실행할 수 있다는 것이 행복하기 때문에 빠른 솔루션을 요구하지만 빠른 솔루션이 있다면 XP도 함께 사용할 수있어 좋을 것입니다.

감사합니다.

+0

Letters 변수에 항상 사운드 리소스 이름 _Letters에 해당하는 것이 포함되어 있는지 확인할 수 있습니까? –

+0

lock() 블록을 (적어도 일시적으로) 제거하면 어떻게됩니까? _procLock에 너무 많은 코드가 잠겨 있다는 것이 이상하게 보입니다. 이 자물쇠가 당신이 의도하지 않은 것들을 금지하고있을 가능성이 있습니다 :-) –

+0

@Bob : 예. 나는 그것을 확인 했으므로 문제는 없습니다. lock()은 논리적 인 흐름을 구현합니다. 즉 이미 처리하는 동안 다른 것을 처리하지 않습니다. – iTEgg

답변

1

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에서 테스트를 마쳤습니다.