aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authoriamgoofball <iamgoofball@gmail.com>2019-01-19 21:01:19 -0800
committerCrystalwarrior <varsash@gmail.com>2019-09-14 00:28:27 +0300
commit1139bf5cd0473817ba223ac8a9fe9d193575206a (patch)
tree802acb96d305982e3d550a2e73faf680675ad049 /src
parentf9b3bd5bb5fdbb739e806d004af09443bdbb2aac (diff)
Bass.dll functionality-based clientside music looping system by using channel loopable flags (no use of QTimer required)
Implement Goofball's AOV loopable music server message where any value that's not -1 when the length of the handle_message packet is longer than 3 will not loop the music (still confused about this but w/e)
Diffstat (limited to 'src')
-rw-r--r--src/aomusicplayer.cpp26
-rw-r--r--src/courtroom.cpp18
2 files changed, 40 insertions, 4 deletions
diff --git a/src/aomusicplayer.cpp b/src/aomusicplayer.cpp
index 27918092..781a90c9 100644
--- a/src/aomusicplayer.cpp
+++ b/src/aomusicplayer.cpp
@@ -17,22 +17,42 @@ void AOMusicPlayer::play(QString p_song)
BASS_ChannelStop(m_stream);
QString f_path = ao_app->get_music_path(p_song);
-
- m_stream = BASS_StreamCreateFile(FALSE, f_path.utf16(), 0, 0, BASS_STREAM_AUTOFREE | BASS_UNICODE | BASS_ASYNCFILE);
+ unsigned int flags = BASS_STREAM_AUTOFREE | BASS_UNICODE | BASS_ASYNCFILE;
+ m_stream = BASS_StreamCreateFile(FALSE, f_path.utf16(), 0, 0, flags);
this->set_volume(m_volume);
-
+ this->set_looping(m_looping);
if (ao_app->get_audio_output_device() != "default")
BASS_ChannelSetDevice(m_stream, BASS_GetDevice());
BASS_ChannelPlay(m_stream, false);
}
+void AOMusicPlayer::stop()
+{
+ BASS_ChannelStop(m_stream);
+}
+
void AOMusicPlayer::set_volume(int p_value)
{
m_volume = p_value;
float volume = m_volume / 100.0f;
BASS_ChannelSetAttribute(m_stream, BASS_ATTRIB_VOL, volume);
}
+
+void AOMusicPlayer::set_looping(bool toggle)
+{
+ m_looping = toggle;
+ if (BASS_ChannelFlags(m_stream, 0, 0) & BASS_SAMPLE_LOOP)
+ {
+ if (m_looping == false)
+ BASS_ChannelFlags(m_stream, 0, BASS_SAMPLE_LOOP); // remove the LOOP flag
+ }
+ else
+ {
+ if (m_looping == true)
+ BASS_ChannelFlags(m_stream, BASS_SAMPLE_LOOP, BASS_SAMPLE_LOOP); // set the LOOP flag
+ }
+}
#elif defined(QTAUDIO)
AOMusicPlayer::AOMusicPlayer(QWidget *parent, AOApplication *p_ao_app)
{
diff --git a/src/courtroom.cpp b/src/courtroom.cpp
index 41712d2f..06f5aa06 100644
--- a/src/courtroom.cpp
+++ b/src/courtroom.cpp
@@ -2616,7 +2616,23 @@ void Courtroom::handle_song(QStringList *p_contents)
if (p_contents->length() > 2)
{
- str_show = p_contents->at(2);
+ if(p_contents->at(2) != "")
+ {
+ str_show = p_contents->at(2);
+ }
+ }
+ if (p_contents->length() > 3)
+ {
+ //I am really confused why "-1" is "loop this song" and why anything else passes as "don't loop"
+ //(if we even have this length) but alright
+ if(p_contents->at(3) != "-1")
+ {
+ music_player->set_looping(false);
+ }
+ else
+ {
+ music_player->set_looping(true);
+ }
}
if (!mute_map.value(n_char))