Did more work on the bindings between the audio and view

This commit is contained in:
Crylia
2024-03-27 18:20:03 +01:00
parent 067c339fc9
commit 55eb496cd5
8 changed files with 224 additions and 28 deletions

View File

@@ -10,10 +10,10 @@ private:
Node* next;
};
Node* topNode = nullptr;
Node* topNode;
public:
SongHistory( ) { }
SongHistory( ) : topNode(nullptr) { }
~SongHistory( ) {
while (!isEmpty( ))
pop( );

View File

@@ -22,7 +22,7 @@ Audio::~Audio( ) {
void Audio::StartMusic( ) {
if (Mix_PlayingMusic( ) == 0) {
//TODO: Get the loop status from the FloatingControls widget and replace the 1
Mix_PlayMusic(music, 1);
Mix_PlayMusic(music, this->loop);
}
}
@@ -43,6 +43,7 @@ void Audio::PlaySong(const std::string path) {
SDL_Quit( );
return;
}
Mix_PlayMusic(music, this->loop);
}
void Audio::PauseMusic( ) {
@@ -57,6 +58,17 @@ void Audio::ResumeMusic( ) {
}
}
void Audio::TogglePlayPause( ) {
if (IsMusicPaused( ))
ResumeMusic( );
else
PauseMusic( );
}
bool Audio::IsMusicPaused( ) {
return (Mix_PausedMusic( ) == 1);
}
bool Audio::IsMusicPlaying( ) {
return (Mix_PlayingMusic( ) != 0);
}
@@ -112,7 +124,7 @@ QPixmap Audio::GetAlbumCover( ) {
}
int Audio::GetVolume( ) {
return Mix_GetMusicVolume(music);
return Mix_VolumeMusic(-1);
}
void Audio::SetVolume(int vol) {

View File

@@ -12,6 +12,12 @@ extern "C" {
#include <iostream>
enum Loop {
None,
All,
Once
};
class Audio {
public:
static Audio& getInstance( ) {
@@ -24,6 +30,7 @@ private:
std::string path;
std::string artist;
std::string album;
Loop loop;
Mix_Music* music;
@@ -50,7 +57,8 @@ public:
void PauseMusic( );
void ResumeMusic( );
bool IsMusicPlaying( );
void TogglePlayPause( );
bool IsMusicPaused( );
void SetVolume(int vol);
int GetVolume( );
};

View File

@@ -51,4 +51,8 @@ public:
std::string GetPath( ) { return path; };
std::string GetTitle( ) { return title; }
std::string GetAlbum( ) { return album; }
std::string GetArtist( ) { return artist; }
};