Нет звука с SDL_mixer

Я читал и пробовал все другие сообщения в этой теме, но ничего не помогло. Когда я пытаюсь воспроизвести музыку с помощью Mix_PlayChannel(), я не получаю сообщения об ошибке и не слышу звука! Я пробовал уже несколько часов, и ничего не помогает. Программа просто счастливо завершается. Но нет звука! Я использую Ubuntu 12.04 64bit.

Спасибо!

[ИЗМЕНИТЬ]

Вот код, который я использую:

#include <iostream>
#include <SDL/SDL.h>
#include <SDL/SDL_mixer.h>

int main(int argc, char** argv)  {

Mix_Music *music = NULL;
Mix_Chunk *wave = NULL;

SDL_Init(SDL_INIT_AUDIO);

int audio_rate = 44100;
Uint16 audio_format = AUDIO_S16; /* 16-bit stereo */
int audio_channels = 1;
int audio_buffers = 4096;

if(Mix_OpenAudio(audio_rate, audio_format, audio_channels, audio_buffers) < 0) {
    printf("Unable to open audio!\n");
    exit(1);
}

if(Mix_Init(MIX_INIT_MOD) != MIX_INIT_MOD)
    std::cout << "errer";

Mix_Volume(-1, MIX_MAX_VOLUME);

music = Mix_LoadMUS("1.wav");
wave = Mix_LoadWAV("1.wav");

if (music == NULL) {
    std::cout << "Could not load 1.wav\n";
std::cout << Mix_GetError();
}

if (wave == NULL) {
    std::cout << "Could not load 1.wav\n";
std::cout << Mix_GetError();
}

Mix_VolumeChunk(wave, MIX_MAX_VOLUME);
Mix_VolumeMusic(MIX_MAX_VOLUME);

Mix_PlayMusic(music, 0);
std::cout << Mix_GetError();
Mix_FadeInChannelTimed(-1, wave, 0, 100,1);
std::cout << Mix_GetError();

return 1;
}

Я пробую и PlayMusic(), и Mix_FadeInChannelTimed(). Оба файла загружаются корректно, но не воспроизводятся. Звук не отключается, wav-файл воспроизводится с помощью aplay или других инструментов. Я проверяю с помощью alsamixer, что все каналы открыты и не слишком низкие.


person beseder    schedule 04.07.2013    source источник
comment
А канал не заглушен? Громкость прибавлена? Или выход настроен на наушники, а вы ожидаете его через динамики, или что-то подобное?   -  person Some programmer dude    schedule 04.07.2013
comment
Теперь я узнал, что программа должна работать до тех пор, пока звук не закончил играть! Я добавил команду usleep() после команды воспроизведения, и она отлично работает. Так что нигде не упоминалось, что PlayMusic() не продолжает работать.   -  person beseder    schedule 08.07.2013
comment
Так вы сами ответили на свой вопрос? Если да, то, может быть, напишите ответ? .................. Я пропустил этот комментарий. Я попробовал это сам. Мой компилятор предупредил меня, что Mix_PlayMusic не принимает 3 аргумента. Выкинул последнюю, и звук заиграл нормально.   -  person Topological Sort    schedule 24.09.2014


Ответы (1)


Теперь я узнал, что программа должна работать до тех пор, пока звук не закончил играть! Я добавил команду usleep() после команды воспроизведения, и она отлично работает. Так что нигде не упоминалось, что PlayMusic() не продолжает работать.

person beseder    schedule 15.06.2015