所以我在使用 SDL_mixer 时遇到了问题,它似乎在大量 mp3 上播放良好(虽然“很好”。我注意到在一些 MP3 的开头有一小段声音损坏,然后它开始播放)但在某些 MP3 文件中,只有绝对的沉默。好像什么都玩不了。而且 Mix_PlayMusic 似乎没有返回错误,也没有其他任何东西,但它似乎没有发出任何声音。有时我会在尝试播放这些文件时得到一个随机的“访问读取冲突”,但每隔一次,它只是沉默。
这是我用来播放 MP3 文件的代码:
#include "SDL.h"
#include "SDL_mixer.h"
#include <iostream>
bool initLibs()
{
//Initialize all SDL subsystems
if( SDL_Init( SDL_INIT_EVERYTHING ) == -1 )
{
return false;
}
int flags = MIX_INIT_MP3 | MIX_INIT_OGG;
if(Mix_Init(flags)!=flags)
{
return false;
}
//Initialize SDL_mixer
if( Mix_OpenAudio(MIX_DEFAULT_FREQUENCY, AUDIO_S16, 2, 4096 ) == -1 )
{
return false;
}
//If everything initialized fine
return true;
}
int main(int argc, char* argv[])
{
if(!initLibs())
{
std::cout << "error loading libraries" << std::endl;
}
Mix_Music* music = Mix_LoadMUS("test.mp3");
if(music == nullptr)
{
std::cout << "error loading music: " << Mix_GetError() << std::endl;
}
else
{
if(Mix_PlayMusic(music, -1) == -1)
{
std::cout << "error playing music: " << Mix_GetError() << std::endl;
}
}
SDL_Delay(30000);
system("PAUSE");
Mix_HaltMusic();
Mix_FreeMusic(music);
system("PAUSE");
return 0;
}
我正在检查 MP3 文件中的差异,似乎唯一真正的区别是具有 LAME3.99 编码的文件似乎不起作用。有人能解释一下吗?
编辑:经过更多测试,它似乎也发生在其他人身上