2012-03-06 2 views
5

내 응용 프로그램에는 약 60 개의 사운드 샘플이 있습니다. 강한 정확성으로 시간을 들여 플레이해야합니다. 5ms가됩니다. 사운드는 사용자 작업에 응답하여 재생되어야합니다. 그래서 나는 다음에 무슨 소리가 나올지 모르겠다. 모든 사운드에 대해 SoundEffectInstance를 미리 준비하는 것으로 생각했습니다. SoundEffectInstance를 만드는 데 시간과 메모리가 필요합니까? 메모리에 SoundEffect의 전체 복사본 또는 일부 포인터 정보가 있습니까? SoundEffectInstances를 미리 작성하면 응용 프로그램을 향상시킬 수 있습니까? 가능한 빨리 XNA에서 샘플을 재생할 수있는 다른 방법이 있습니까?사운드를 최대한 빨리 재생하는 방법은 무엇입니까?

+0

응용 프로그램의 모든 순간에 모든 소리가 필요합니까, 아니면 다른 화면에 할당 된 소리가 있습니까? – Msonic

+0

60 개의 소리로 적은 세트.사용자가 세트를 선택하면 세트의 모든 사운드가 될 수 있습니다. – xander27

답변

3

SoundEffect에는 실제 파형 데이터가 들어 있습니다. 많은 양의 메모리를 사용합니다 (파형 데이터에 필요한만큼).

SoundEffectInstance은 재생 (위치, 볼륨 등)에 대한 데이터와 재생을 위해 할당 된 "음성"에 대한 핸들을 포함하는 작은 개체입니다.

SoundEffect.Play을 사용하면 내부적으로 SoundEffectInstance이 생성됩니다. 또한 이러한 인스턴스를 풀링 할 수 있으므로 후속 호출에서 다시 만들 필요가 없습니다.

SoundEffectInstance을 생성하는 데는 약간의 시간과 메모리가 필요합니다. 30FPS (프레임 당 33ms)로 실행되는 게임의 사운드 효과의 경우 대기 시간은 지각 할 수 없어야합니다.


당신도 5ms의 문제, 당신은 DynamicSoundEffectInstance을 사용하여 자신 만의 오디오 믹서를 구현 필요 서로 다른 사운드 효과를 혼합하여 시퀀스 음악을 재생하려는 경우. 이렇게하면 사운드가 샘플과 동기화되도록 할 수 있습니다.


당신은 실시간으로 어떤 종류의 재생 "도구"를 만들려고하는 경우, 당신은 5ms의 아래로 당신의 입력 - 출력 대기 시간을 얻기 위해 노력하고 - 그럼 이제 포기. 5ms는 터무니없이 좋으며 일반적으로 전문 장비와 소프트웨어가 필요합니다.

가능한 한 입력 - 출력 대기 시간을 줄여야하는 경우 프레임 당 한 번 이상 입력을 폴링 할 수 있습니다. DSEI를 사용해야 할 것입니다. DSEI에 구성 가능한 재생 버퍼 크기가 있는지 확신 할 수 없지만 오디오 글리치를 도입하지 않으면 최대한 작게 만들어야합니다.

2

사용자가 세트를 선택하면 해당 사운드 효과를 사전에로드해야 나중에 액세스하는 것이 더 빠릅니다.

그러나 모든 사운드 효과, 특히 특정 화면이나 설정에서 필요하지 않은 사운드 효과를로드하지 않아야합니다. 또한 더 이상 필요하지 않은 음향 효과를 언로드해야합니다.

로드하려는 크기 및 수량에 따라 사운드 효과를로드하는 데 시간이 오래 걸립니다. 게임의 내용을로드/언로드하기위한 기본 로딩 화면을 만드는 것이 좋습니다 (대부분의 게임은 그렇게합니다). 사운드 효과를 짧게 유지해야하는 이유는 포인터뿐 아니라 메모리에 soundeffect (wav 형식일까요?)를로드하는 것입니다.

이미로드 된 사운드 효과는 매우 빠르게 재생됩니다 (지연은 감지 할 수 없음). 메모리 사용량을 사전에 미리로드하면 이 증가하여 응용 프로그램의 성능이이됩니다.

+0

모든 사운드 또는 SoundEffect에 대해 SoundEffectIstance 객체를 사전로드해야합니까? – xander27

+1

거기에 찾을 수있는 [link] (http://msdn.microsoft.com/en-us/library/microsoft.xna.framework.audio.soundeffect.aspx) ** "SoundEffect에서 생성 된 모든 SoundEffectInstance 개체는 메모리 리소스를 공유합니다. "**. 그래서 나는 여러 개의 'SoundEffectInstance'를 만들 수 있습니다. – xander27

관련 문제