diff --git a/binding/audio-binding.cpp b/binding/audio-binding.cpp index 82ff115b..f06e5915 100644 --- a/binding/audio-binding.cpp +++ b/binding/audio-binding.cpp @@ -92,7 +92,7 @@ RB_METHOD(audio_bgmPlay) int volume = 100; int pitch = 100; double pos = 0.0; - int channel = 0; + int channel = -127; rb_get_args(argc, argv, "z|iifi", &filename, &volume, &pitch, &pos, &channel RB_ARG_END); GUARD_EXC( shState->audio().bgmPlay(filename, volume, pitch, pos, channel); ) return Qnil; @@ -101,7 +101,9 @@ RB_METHOD(audio_bgmPlay) RB_METHOD(audio_bgmStop) { RB_UNUSED_PARAM; - shState->audio().bgmStop(); + int channel = -127; + rb_get_args(argc, argv, "|i", &channel RB_ARG_END); + shState->audio().bgmStop(channel); return Qnil; } @@ -135,7 +137,17 @@ DEF_PLAY_STOP_POS( bgs ) DEF_PLAY_STOP( me ) -DEF_FADE( bgm ) +//DEF_FADE( bgm ) +RB_METHOD(audio_bgmFade) +{ + RB_UNUSED_PARAM; + int time; + int channel = -127; + rb_get_args(argc, argv, "i|i", &time, &channel RB_ARG_END); + shState->audio().bgmFade(time, channel); + return Qnil; +} + DEF_FADE( bgs ) DEF_FADE( me ) diff --git a/src/audio/audio.cpp b/src/audio/audio.cpp index 2a1dc6ba..b514c250 100644 --- a/src/audio/audio.cpp +++ b/src/audio/audio.cpp @@ -283,20 +283,37 @@ void Audio::bgmPlay(const char *filename, float pos, int channel) { - // todo: error if the channel is out of range + if (channel == -127) { + for (auto chan : p->bgmChannels) + chan->stop(); + + channel = 0; + } p->bgmChannels[clamp(channel, 0, (int)p->bgmChannels.size() - 1)]->play(filename, volume, pitch, pos); } -void Audio::bgmStop() +void Audio::bgmStop(int channel) { - for (auto chan : p->bgmChannels) - chan->stop(); + if (channel == -127) { + for (auto chan : p->bgmChannels) + chan->stop(); + + return; + } + + p->bgmChannels[clamp(channel, 0, (int)p->bgmChannels.size() - 1)]->stop(); } -void Audio::bgmFade(int time) +void Audio::bgmFade(int time, int channel) { - for (auto chan : p->bgmChannels) - chan->fadeOut(time); + if (channel == -127) { + for (auto chan : p->bgmChannels) + chan->fadeOut(time); + + return; + } + + p->bgmChannels[clamp(channel, 0, (int)p->bgmChannels.size() - 1)]->fadeOut(time); } int Audio::bgmGetVolume(int channel) diff --git a/src/audio/audio.h b/src/audio/audio.h index e1f6ccaf..e3210680 100644 --- a/src/audio/audio.h +++ b/src/audio/audio.h @@ -42,9 +42,9 @@ public: int volume = 100, int pitch = 100, float pos = 0, - int channel = 0); - void bgmStop(); - void bgmFade(int time); + int channel = -127); + void bgmStop(int channel = -127); + void bgmFade(int time, int channel = -127); int bgmGetVolume(int channel = -127); void bgmSetVolume(int volume = 100, int channel = -127);