Change how getting the current title works, and fix ZSM backend not setting itself as opened.
Some checks failed
Build / build-android (push) Blocked by required conditions
Build / build-windows (push) Blocked by required conditions
Build / get-source-code (push) Blocked by required conditions
Build / build-deb (push) Blocked by required conditions
Build / build-appimage (push) Blocked by required conditions
Build / build-gentoo (push) Failing after 1m47s
Build / download-system-deps (push) Has been cancelled

This commit is contained in:
Zachary Hall 2025-01-16 09:08:20 -08:00
parent a41c63d059
commit a8b0a3df59
3 changed files with 22 additions and 9 deletions

View file

@ -62,10 +62,7 @@ void SDLMixerXBackend::load(const char *filename) {
current_file = std::string(filename); current_file = std::string(filename);
const char *title_tag = Mix_GetMusicTitleTag(output); const char *title_tag = Mix_GetMusicTitleTag(output);
// Check for an empty string, which indicates there's no title tag. // Check for an empty string, which indicates there's no title tag.
if (title_tag[0] == '\0') { if (title_tag[0] != '\0') {
std::filesystem::path path(current_file);
current_title = path.stem().string();
} else {
current_title = std::string(title_tag); current_title = std::string(title_tag);
} }
this->music = output; this->music = output;
@ -73,9 +70,9 @@ void SDLMixerXBackend::load(const char *filename) {
PlaybackStream stream; PlaybackStream stream;
stream.id = 0; stream.id = 0;
stream.length = Mix_MusicDuration(output); stream.length = Mix_MusicDuration(output);
stream.name = current_title;
streams.push_back(stream);
open = true; open = true;
stream.name = get_title.value();
streams.push_back(stream);
initial = true; initial = true;
} }
void SDLMixerXBackend::switch_stream(int idx) { void SDLMixerXBackend::switch_stream(int idx) {

View file

@ -157,6 +157,7 @@ void ZsmBackend::load(const char *filename) {
property_defaults[#name] = value; \ property_defaults[#name] = value; \
} }
#include "properties.inc" #include "properties.inc"
PlaybackStream stream;
} }
extern SDL_AudioSpec obtained; extern SDL_AudioSpec obtained;
void ZsmBackend::switch_stream(int idx) { void ZsmBackend::switch_stream(int idx) {
@ -172,6 +173,7 @@ void ZsmBackend::switch_stream(int idx) {
this->cpuClocks = 0.0; this->cpuClocks = 0.0;
this->delayTicks = 0.0; this->delayTicks = 0.0;
this->ticks = 0.0; this->ticks = 0.0;
open = true;
} }
void ZsmBackend::cleanup() { void ZsmBackend::cleanup() {
delete file; delete file;

View file

@ -24,7 +24,7 @@ class PlaybackBackend {
uint64_t length; uint64_t length;
std::vector<PlaybackStream> streams; std::vector<PlaybackStream> streams;
std::string current_file; std::string current_file;
std::string current_title; std::optional<std::string> current_title;
bool open; bool open;
SDL_AudioSpec spec; SDL_AudioSpec spec;
uint64_t position; uint64_t position;
@ -134,7 +134,21 @@ class PlaybackBackend {
return open ? current_file : std::optional<std::string>(); return open ? current_file : std::optional<std::string>();
} }
inline virtual std::optional<std::string> get_title() { inline virtual std::optional<std::string> get_title() {
return open ? current_title : std::optional<std::string>(); if (open) {
if (current_title.has_value()) {
return current_title;
} else {
auto file = get_current_file();
if (file.has_value()) {
std::filesystem::path path(file.value());
return path.stem().string();
} else {
return {};
}
}
} else {
return {};
}
} }
inline virtual int get_stream_idx() {return 0;} inline virtual int get_stream_idx() {return 0;}
inline virtual ~PlaybackBackend() { } inline virtual ~PlaybackBackend() { }