Make the music search bar search in music metadata instead of just the displayed name (aka the filepath)

Make sfx player able to play sfx without the file extension provided
Allow blipsounds to seek in blips/ folder to allow better categorization, as well as direct sound references
add get_emote_blip for detecting the blipsound used by an emote. Currently unused.
Less strict/hardcoded custom objection detection system
Allow system (charid -1) messages, and don't do the same message detection on blankposting
Allow objection, hold it, take that and custom sound players to detect sounds that are not exclusively .wav
This commit is contained in:
Crystalwarrior 2019-11-04 15:32:01 +03:00
parent f575f07770
commit 773a61f3d4
4 changed files with 64 additions and 50 deletions

View File

@ -335,6 +335,9 @@ public:
//Returns the sfx of p_char's p_emote
QString get_sfx_name(QString p_char, int p_emote);
//Returns the blipsound of p_char's p_emote
QString get_emote_blip(QString p_char, int p_emote);
//Returns if the sfx is defined as looping in char.ini
QString get_sfx_looping(QString p_char, QString p_sfx);

View File

@ -56,6 +56,9 @@ void AOSfxPlayer::play(QString p_sfx, QString p_char, QString shout, int channel
else
f_path = sound_path;
if (!file_exists(f_path))
f_path = ao_app->get_sfx_suffix(f_path); //If we're not given a sound file with .wav/.ogg/.opus already there, let's do this thing
m_stream_list[channel] = BASS_StreamCreateFile(FALSE, f_path.utf16(), 0, 0, BASS_STREAM_AUTOFREE | BASS_UNICODE | BASS_ASYNCFILE);
set_volume_internal(m_volume);

View File

@ -782,7 +782,7 @@ void Courtroom::set_widgets()
ui_custom_objection->setText(tr("Custom Shout!"));
ui_custom_objection->set_image("custom");
ui_custom_objection->setToolTip(tr("This will display the custom character-defined animation in the viewport as soon as it is pressed.\n"
"To make one, your character's folder must contain custom.[webp/apng/gif/png] and custom.wav"));
"To make one, your character's folder must contain custom.[webp/apng/gif/png] and custom.[wav/ogg/opus] sound effect"));
set_size_and_pos(ui_realization, "realization");
ui_realization->set_image("realization");
@ -1002,9 +1002,10 @@ void Courtroom::set_background(QString p_background, bool display)
ui_vp_testimony->stop();
current_background = p_background;
is_ao2_bg = file_exists(ao_app->get_static_image_suffix(ao_app->get_background_path("defensedesk"))) &&
file_exists(ao_app->get_static_image_suffix(ao_app->get_background_path("prosecutiondesk"))) &&
file_exists(ao_app->get_static_image_suffix(ao_app->get_background_path("stand")));
is_ao2_bg = true;
// file_exists(ao_app->get_static_image_suffix(ao_app->get_background_path("defensedesk"))) &&
// file_exists(ao_app->get_static_image_suffix(ao_app->get_background_path("prosecutiondesk"))) &&
// file_exists(ao_app->get_static_image_suffix(ao_app->get_background_path("stand")));
if (is_ao2_bg)
{
@ -1127,10 +1128,7 @@ void Courtroom::update_character(int p_cid)
ui_prosecution_plus->hide();
}
if (ao_app->custom_objection_enabled &&
(file_exists(ao_app->get_character_path(current_char, "custom.gif")) ||
file_exists(ao_app->get_character_path(current_char, "custom.apng"))) &&
file_exists(ao_app->get_character_path(current_char, "custom.wav")))
if (ao_app->custom_objection_enabled && file_exists(ao_app->get_image_suffix(ao_app->get_character_path(current_char, "custom"))))
ui_custom_objection->show();
else
ui_custom_objection->hide();
@ -1597,8 +1595,11 @@ void Courtroom::handle_chatmessage(QStringList *p_contents)
QString f_message = f_showname + ": " + m_chatmessage[MESSAGE] + '\n';
//Remove undesired newline chars
m_chatmessage[MESSAGE].remove("\n");
chatmessage_is_empty = m_chatmessage[MESSAGE] == " " || m_chatmessage[MESSAGE] == "";
if (f_char_id >= 0 && f_message == previous_ic_message) //Not a system message
if (f_char_id >= 0 && !chatmessage_is_empty && f_message == previous_ic_message) //Not a system message
return;
if (f_char_id <= -1)
@ -1615,11 +1616,6 @@ void Courtroom::handle_chatmessage(QStringList *p_contents)
chat_tick_timer->stop();
ui_vp_evidence_display->reset();
//Remove undesired newline chars
m_chatmessage[MESSAGE].remove("\n");
chatmessage_is_empty = m_chatmessage[MESSAGE] == " " || m_chatmessage[MESSAGE] == "";
//Hey, our message showed up! Cool!
if (m_chatmessage[MESSAGE] == ui_ic_chat_message->text().remove("\n") && m_chatmessage[CHAR_ID].toInt() == m_cid)
{
@ -1669,22 +1665,22 @@ void Courtroom::handle_chatmessage(QStringList *p_contents)
{
case 1:
ui_vp_objection->play("holdit_bubble", f_char, f_custom_theme, 724);
objection_player->play("holdit.wav", f_char, f_custom_theme);
objection_player->play("holdit", f_char, f_custom_theme);
break;
case 2:
ui_vp_objection->play("objection_bubble", f_char, f_custom_theme, 724);
objection_player->play("objection.wav", f_char, f_custom_theme);
objection_player->play("objection", f_char, f_custom_theme);
if(ao_app->objection_stop_music())
music_player->stop();
break;
case 3:
ui_vp_objection->play("takethat_bubble", f_char, f_custom_theme, 724);
objection_player->play("takethat.wav", f_char, f_custom_theme);
objection_player->play("takethat", f_char, f_custom_theme);
break;
//case 4 is AO2 only
case 4:
ui_vp_objection->play("custom", f_char, f_custom_theme, 724);
objection_player->play("custom.wav", f_char, f_custom_theme);
objection_player->play("custom", f_char, f_custom_theme);
break;
default:
qDebug() << "W: Logic error in objection switch statement!";
@ -2493,7 +2489,7 @@ void Courtroom::start_chat_ticking()
QString f_gender = ao_app->get_gender(m_chatmessage[CHAR_NAME]);
blip_player->set_blips(ao_app->get_sfx_suffix(f_gender));
blip_player->set_blips(f_gender);
//means text is currently ticking
text_state = 1;
@ -2518,7 +2514,7 @@ void Courtroom::chat_tick()
ui_vp_player_char->play_idle(m_chatmessage[CHAR_NAME], m_chatmessage[EMOTE]);
}
QString f_char = m_chatmessage[CHAR_NAME];
QString f_custom_theme = ao_app->get_char_shouts(f_char);
QString f_custom_theme = ao_app->get_chat(f_char);
ui_vp_chat_arrow->play("chat_arrow", f_char, f_custom_theme); //Chat stopped being processed, indicate that.
additive_previous = additive_previous + filter_ic_text(f_message, true, -1, m_chatmessage[TEXT_COLOR].toInt());
real_tick_pos = ui_vp_message->toPlainText().size();
@ -3320,7 +3316,8 @@ void Courtroom::on_music_search_edited(QString p_text)
if (p_text != "")
{
QList<QTreeWidgetItem*> clist = ui_music_list->findItems(ui_music_search->text(), Qt::MatchContains|Qt::MatchRecursive, 0);
//Search in metadata
QList<QTreeWidgetItem*> clist = ui_music_list->findItems(ui_music_search->text(), Qt::MatchContains|Qt::MatchRecursive, 1);
foreach(QTreeWidgetItem* item, clist)
{
if (item->parent() != nullptr) //So the category shows up too

View File

@ -527,16 +527,15 @@ QString AOApplication::get_sfx(QString p_identifier)
QString AOApplication::get_sfx_suffix(QString sound_to_check)
{
QString mp3_check = get_sounds_path(sound_to_check + ".mp3");
QString opus_check = get_sounds_path(sound_to_check + ".opus");
if (file_exists(opus_check))
{
sound_to_check = get_sounds_path(sound_to_check);
if (file_exists(sound_to_check + ".opus"))
return sound_to_check + ".opus";
}
else if (file_exists(mp3_check))
{
if (file_exists(sound_to_check + ".ogg"))
return sound_to_check + ".ogg";
if (file_exists(sound_to_check + ".mp3"))
return sound_to_check + ".mp3";
}
if (file_exists(sound_to_check + ".mp4"))
return sound_to_check + ".mp4";
return sound_to_check + ".wav";
}
@ -599,7 +598,7 @@ QString AOApplication::get_char_name(QString p_char)
if (f_result == "")
return p_char;
else return f_result;
return f_result;
}
QString AOApplication::get_showname(QString p_char)
@ -611,7 +610,7 @@ QString AOApplication::get_showname(QString p_char)
return "";
if (f_result == "")
return p_char;
else return f_result;
return f_result;
}
QString AOApplication::get_char_side(QString p_char)
@ -620,7 +619,7 @@ QString AOApplication::get_char_side(QString p_char)
if (f_result == "")
return "wit";
else return f_result;
return f_result;
}
QString AOApplication::get_gender(QString p_char)
@ -629,8 +628,14 @@ QString AOApplication::get_gender(QString p_char)
if (f_result == "")
return "sfx-blipmale";
if (!file_exists(get_sfx(f_result)))
f_result = "sfx-blip" + f_result;
if (!file_exists(get_sfx_suffix(get_sfx(f_result))))
{
if (file_exists(get_sfx_suffix(get_sfx("blips/" + f_result))))
return "blips/" + f_result; //Return the cool kids variant
return "sfx-blip" + f_result; //Return legacy variant
}
return f_result;
}
@ -663,7 +668,7 @@ QString AOApplication::get_char_shouts(QString p_char)
QString f_result = read_char_ini(p_char, "shouts", "Options");
if (f_result == "")
return "default";
else return f_result;
return f_result;
}
int AOApplication::get_preanim_duration(QString p_char, QString p_emote)
@ -672,7 +677,7 @@ int AOApplication::get_preanim_duration(QString p_char, QString p_emote)
if (f_result == "")
return -1;
else return f_result.toInt();
return f_result.toInt();
}
int AOApplication::get_ao2_preanim_duration(QString p_char, QString p_emote)
@ -681,7 +686,7 @@ int AOApplication::get_ao2_preanim_duration(QString p_char, QString p_emote)
if (f_result == "")
return -1;
else return f_result.toInt();
return f_result.toInt();
}
int AOApplication::get_emote_number(QString p_char)
@ -690,7 +695,7 @@ int AOApplication::get_emote_number(QString p_char)
if (f_result == "")
return 0;
else return f_result.toInt();
return f_result.toInt();
}
QString AOApplication::get_emote_comment(QString p_char, int p_emote)
@ -704,7 +709,7 @@ QString AOApplication::get_emote_comment(QString p_char, int p_emote)
qDebug() << "W: misformatted char.ini: " << p_char << ", " << p_emote;
return "normal";
}
else return result_contents.at(0);
return result_contents.at(0);
}
QString AOApplication::get_pre_emote(QString p_char, int p_emote)
@ -718,7 +723,7 @@ QString AOApplication::get_pre_emote(QString p_char, int p_emote)
qDebug() << "W: misformatted char.ini: " << p_char << ", " << p_emote;
return "";
}
else return result_contents.at(1);
return result_contents.at(1);
}
QString AOApplication::get_emote(QString p_char, int p_emote)
@ -732,7 +737,7 @@ QString AOApplication::get_emote(QString p_char, int p_emote)
qDebug() << "W: misformatted char.ini: " << p_char << ", " << p_emote;
return "normal";
}
else return result_contents.at(2);
return result_contents.at(2);
}
int AOApplication::get_emote_mod(QString p_char, int p_emote)
@ -746,7 +751,7 @@ int AOApplication::get_emote_mod(QString p_char, int p_emote)
qDebug() << "W: misformatted char.ini: " << p_char << ", " << QString::number(p_emote);
return 0;
}
else return result_contents.at(3).toInt();
return result_contents.at(3).toInt();
}
int AOApplication::get_desk_mod(QString p_char, int p_emote)
@ -762,7 +767,7 @@ int AOApplication::get_desk_mod(QString p_char, int p_emote)
if (string_result == "")
return -1;
else return string_result.toInt();
return string_result.toInt();
}
QString AOApplication::get_sfx_name(QString p_char, int p_emote)
@ -771,7 +776,13 @@ QString AOApplication::get_sfx_name(QString p_char, int p_emote)
if (f_result == "")
return "1";
else return f_result;
return f_result;
}
QString AOApplication::get_emote_blip(QString p_char, int p_emote)
{
QString f_result = read_char_ini(p_char, QString::number(p_emote + 1), "SoundB");
return f_result;
}
int AOApplication::get_sfx_delay(QString p_char, int p_emote)
@ -780,7 +791,7 @@ int AOApplication::get_sfx_delay(QString p_char, int p_emote)
if (f_result == "")
return 1;
else return f_result.toInt();
return f_result.toInt();
}
QString AOApplication::get_sfx_looping(QString p_char, QString p_sfx)
@ -789,7 +800,7 @@ QString AOApplication::get_sfx_looping(QString p_char, QString p_sfx)
if (f_result == "")
return "0";
else return f_result;
return f_result;
}
QString AOApplication::get_sfx_frame(QString p_char, QString p_emote, int n_frame)
@ -798,7 +809,7 @@ QString AOApplication::get_sfx_frame(QString p_char, QString p_emote, int n_fram
if (f_result == "")
return "";
else return f_result;
return f_result;
}
QString AOApplication::get_screenshake_frame(QString p_char, QString p_emote, int n_frame)
@ -807,7 +818,7 @@ QString AOApplication::get_screenshake_frame(QString p_char, QString p_emote, in
if (f_result == "")
return "";
else return f_result;
return f_result;
}
QString AOApplication::get_flash_frame(QString p_char, QString p_emote, int n_frame)
@ -816,7 +827,7 @@ QString AOApplication::get_flash_frame(QString p_char, QString p_emote, int n_fr
if (f_result == "")
return "";
else return f_result;
return f_result;
}
int AOApplication::get_text_delay(QString p_char, QString p_emote)
@ -825,7 +836,7 @@ int AOApplication::get_text_delay(QString p_char, QString p_emote)
if (f_result == "")
return -1;
else return f_result.toInt();
return f_result.toInt();
}
QStringList AOApplication::get_theme_effects()