mirror of
https://github.com/mkxp-z/mkxp-z.git
synced 2025-09-10 12:02:53 +02:00
clean up stuff + add multitrack setting to json
This commit is contained in:
parent
2490b8b76b
commit
1cfbac0c41
6 changed files with 61 additions and 48 deletions
|
@ -92,34 +92,36 @@ RB_METHOD(audio_bgmPlay)
|
|||
int volume = 100;
|
||||
int pitch = 100;
|
||||
double pos = 0.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); )
|
||||
int track = -127;
|
||||
rb_get_args(argc, argv, "z|iifi", &filename, &volume, &pitch, &pos, &track RB_ARG_END);
|
||||
GUARD_EXC( shState->audio().bgmPlay(filename, volume, pitch, pos, track); )
|
||||
return Qnil;
|
||||
}
|
||||
|
||||
RB_METHOD(audio_bgmStop)
|
||||
{
|
||||
RB_UNUSED_PARAM;
|
||||
int channel = -127;
|
||||
rb_get_args(argc, argv, "|i", &channel RB_ARG_END);
|
||||
shState->audio().bgmStop(channel);
|
||||
int track = -127;
|
||||
rb_get_args(argc, argv, "|i", &track RB_ARG_END);
|
||||
shState->audio().bgmStop(track);
|
||||
return Qnil;
|
||||
}
|
||||
|
||||
RB_METHOD(audio_bgmPos)
|
||||
{
|
||||
RB_UNUSED_PARAM;
|
||||
return rb_float_new(shState->audio().bgmPos());
|
||||
int track = 0;
|
||||
rb_get_args(argc, argv, "|i", &track RB_ARG_END);
|
||||
return rb_float_new(shState->audio().bgmPos(track));
|
||||
}
|
||||
|
||||
RB_METHOD(audio_bgmGetVolume)
|
||||
{
|
||||
RB_UNUSED_PARAM;
|
||||
int channel = -127;
|
||||
rb_get_args(argc, argv, "|i", &channel RB_ARG_END);
|
||||
int track = -127;
|
||||
rb_get_args(argc, argv, "|i", &track RB_ARG_END);
|
||||
int ret = 0;
|
||||
GUARD_EXC( ret = shState->audio().bgmGetVolume(); )
|
||||
GUARD_EXC( ret = shState->audio().bgmGetVolume(track); )
|
||||
return rb_fix_new(ret);
|
||||
}
|
||||
|
||||
|
@ -127,9 +129,9 @@ RB_METHOD(audio_bgmSetVolume)
|
|||
{
|
||||
RB_UNUSED_PARAM;
|
||||
int volume;
|
||||
int channel = -127;
|
||||
rb_get_args(argc, argv, "i|i", &volume, &channel RB_ARG_END);
|
||||
GUARD_EXC( shState->audio().bgmSetVolume(volume, channel); )
|
||||
int track = -127;
|
||||
rb_get_args(argc, argv, "i|i", &volume, &track RB_ARG_END);
|
||||
GUARD_EXC( shState->audio().bgmSetVolume(volume, track); )
|
||||
return Qnil;
|
||||
}
|
||||
|
||||
|
@ -142,9 +144,9 @@ 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);
|
||||
int track = -127;
|
||||
rb_get_args(argc, argv, "i|i", &time, &track RB_ARG_END);
|
||||
shState->audio().bgmFade(time, track);
|
||||
return Qnil;
|
||||
}
|
||||
|
||||
|
|
|
@ -372,6 +372,12 @@
|
|||
// this number. Maximum: 64.
|
||||
//
|
||||
// "SESourceCount": 6
|
||||
|
||||
// Number of streams to open for BGM tracks. If the game
|
||||
// needs multitrack audio, this should be set to as many
|
||||
// available tracks as the game needs. Maximum: 16.
|
||||
//
|
||||
// "BGMTrackCount": 1
|
||||
|
||||
|
||||
// The Windows game executable name minus ".exe". By default
|
||||
|
|
|
@ -27,6 +27,7 @@
|
|||
#include "sharedmidistate.h"
|
||||
#include "eventthread.h"
|
||||
#include "sdl-util.h"
|
||||
#include "exception.h"
|
||||
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
@ -37,9 +38,6 @@
|
|||
struct AudioPrivate
|
||||
{
|
||||
|
||||
// mkxp-z manages multiple streams of BGM.
|
||||
// play/pause states should be shared between them, so checking the state of the first
|
||||
// one should be enough to know what the rest are doing.
|
||||
std::vector<AudioStream*> bgmTracks;
|
||||
AudioStream bgs;
|
||||
AudioStream me;
|
||||
|
@ -94,6 +92,14 @@ struct AudioPrivate
|
|||
for (auto track : bgmTracks)
|
||||
delete track;
|
||||
}
|
||||
|
||||
AudioStream *getTrackByIndex(int index) {
|
||||
if (index < 0) index = 0;
|
||||
if (index > bgmTracks.size() - 1) {
|
||||
throw Exception(Exception::MKXPError, "requested BGM track %d out of range (max: %d)", index, bgmTracks.size() - 1);
|
||||
}
|
||||
return bgmTracks[index];
|
||||
}
|
||||
|
||||
void meWatchFun()
|
||||
{
|
||||
|
@ -287,60 +293,59 @@ void Audio::bgmPlay(const char *filename,
|
|||
int volume,
|
||||
int pitch,
|
||||
float pos,
|
||||
int channel)
|
||||
int track)
|
||||
{
|
||||
if (channel == -127) {
|
||||
if (track == -127) {
|
||||
for (auto track : p->bgmTracks)
|
||||
track->stop();
|
||||
|
||||
channel = 0;
|
||||
track = 0;
|
||||
}
|
||||
p->bgmTracks[clamp(channel, 0, (int)p->bgmTracks.size() - 1)]->play(filename, volume, pitch, pos);
|
||||
p->getTrackByIndex(track)->play(filename, volume, pitch, pos);
|
||||
}
|
||||
|
||||
void Audio::bgmStop(int channel)
|
||||
void Audio::bgmStop(int track)
|
||||
{
|
||||
if (channel == -127) {
|
||||
if (track == -127) {
|
||||
for (auto track : p->bgmTracks)
|
||||
track->stop();
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
p->bgmTracks[clamp(channel, 0, (int)p->bgmTracks.size() - 1)]->stop();
|
||||
p->getTrackByIndex(track)->stop();
|
||||
}
|
||||
|
||||
void Audio::bgmFade(int time, int channel)
|
||||
void Audio::bgmFade(int time, int track)
|
||||
{
|
||||
if (channel == -127) {
|
||||
if (track == -127) {
|
||||
for (auto track : p->bgmTracks)
|
||||
track->fadeOut(time);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
p->bgmTracks[clamp(channel, 0, (int)p->bgmTracks.size() - 1)]->fadeOut(time);
|
||||
p->getTrackByIndex(track)->fadeOut(time);
|
||||
}
|
||||
|
||||
int Audio::bgmGetVolume(int channel)
|
||||
int Audio::bgmGetVolume(int track)
|
||||
{
|
||||
if (channel == -127)
|
||||
return p->bgmTracks[channel]->getVolume(AudioStream::BaseRatio) * 100;
|
||||
if (track == -127)
|
||||
return p->bgmTracks[0]->getVolume(AudioStream::BaseRatio) * 100;
|
||||
|
||||
return p->bgmTracks[channel]->getVolume(AudioStream::Base) * 100;
|
||||
return p->getTrackByIndex(track)->getVolume(AudioStream::Base) * 100;
|
||||
}
|
||||
|
||||
void Audio::bgmSetVolume(int volume, int channel)
|
||||
void Audio::bgmSetVolume(int volume, int track)
|
||||
{
|
||||
float vol = volume / 100.0;
|
||||
if (channel == -127) {
|
||||
if (track == -127) {
|
||||
for (auto track : p->bgmTracks)
|
||||
track->setVolume(AudioStream::BaseRatio, vol);
|
||||
|
||||
return;
|
||||
}
|
||||
channel = clamp(channel, 0, (int)p->bgmTracks.size() - 1);
|
||||
p->bgmTracks[channel]->setVolume(AudioStream::Base, vol);
|
||||
p->getTrackByIndex(track)->setVolume(AudioStream::Base, vol);
|
||||
}
|
||||
|
||||
|
||||
|
@ -398,9 +403,9 @@ void Audio::setupMidi()
|
|||
shState->midiState().initIfNeeded(shState->config());
|
||||
}
|
||||
|
||||
float Audio::bgmPos()
|
||||
float Audio::bgmPos(int track)
|
||||
{
|
||||
return p->bgmTracks[0]->playingOffset();
|
||||
return p->getTrackByIndex(track)->playingOffset();
|
||||
}
|
||||
|
||||
float Audio::bgsPos()
|
||||
|
|
|
@ -42,11 +42,11 @@ public:
|
|||
int volume = 100,
|
||||
int pitch = 100,
|
||||
float pos = 0,
|
||||
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);
|
||||
int track = -127);
|
||||
void bgmStop(int track = -127);
|
||||
void bgmFade(int time, int track = -127);
|
||||
int bgmGetVolume(int track = -127);
|
||||
void bgmSetVolume(int volume = 100, int track = -127);
|
||||
|
||||
void bgsPlay(const char *filename,
|
||||
int volume = 100,
|
||||
|
@ -67,7 +67,7 @@ public:
|
|||
void seStop();
|
||||
|
||||
void setupMidi();
|
||||
float bgmPos();
|
||||
float bgmPos(int track = 0);
|
||||
float bgsPos();
|
||||
|
||||
void reset();
|
||||
|
|
|
@ -42,14 +42,13 @@ struct AudioStream
|
|||
* Multiplied together for final
|
||||
* playback volume. Used with setVolume().
|
||||
* Base is set by play().
|
||||
* BaseRatio is set by Audio::setVolume() when no specific channel is specified.
|
||||
It should be identical among all BGM tracks.
|
||||
* External is used by MeWatch */
|
||||
enum VolumeType
|
||||
{
|
||||
Base = 0,
|
||||
|
||||
// BaseRatio should be identical among all BGM tracks.
|
||||
BaseRatio,
|
||||
|
||||
FadeOut,
|
||||
FadeIn,
|
||||
External,
|
||||
|
|
|
@ -302,6 +302,7 @@ try { exp } catch (...) {}
|
|||
|
||||
rgssVersion = clamp(rgssVersion, 0, 3);
|
||||
SE.sourceCount = clamp(SE.sourceCount, 1, 64);
|
||||
BGM.trackCount = clamp(BGM.trackCount, 1, 16);
|
||||
|
||||
// Determine whether to open a console window on... Windows
|
||||
winConsole = getEnvironmentBool("MKXPZ_WINDOWS_CONSOLE", editor.debug);
|
||||
|
|
Loading…
Add table
Reference in a new issue