2011-03-30 8 views

답변

1

아마도 가장 쉬운 방법은 필요한 길이의 침묵을 유지하고 적절하게 대기열에 넣는 버퍼를 생성하는 것입니다. 샘플 속도와 원하는 묵음 길이를 기반으로 배열을 0으로 채우고 버퍼로 전달하면됩니다.

일을 더 복잡하게하려면 모든 버퍼를 대기시킬 수 없습니다. 지금 재생해야하는 큐를 대기시키고 완료 될 때 타이머를 설정합니다 (침묵 시간도 경과했습니다). 그런 다음 다음 버퍼를 대기시킬 수 있습니다. 또는 소스를 폴링하여 멈췄는지 여부를 확인할 수 있습니다. 이것은 나를 위해 일한 : 당신은 또한


편집 ... 스트리밍 기능을 사용할 수 있습니다. 샘플 속도는 소스에 대기중인 다른 버퍼와 동일해야합니다. 또한 '가장 큰 공통 분모'길이 버퍼를 가질 수 있으며 여러 번 큐업 할 수 있습니다.

int sampleRate=22050; 
double sTime=2.5;  // How long to maintain silence. 
int sampleCount= int(sTime*sampleRate); 
int byteCount = sampleCount*sizeof(short); 
short* silence = (short*)malloc(byteCount); 
memset(silence,0,byteCount); 

alBufferData(silenceBuffer,AL_FORMAT_MONO16,silence,byteCount,sampleRate); 
alSourceQueueBuffers(mySource,1,&silenceBuffer); 

free(silence); 
+0

나는이 아이디어를 가지고 싶습니다.하지만이 부분은 "샘플 속도 **와 ** 원하는 길이의 무음 **에 기초한 제로로 가득 찬 배열을 만들어야합니다. ** 그리고 그것을 버퍼에 전달하십시오. " 정확히 어떻게 해야할지 모르겠습니다. :(이제 alBufferData를 사용하여이 작업을 수행하려고합니다. D –

+0

좋아, 어떻게 든 작동하며 침묵의 지속 시간을 제어 할 수 있지만 침묵이 아니라는 소리를 들려줍니다 ... 어떤 이유일까요? –

+1

히스 버퍼에서 가비지 데이터를 제안합니다. 먼저 0을 출력 했습니까? – JCooper

관련 문제