diff options
| author | iamgoofball <iamgoofball@gmail.com> | 2019-01-19 21:01:19 -0800 |
|---|---|---|
| committer | Crystalwarrior <varsash@gmail.com> | 2019-09-14 00:28:27 +0300 |
| commit | 1139bf5cd0473817ba223ac8a9fe9d193575206a (patch) | |
| tree | 802acb96d305982e3d550a2e73faf680675ad049 /src | |
| parent | f9b3bd5bb5fdbb739e806d004af09443bdbb2aac (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.cpp | 26 | ||||
| -rw-r--r-- | src/courtroom.cpp | 18 |
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)) |
