それで、私はSDL_mixerに問題があり、かなりの量のmp3で問題なく再生されるようです(ただし、「問題ありません」。一部のMP3の最初に、音の破損の小さなセグメントがあり、その後再生が開始されることに気付きました)しかし、一部の MP3 ファイルでは、完全な無音だけが存在します。何も再生されないようです。そして、Mix_PlayMusic はエラーを返していないようで、他にも何もしていませんが、単一の音を出していないようです。これらのファイルを再生しようとすると、ランダムに「Access Reading Violation」が表示されることがありますが、それ以外の場合は無音です。
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 エンコーディングのものは動作しないように見えることだけのようです。これを説明できる人はいますか?
編集:さらにテストした後、他のものでも発生するようです