@wolf-9830 Раз SDL_mixer ставился из исходного кода, тогда вы где-то ошиблись с зависимостями. Как я понял, вы собираете не старую версию SDL_mixer 1.2, которая сейчас используется огромным количеством софта, а новую SDL_mixer 2.0, пакеты которой пока отсутствуют в репозиториях.
Смотрите: SDL_mixer является лишь враппером и для проигрывания файлов формата *.ogg, *.flac и *.mp3 использует сторонние библиотеки, такие как libogg/libvorbis, libflac и libmad соответственно.
С такими зависимостями собрана библиотека SDL_mixer 1.2 в моей системе (она была установлена из репозитория):
Depends: libflac-dev (>= 1.2.1)
Depends: libmad0-dev (>= 0.15.1b)
Depends: libmikmod2-dev (>= 3.1.11)
Depends: libogg-dev (>= 1.2.0)
Depends: libsdl-mixer1.2 (= 1.2.12-3)
Depends: libsdl1.2-dev (>= 1.2.14~)
Depends: libvorbis-dev (>= 1.2.0)
Я вижу два выхода из вашей ситуации:
1. Установить необходимые зависимости из репозиториев:
sudo apt-get install libflac-dev libmad0-dev libogg-dev libvorbis-dev libmikmod2-dev
Затем пересобрать SDL_mixer 2.0:
./configure --enable-music-mod-mikmod --enable-music-mod-mikmod-shared --enable-music-mp3-mad-gpl --enable-music-ogg --enable-music-flac
make -j4
sudo make install
Обратите внимание на то, что во время конфигурирования необходимые библиотеки (libogg, libflac libmad и др.) определились нормально.
checking for libmikmod-config... /usr/bin/libmikmod-config
checking for libmikmod - version >= 3.1.10... yes
-- dynamic libmikmod -> libmikmod.so.2
...
checking vorbis/vorbisfile.h usability... yes
checking vorbis/vorbisfile.h presence... yes
checking for vorbis/vorbisfile.h... yes
checking for ov_open_callbacks in -lvorbisfile -lvorbis -logg -lm... yes
-- dynamic libvorbisfile -> libvorbisfile.so.3
...
checking for FLAC__stream_decoder_new in -lFLAC... yes
-- dynamic libFLAC -> libFLAC.so.8
...
checking for libmad headers... yes
Это самый простой выход из вашей ситуации.
2. Второй способ заключается в том, что вы должны скомпилировать самостоятельно все зависимости, необходимые SDL_Mixer 2.0. Я однажды сталкивался с подобным и
написал как правильно собирать SDL_mixer (правда версии 1.2 и для MinGW (Windows)), но шаги для GNU/Linux и SDL_mixer 2.0 будут те же самые.
Это наиболее сложный и времязатратный способ.
После того, как библиотека с зависимостями собрана, с ее помощью можно проигрывать файлы различных форматов.
В вашем случае:
#include <SDL.h>
#include <SDL_mixer.h>
#include <iostream>
int main(int argc, char *argv[]) {
SDL_Init(SDL_INIT_EVERYTHING);
Mix_OpenAudio(44100, MIX_DEFAULT_FORMAT, 2, 1024);
std::cout << Mix_GetError() << std::endl;
Mix_Music *mus;
mus = Mix_LoadMUS("m.ogg");
std::cout << Mix_GetError() << std::endl;
Mix_PlayMusic(mus, 1);
SDL_Event event;
int done = 0;
while(!done && Mix_PlayingMusic()) {
while (SDL_PollEvent(&event)) {
if (event.type == SDL_QUIT) {
done = 1;
}
if (event.type == SDL_KEYDOWN) {
if (event.key.keysym.sym == SDLK_ESCAPE) {
done = 1;
}
}
}
}
Mix_FreeMusic(mus);
Mix_Quit();
SDL_Quit();
}