Merge pull request #12 from Bottinator22/main
Move instruments to their own audio group and volume setting
This commit is contained in:
commit
ea28fc8071
Binary file not shown.
Before Width: | Height: | Size: 1017 B After Width: | Height: | Size: 1.1 KiB |
@ -2,13 +2,13 @@
|
|||||||
"paneLayout" : {
|
"paneLayout" : {
|
||||||
"voiceLabel" : {
|
"voiceLabel" : {
|
||||||
"type" : "label",
|
"type" : "label",
|
||||||
"position" : [119, 186],
|
"position" : [119, 202],
|
||||||
"hAnchor" : "mid",
|
"hAnchor" : "mid",
|
||||||
"value" : "VOICE"
|
"value" : "VOICE"
|
||||||
},
|
},
|
||||||
"showVoiceSettings" : {
|
"showVoiceSettings" : {
|
||||||
"type" : "button",
|
"type" : "button",
|
||||||
"position" : [30, 169],
|
"position" : [30, 185],
|
||||||
"caption" : "Settings",
|
"caption" : "Settings",
|
||||||
"base" : "/interface/optionsmenu/duocontrolsbutton.png",
|
"base" : "/interface/optionsmenu/duocontrolsbutton.png",
|
||||||
"hover" : "/interface/optionsmenu/duocontrolsbuttonhover.png"
|
"hover" : "/interface/optionsmenu/duocontrolsbuttonhover.png"
|
||||||
@ -16,7 +16,7 @@
|
|||||||
"showVoicePlayers" : {
|
"showVoicePlayers" : {
|
||||||
"type" : "button",
|
"type" : "button",
|
||||||
"disabled" : true,
|
"disabled" : true,
|
||||||
"position" : [133, 169],
|
"position" : [133, 185],
|
||||||
"caption" : "^#a0a000,font=iosevka-semiboldoblique;TODO^#aa7;:^reset; Players",
|
"caption" : "^#a0a000,font=iosevka-semiboldoblique;TODO^#aa7;:^reset; Players",
|
||||||
"base" : "/interface/optionsmenu/duocontrolsbutton.png",
|
"base" : "/interface/optionsmenu/duocontrolsbutton.png",
|
||||||
"hover" : "/interface/optionsmenu/duocontrolsbuttonhover.png"
|
"hover" : "/interface/optionsmenu/duocontrolsbuttonhover.png"
|
||||||
@ -42,7 +42,15 @@
|
|||||||
"base" : "/interface/optionsmenu/tricontrolsbutton.png",
|
"base" : "/interface/optionsmenu/tricontrolsbutton.png",
|
||||||
"hover" : "/interface/optionsmenu/tricontrolsbuttonhover.png"
|
"hover" : "/interface/optionsmenu/tricontrolsbuttonhover.png"
|
||||||
},
|
},
|
||||||
"sfxValueLabel" : { "position" : [192, 142] }, // this is 2px too low in vanilla lol
|
|
||||||
"musicSlider" : { "position" : [62, 126] }
|
"volumeLabel" : { "position" : [119, 173] },
|
||||||
|
"musicSlider" : { "position" : [62, 126] },
|
||||||
|
|
||||||
|
"sfxLabel" : { "position" : [32, 142], "value" : "Sound" },
|
||||||
|
"sfxValueLabel" : { "position" : [192, 142] },
|
||||||
|
|
||||||
|
"instrumentSlider" : { "type" : "slider", "position" : [62, 158], "gridImage" : "/interface/optionsmenu/largeselection.png" },
|
||||||
|
"instrumentLabel" : { "type" : "label", "position" : [32, 158], "value" : "Tunes" },
|
||||||
|
"instrumentValueLabel" : { "type" : "label", "position" : [192, 158], "hAnchor" : "mid", "value" : "Replace Me" }
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -172,6 +172,7 @@ Mixer::Mixer(unsigned sampleRate, unsigned channels) {
|
|||||||
m_groupVolumes[MixerGroup::Effects] = {1.0f, 1.0f, 0};
|
m_groupVolumes[MixerGroup::Effects] = {1.0f, 1.0f, 0};
|
||||||
m_groupVolumes[MixerGroup::Music] = {1.0f, 1.0f, 0};
|
m_groupVolumes[MixerGroup::Music] = {1.0f, 1.0f, 0};
|
||||||
m_groupVolumes[MixerGroup::Cinematic] = {1.0f, 1.0f, 0};
|
m_groupVolumes[MixerGroup::Cinematic] = {1.0f, 1.0f, 0};
|
||||||
|
m_groupVolumes[MixerGroup::Instruments] = {1.0f, 1.0f, 0};
|
||||||
|
|
||||||
m_speed = 1.0f;
|
m_speed = 1.0f;
|
||||||
}
|
}
|
||||||
@ -296,7 +297,7 @@ void Mixer::read(int16_t* outBuffer, size_t frameCount, ExtraMixFunction extraMi
|
|||||||
? approach(audioInstance->m_pitchMultiplierTarget, audioInstance->m_pitchMultiplier, audioInstance->m_pitchMultiplierVelocity * time)
|
? approach(audioInstance->m_pitchMultiplierTarget, audioInstance->m_pitchMultiplier, audioInstance->m_pitchMultiplierVelocity * time)
|
||||||
: audioInstance->m_pitchMultiplier;
|
: audioInstance->m_pitchMultiplier;
|
||||||
|
|
||||||
if (audioInstance->m_mixerGroup == MixerGroup::Effects)
|
if (audioInstance->m_mixerGroup == MixerGroup::Effects || audioInstance->m_mixerGroup == MixerGroup::Instruments)
|
||||||
pitchMultiplier *= speed;
|
pitchMultiplier *= speed;
|
||||||
|
|
||||||
if (audioStopVolEnd == 0.0f && audioInstance->m_stopping)
|
if (audioStopVolEnd == 0.0f && audioInstance->m_stopping)
|
||||||
|
@ -23,7 +23,8 @@ struct RampedValue {
|
|||||||
enum class MixerGroup : uint8_t {
|
enum class MixerGroup : uint8_t {
|
||||||
Effects,
|
Effects,
|
||||||
Music,
|
Music,
|
||||||
Cinematic
|
Cinematic,
|
||||||
|
Instruments
|
||||||
};
|
};
|
||||||
|
|
||||||
class AudioInstance {
|
class AudioInstance {
|
||||||
|
@ -44,6 +44,7 @@ Json const AdditionalDefaultConfiguration = Json::parseJson(R"JSON(
|
|||||||
"audioChannelSeparation" : [-25, 25],
|
"audioChannelSeparation" : [-25, 25],
|
||||||
|
|
||||||
"sfxVol" : 100,
|
"sfxVol" : 100,
|
||||||
|
"instrumentVol" : 100,
|
||||||
"musicVol" : 70,
|
"musicVol" : 70,
|
||||||
"windowedResolution" : [1000, 600],
|
"windowedResolution" : [1000, 600],
|
||||||
"fullscreenResolution" : [1920, 1080],
|
"fullscreenResolution" : [1920, 1080],
|
||||||
|
@ -47,16 +47,16 @@ void MainMixer::update(float dt, bool muteSfx, bool muteMusic) {
|
|||||||
updateGroupVolume(MixerGroup::Effects, muteSfx, "sfxVol");
|
updateGroupVolume(MixerGroup::Effects, muteSfx, "sfxVol");
|
||||||
updateGroupVolume(MixerGroup::Music, muteMusic, "musicVol");
|
updateGroupVolume(MixerGroup::Music, muteMusic, "musicVol");
|
||||||
updateGroupVolume(MixerGroup::Cinematic, false, "sfxVol");
|
updateGroupVolume(MixerGroup::Cinematic, false, "sfxVol");
|
||||||
|
updateGroupVolume(MixerGroup::Instruments, muteSfx, "instrumentVol");
|
||||||
|
|
||||||
WorldClientPtr currentWorld;
|
WorldClientPtr currentWorld;
|
||||||
if (m_universeClient)
|
if (m_universeClient)
|
||||||
currentWorld = m_universeClient->worldClient();
|
currentWorld = m_universeClient->worldClient();
|
||||||
|
|
||||||
if (currentWorld) {
|
if (currentWorld) {
|
||||||
for (auto audioInstance : currentWorld->pullPendingAudio()) {
|
for (auto audioInstance : currentWorld->pullPendingAudio())
|
||||||
audioInstance->setMixerGroup(MixerGroup::Effects);
|
|
||||||
m_mixer->play(audioInstance);
|
m_mixer->play(audioInstance);
|
||||||
}
|
|
||||||
for (auto audioInstance : currentWorld->pullPendingMusic()) {
|
for (auto audioInstance : currentWorld->pullPendingMusic()) {
|
||||||
audioInstance->setMixerGroup(MixerGroup::Music);
|
audioInstance->setMixerGroup(MixerGroup::Music);
|
||||||
m_mixer->play(audioInstance);
|
m_mixer->play(audioInstance);
|
||||||
|
@ -20,6 +20,9 @@ OptionsMenu::OptionsMenu(PaneManager* manager)
|
|||||||
|
|
||||||
GuiReader reader;
|
GuiReader reader;
|
||||||
|
|
||||||
|
reader.registerCallback("instrumentSlider", [=](Widget*) {
|
||||||
|
updateInstrumentVol();
|
||||||
|
});
|
||||||
reader.registerCallback("sfxSlider", [=](Widget*) {
|
reader.registerCallback("sfxSlider", [=](Widget*) {
|
||||||
updateSFXVol();
|
updateSFXVol();
|
||||||
});
|
});
|
||||||
@ -67,6 +70,7 @@ OptionsMenu::OptionsMenu(PaneManager* manager)
|
|||||||
|
|
||||||
reader.construct(config.get("paneLayout"), this);
|
reader.construct(config.get("paneLayout"), this);
|
||||||
|
|
||||||
|
m_instrumentSlider = fetchChild<SliderBarWidget>("instrumentSlider");
|
||||||
m_sfxSlider = fetchChild<SliderBarWidget>("sfxSlider");
|
m_sfxSlider = fetchChild<SliderBarWidget>("sfxSlider");
|
||||||
m_musicSlider = fetchChild<SliderBarWidget>("musicSlider");
|
m_musicSlider = fetchChild<SliderBarWidget>("musicSlider");
|
||||||
m_tutorialMessagesButton = fetchChild<ButtonWidget>("tutorialMessagesCheckbox");
|
m_tutorialMessagesButton = fetchChild<ButtonWidget>("tutorialMessagesCheckbox");
|
||||||
@ -74,10 +78,12 @@ OptionsMenu::OptionsMenu(PaneManager* manager)
|
|||||||
m_clientP2PJoinableButton = fetchChild<ButtonWidget>("clientP2PJoinableCheckbox");
|
m_clientP2PJoinableButton = fetchChild<ButtonWidget>("clientP2PJoinableCheckbox");
|
||||||
m_allowAssetsMismatchButton = fetchChild<ButtonWidget>("allowAssetsMismatchCheckbox");
|
m_allowAssetsMismatchButton = fetchChild<ButtonWidget>("allowAssetsMismatchCheckbox");
|
||||||
|
|
||||||
|
m_instrumentLabel = fetchChild<LabelWidget>("instrumentValueLabel");
|
||||||
m_sfxLabel = fetchChild<LabelWidget>("sfxValueLabel");
|
m_sfxLabel = fetchChild<LabelWidget>("sfxValueLabel");
|
||||||
m_musicLabel = fetchChild<LabelWidget>("musicValueLabel");
|
m_musicLabel = fetchChild<LabelWidget>("musicValueLabel");
|
||||||
m_p2pJoinableLabel = fetchChild<LabelWidget>("clientP2PJoinableLabel");
|
m_p2pJoinableLabel = fetchChild<LabelWidget>("clientP2PJoinableLabel");
|
||||||
|
|
||||||
|
m_instrumentSlider->setRange(m_sfxRange, assets->json("/interface/optionsmenu/optionsmenu.config:sfxDelta").toInt());
|
||||||
m_sfxSlider->setRange(m_sfxRange, assets->json("/interface/optionsmenu/optionsmenu.config:sfxDelta").toInt());
|
m_sfxSlider->setRange(m_sfxRange, assets->json("/interface/optionsmenu/optionsmenu.config:sfxDelta").toInt());
|
||||||
m_musicSlider->setRange(m_musicRange, assets->json("/interface/optionsmenu/optionsmenu.config:musicDelta").toInt());
|
m_musicSlider->setRange(m_musicRange, assets->json("/interface/optionsmenu/optionsmenu.config:musicDelta").toInt());
|
||||||
|
|
||||||
@ -103,6 +109,7 @@ void OptionsMenu::toggleFullscreen() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
StringList const OptionsMenu::ConfigKeys = {
|
StringList const OptionsMenu::ConfigKeys = {
|
||||||
|
"instrumentVol",
|
||||||
"sfxVol",
|
"sfxVol",
|
||||||
"musicVol",
|
"musicVol",
|
||||||
"tutorialMessages",
|
"tutorialMessages",
|
||||||
@ -120,6 +127,12 @@ void OptionsMenu::initConfig() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void OptionsMenu::updateInstrumentVol() {
|
||||||
|
m_localChanges.set("instrumentVol", m_instrumentSlider->val());
|
||||||
|
Root::singleton().configuration()->set("instrumentVol", m_instrumentSlider->val());
|
||||||
|
m_instrumentLabel->setText(toString(m_instrumentSlider->val()));
|
||||||
|
}
|
||||||
|
|
||||||
void OptionsMenu::updateSFXVol() {
|
void OptionsMenu::updateSFXVol() {
|
||||||
m_localChanges.set("sfxVol", m_sfxSlider->val());
|
m_localChanges.set("sfxVol", m_sfxSlider->val());
|
||||||
Root::singleton().configuration()->set("sfxVol", m_sfxSlider->val());
|
Root::singleton().configuration()->set("sfxVol", m_sfxSlider->val());
|
||||||
@ -154,6 +167,9 @@ void OptionsMenu::updateAllowAssetsMismatch() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void OptionsMenu::syncGuiToConf() {
|
void OptionsMenu::syncGuiToConf() {
|
||||||
|
m_instrumentSlider->setVal(m_localChanges.get("instrumentVol").toInt(), false);
|
||||||
|
m_instrumentLabel->setText(toString(m_instrumentSlider->val()));
|
||||||
|
|
||||||
m_sfxSlider->setVal(m_localChanges.get("sfxVol").toInt(), false);
|
m_sfxSlider->setVal(m_localChanges.get("sfxVol").toInt(), false);
|
||||||
m_sfxLabel->setText(toString(m_sfxSlider->val()));
|
m_sfxLabel->setText(toString(m_sfxSlider->val()));
|
||||||
|
|
||||||
|
@ -29,6 +29,7 @@ private:
|
|||||||
|
|
||||||
void initConfig();
|
void initConfig();
|
||||||
|
|
||||||
|
void updateInstrumentVol();
|
||||||
void updateSFXVol();
|
void updateSFXVol();
|
||||||
void updateMusicVol();
|
void updateMusicVol();
|
||||||
void updateTutorialMessages();
|
void updateTutorialMessages();
|
||||||
@ -43,6 +44,7 @@ private:
|
|||||||
void displayModBindings();
|
void displayModBindings();
|
||||||
void displayGraphics();
|
void displayGraphics();
|
||||||
|
|
||||||
|
SliderBarWidgetPtr m_instrumentSlider;
|
||||||
SliderBarWidgetPtr m_sfxSlider;
|
SliderBarWidgetPtr m_sfxSlider;
|
||||||
SliderBarWidgetPtr m_musicSlider;
|
SliderBarWidgetPtr m_musicSlider;
|
||||||
ButtonWidgetPtr m_tutorialMessagesButton;
|
ButtonWidgetPtr m_tutorialMessagesButton;
|
||||||
@ -51,10 +53,12 @@ private:
|
|||||||
ButtonWidgetPtr m_clientP2PJoinableButton;
|
ButtonWidgetPtr m_clientP2PJoinableButton;
|
||||||
ButtonWidgetPtr m_allowAssetsMismatchButton;
|
ButtonWidgetPtr m_allowAssetsMismatchButton;
|
||||||
|
|
||||||
|
LabelWidgetPtr m_instrumentLabel;
|
||||||
LabelWidgetPtr m_sfxLabel;
|
LabelWidgetPtr m_sfxLabel;
|
||||||
LabelWidgetPtr m_musicLabel;
|
LabelWidgetPtr m_musicLabel;
|
||||||
LabelWidgetPtr m_p2pJoinableLabel;
|
LabelWidgetPtr m_p2pJoinableLabel;
|
||||||
|
|
||||||
|
//TODO: add instrument range (or just use one range for all 3, it's kinda silly.)
|
||||||
Vec2I m_sfxRange;
|
Vec2I m_sfxRange;
|
||||||
Vec2I m_musicRange;
|
Vec2I m_musicRange;
|
||||||
|
|
||||||
|
@ -138,6 +138,7 @@ void Songbook::playback() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
AudioInstancePtr audioInstance = make_shared<AudioInstance>(*m_uncompressedSamples[note.file]);
|
AudioInstancePtr audioInstance = make_shared<AudioInstance>(*m_uncompressedSamples[note.file]);
|
||||||
|
audioInstance->setMixerGroup(MixerGroup::Instruments);
|
||||||
audioInstance->setPitchMultiplier(note.velocity);
|
audioInstance->setPitchMultiplier(note.velocity);
|
||||||
|
|
||||||
auto start = m_timeSourceInstance->epoch + (int64_t)(note.timecode * 1000.0);
|
auto start = m_timeSourceInstance->epoch + (int64_t)(note.timecode * 1000.0);
|
||||||
|
Loading…
Reference in New Issue
Block a user