2013-10-08 2 views
0

다음과 같이 SDL 코드 스 니펫이 있습니다.요구 사항에 따라 SDL 오디오 채널이 작동하지 않습니다.

SDL_Init(SDL_INIT_VIDEO|SDL_INIT_AUDIO); 
atexit(SDL_Quit); 
g_pDisplaySurface = 
SDL_SetVideoMode(SCREEN_WIDTH,SCREEN_HEIGHT,0,SDL_ANYFORMAT); 
g_SpecDesired=new SDL_AudioSpec; 
g_SpecObtained=new SDL_AudioSpec; 
g_SpecDesired->freq=22050; 
g_SpecDesired->format=AUDIO_U8; 
g_SpecDesired->channels=1; 
g_SpecDesired->samples=8192; 
g_SpecDesired->callback=FOSDLAudioCallback; 
g_SpecDesired->userdata=NULL; 

콜백 함수는

void FOSDLAudioCallback(void* userdata,Uint8* buffer,int len) 
{ 
    int index; 
    printf("LEn is :%d",&len); 
    for(index=0;index<len;index++) 
    { 
    buffer[index]=rand()%256; 
    } 
} 

도 우리는 여전히 두 개의 스테레오 채널에서 재생 1 또는 2 채널을 변경 여기서 문제입니까? 왜 이런 식으로 행동합니까?

+0

당신의 SDL_OpenAudioDevice은()을? 또한 AudioSpec 구조체에서 새로운 기능을 사용하는 이유는 무엇입니까? 한번만 필요하면 스택에 배치하는 것이 좋습니다. – keltar

+0

@keltar 콜백 함수를 업데이트했습니다. SDL_OpenAudioDevice()를 사용하지 않고 매우 거친 테스트를하고 있습니다. 나중에 예제를 사용하고 있습니다. – user2711681

+0

나는 그것을 얻지 않는다. OpenAudioDevice()가 없습니다. 그렇다면 오디오가 없습니다. 어떻게 2 채널을 가지고 있는지 확인하는 방법 (btw, 요청한 것을 얻을 수 있다고 보장하지 않으므로 '원하는'과 '획득 한'이유가 무엇입니까?) '획득 한 '구조 필드를 점검해야합니다. 또는 귀하의 질문은 왜 당신이 모노 장치를 열어 두 스피커에서 소리를 듣고있어? – keltar

답변

1

obtained은 모노라고 말하면 모노입니다. 당신이 가진 스피커의 수를 의미하는 것이 아니라 채널 수를 의미합니다. 모노의 경우, 원하는 수의 스피커가있을 수 있지만 (6을 가정 해 봅시다), 아무 의미도 없지만 하나의 채널 만 다른 사운드를 재생하므로 모든 스피커가 매 순간 동일한 사운드를 재생합니다.

설정에 따라 보간하는 것은 오디오 드라이버의 직업입니다. 채널 수를 늘리려면 드라이버가 5.1 스테레오로 스테레오를 분리 할 수 ​​있습니다.

예를 들어, 왼쪽 스피커에서만 사운드를 재생하려면 사용 가능한 최대 컨텍스트를 만들고 해당 '왼쪽'스피커를 사용해야합니다. 여기

(2 개 채널 오디오 모드와 AUDIO_U8 필요 -이 일치하도록 초기화를 수정) 0 (완전 침묵)에 두 번째 채널을 채우는 콜백의 버전 수정 :

void FOSDLAudioCallback(void* userdata,Uint8* buffer,int len) 
{ 
    int index; 
    printf("LEn is :%d",&len); 
    for(index=0;index<len;index++) 
    { 
     buffer[index]= (index % 2) ? rand()%256 : 0; 
    } 
} 
+0

@하지만 모든 문서는 여기에 혼란스러운 1 채널의 모노를 가지고 있다고 주장합니다. 그래서 이것을 g_SpecObtained-> channels = 1로 설정했습니다. SDL_OpenAudio (g_SpecDesired, g_SpecObtained); // delete g_SpecDesired; SDL_PauseAudio (0); 하지만 두 스피커에서 모두 재생됩니다. – user2711681

+0

모노는 실제로 1 채널입니다. 채널과 스피커는 완전히 다른 것들입니다. 스피커에 매핑 된 채널이 운전자에게 달려 있습니다. 이 방법이 마음에 들지 않으면 가장 많은 수의 채널을 요청하고 필요한 스피커 만 사용하십시오 (단, 많은 스피커를 사용할 수 있다고 보장 할 수는 없습니다. 7.1 오디오라고 말하지만 2 명의 스피커 만 연결됨).), 어쩌면 - 어쩌면 - 운전자가 방해하지 않을 수도 있습니다. – keltar

+0

그래서이 경우에는 하나의 단일 채널로 모노 매핑을 데모 할 수 없습니다. 맞습니까? – user2711681

관련 문제