運作我們有如下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依然兩個立體聲頻道上播放?它爲什麼以這種方式表現?
哪裏是你的SDL_OpenAudioDevice()?另外,爲什麼在AudioSpec結構上使用新的?你需要一次,最好放在堆棧上。 – keltar
@keltar我已更新回調函數。我正在做一個非常粗略的測試,沒有SDL_OpenAudioDevice()。後面的例子我正在使用它們。 – user2711681
我不明白。你沒有OpenAudioDevice()?那麼你沒有音頻。你如何驗證你還有2個頻道(順便說一句,不能保證你會得到你要求的,這就是爲什麼你有'期望'和'獲得')?你應該檢查'獲得的'結構域。或者,您的問題是爲什麼當您打開單聲道設備時,您聽到兩個揚聲器的聲音? – keltar