FS13892: Voice feedback in Cuesheet browser

Voices the index, performer, and title of each cuesheet entry.  Uses
talkclips if any are available.

Change-Id: If54931cb5bbeb698f23146479192c1d6fe387657
This commit is contained in:
Solomon Peachy 2026-08-15 21:08:14 -04:00
parent aeaee5da45
commit c04c2c3e0b

View file

@ -447,6 +447,30 @@ static const char* list_get_name_cb(int selected_item,
return buffer;
}
static char global_temp_buffer[MAX_PATH+1];
static int cuesheet_list_voice_cb(int list_index, void* data)
{
struct cuesheet *cue = (struct cuesheet *) data;
int index = list_index / 2;
talk_id(LANG_PLAYTIME_TRACK, true);
talk_number(index + 1, true);
/* Look up and voice talk clips */
const char *nameptr = NULL;
size_t dirlen = path_dirname(cue->file, &nameptr);
size_t tmp;
tmp = snprintf(global_temp_buffer, dirlen + 1, "%s", cue->file);
global_temp_buffer[tmp] = 0;
talk_file_or_spell(global_temp_buffer, cue->tracks[index].performer,
TALK_IDARRAY(LANG_ID3_ARTIST), true);
talk_file_or_spell(global_temp_buffer, cue->tracks[index].title,
TALK_IDARRAY(LANG_ID3_TITLE), true);
return 0;
}
void browse_cuesheet(struct cuesheet *cue)
{
struct gui_synclist lists;
@ -463,11 +487,12 @@ void browse_cuesheet(struct cuesheet *cue)
if ((unsigned) len > sizeof(title))
title[sizeof(title) - 2] = '~'; /* give indication of truncation */
gui_synclist_init(&lists, list_get_name_cb, cue, false, 2, NULL);
gui_synclist_set_nb_items(&lists, 2*cue->track_count);
gui_synclist_set_title(&lists, title, 0);
if(global_settings.talk_menu)
gui_synclist_set_voice_callback(&lists, cuesheet_list_voice_cb);
if (id3)
{
@ -475,6 +500,8 @@ void browse_cuesheet(struct cuesheet *cue)
2*cue_find_current_track(cue, id3->elapsed));
}
gui_synclist_speak_item(&lists);
while (!done)
{
gui_synclist_draw(&lists);
@ -503,10 +530,9 @@ void browse_cuesheet(struct cuesheet *cue)
if (!startit || !*cue->file)
break;
char file[MAX_PATH];
strmemccpy(file, cue->file, MAX_PATH);
char *fname = strrsplt(file, '/');
char *dirname = fname <= file + 1 ? "/" : file;
strmemccpy(global_temp_buffer, cue->file, MAX_PATH);
char *fname = strrsplt(global_temp_buffer, '/');
char *dirname = fname <= global_temp_buffer + 1 ? "/" : global_temp_buffer;
bookmark_play(dirname, 0, elapsed, 0, current_tick, fname);
break;
} /* ACTION_STD_OK */