C++ 我无意中延迟了一段混音
所以我正在尝试学习SDL并创建一个小游戏。当用户按下空格键时,应该会播放声音。这是可行的,但声音播放大约需要0.5秒。。。我该如何解决这个问题?我检查了实际的文件,看看延迟是否只是其中的一部分,结果证明并非如此C++ 我无意中延迟了一段混音,c++,user-interface,sdl,sdl-mixer,C++,User Interface,Sdl,Sdl Mixer,所以我正在尝试学习SDL并创建一个小游戏。当用户按下空格键时,应该会播放声音。这是可行的,但声音播放大约需要0.5秒。。。我该如何解决这个问题?我检查了实际的文件,看看延迟是否只是其中的一部分,结果证明并非如此 SDL,C++ + Win Vista. 以下是一些相关代码: ... Mix_OpenAudio( 22050, MIX_DEFAULT_FORMAT, 2, 4096 ) ... main() { ... Mix_PlayMusic( BG_
SDL,C++ + Win Vista.
以下是一些相关代码:...
Mix_OpenAudio( 22050, MIX_DEFAULT_FORMAT, 2, 4096 )
...
main()
{
...
Mix_PlayMusic( BG_Music, 0 ); //background music
while( quit == false )
{
fps.start();
fire.handleInput( event, ship.get_x_pos() );
...
}
句柄输入功能:
void lasersC::handleInput( SDL_Event &event, int x )
{
Uint8 *keystates = SDL_GetKeyState( NULL );
if ( keystates[ SDLK_SPACE ] && delay == 0)
{
Mix_PlayChannel(-1, laser, 0);
fired * F = new fired( NULL, S_HEIGHT - 50, x + 20 );
F->shot = lasers;
F->y_pos = S_HEIGHT - 50;
F->x_pos = x + 20;
weps.push_back( F );
delay = 10;
}
}
如果需要更多,请告诉我。编译SDL时通常会检查DirectX头(显然) 您可以尝试使用DirectX支持重新编译吗 另外,您在客户端强制执行了多少缓冲?这可能是个问题 编辑-在下面的评论之后:
我真的不知道这意味着什么。@buffering,Mix_OpenAudio(22050,Mix_DEFAULT_格式,24096)和buffer changing起作用了。我将其设置为2048,这很好,但1024似乎正确。但我不明白,我以为我的数字越高越好,但结果越糟。你有关于(缓冲区)参数在Mix_OpenAudio()中的具体作用的链接或解释吗?没有,但我在网上查过,1024似乎是一个标准。给我一点时间,我会试着想想原因。好的,谢谢。奇怪的是,你发现1024是我使用过的所有教程的标准,他们把4096。。哦,好的,谢谢你!这让我快发疯了。