Rockboxでは音楽の再生にあわせて歌詞を表示できる.といっても通常の再生画面では表示されない.プラグインとしての機能であるが.
以下のパッチを当てる.
FS#7432 - sncviewer - a plugin for viewing synchronised lyrics on player screen
http://www.rockbox.org/tracker/task/7432
さて,いくつか気になる点があったので,パッチを当てた後,apps/plugins/sncviewer.cを手直し.
- 日本語表示
- 314行目あたり
- タイムタグのフォーマット[mm:ss:xx]への対応
- 1051行目あたり
- あまり関係ないけど,下の余白*1
- 697行目あたり
- FS#5697 — bmp resize patch(http://www.rockbox.org/tracker/task/5697)の影響
- 1行目あたり
- 660行目あたり
以下,差分ファイル
--- ./apps/plugins/sncviewer.c 2007-07-21 14:56:21.328125000 +0900 +++ ./apps/plugins/sncviewer.c 2007-07-21 15:04:38.453125000 +0900 @@ -1,3 +1,4 @@ +#include "recorder/bmp.h" #include "plugin.h" PLUGIN_HEADER @@ -314,11 +315,11 @@ const unsigned char* artist=entry->artist; const unsigned char* title=entry->title; int height=sysfont_height; - if(artist!=NULL && title!=NULL && *artist < 0x80 && *title < 0x80) + if(artist!=NULL && title!=NULL) rb->snprintf(buf,BUFFERSIZE,"%s/%s",title,artist); else //id3 != ascii -> display filename buffer=rb->strrchr(entry->path,'/')+1; - if(*buffer < 0x80){ + if(false){ lcd_setfont(FONT_SYSFIXED); } else{ //id3 and filename not ascii -> show filename and use ui_font @@ -660,7 +661,11 @@ rb->strcpy(foundc,".bmp"); bool read_bmp_file(char* const file){//return true if the bmp cannot be found - return (bmp_size=rb->read_bmp_file(file, &bm, size, FORMAT_ANY))<0; + return (bmp_size=rb->read_bmp_file(file, &bm, size, FORMAT_ANY, + LCD_WIDTH, LCD_HEIGHT, + BMP_RESIZE_INCREASE | BMP_RESIZE_DECREASE + + ))<0; } if(read_bmp_file(path)){ // path/<filename>.bmp foundc=rb->strrchr(path,'/')+1; @@ -697,7 +702,7 @@ void peak_meter(void){ int y=scroll_y0; - const int max_height=LCD_HEIGHT-y-sysfont_height-3; + const int max_height=LCD_HEIGHT-y-sysfont_height-3-32; const int width=((LCD_WIDTH-bmp_width)/5)<<1; int left_peak,right_peak; #if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F) @@ -1051,7 +1056,7 @@ int mm,ss,ms=0; (*buffer)++; //skip [ tt2int(buffer,&mm,':'); - tt2int(buffer,&ss,'.') ? tt2int(buffer,&ms,']'): tt2int(buffer,&ss,']'); + (tt2int(buffer,&ss,'.') || tt2int(buffer,&ss,':')) ? tt2int(buffer,&ms,']'): tt2int(buffer,&ss,']'); //+1 ensure that time is > 0 *time=mm*60000+ss*1000+(ms<100 ? ms*10 : ms) +1; //wrong if ms=0xx !!! }
*1:個人的な好み