【问题标题】:No Sound with SDL_mixerSDL_mixer 没有声音
【发布时间】:2015-06-15 15:51:19
【问题描述】:

我阅读并尝试了该主题的所有其他帖子,但没有任何帮助。当我尝试使用 Mix_PlayChannel() 播放音乐时,我没有收到错误消息,也没有听到任何声音!我现在尝试了几个小时,但没有任何帮助。程序就愉快地结束了。但是没有声音!我正在使用 Ubuntu 12.04 64 位。

谢谢!

[编辑]

这是我使用的代码:

#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 检查所有通道都是打开的并且不是太低。

【问题讨论】:

  • 频道没有静音?音量开大了吗?或者通过扬声器或类似的东西将输出设置为耳机?
  • 我现在发现程序需要运行直到声音播放完毕!我在播放命令之后添加了一个 usleep() 命令,它播放得很好。因此,确实没有提到 PlayMusic() 不会继续运行。
  • 那么你回答了你自己的问题吗?如果是这样,也许发布一个答案? ....................我错过了这条评论。我自己试过了。我的编译器警告我 Mix_PlayMusic 不接受 3 个参数。我把最后一个扔掉了,声音播放得很好。

标签: c++ ubuntu sdl-mixer


【解决方案1】:

我现在发现程序需要一直运行到声音播放完毕!我在播放命令之后添加了一个 usleep() 命令,它播放得很好。所以这确实没有提到 PlayMusic() 不会继续运行。

【讨论】:

    猜你喜欢
    • 2014-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-31
    • 2020-07-20
    • 2017-03-16
    相关资源
    最近更新 更多