歌詞顯示的技術實現

2021-04-15 11:26:58 字數 1384 閱讀 6865

cstrstore partlrc;

...//儲存每行歌詞

partlrc.add(szlrc);

因為cstrstore主要是用來儲存字串的,沒辦法再儲存時間資訊。所以在這裡我們定義了乙個timetab結構:

typedef struct

timetab,*ptimetab;

lltime表示的歌詞檔案裡的時間,iindex代表的是在cstrstore中儲存的字串的索引號。

我們首先根據獲取的標籤數量,動態分配timetab陣列:

m_ptimetab = new timetab [m_ipartamount];

然後儲存相關資料:

m_ptimetab[iindextime].lltime = converttime(pszbufa);

m_ptimetab[iindextime].iindex = iindexlrc;

m_partlrc.add(pszbufw);

使用時,可根據時間標籤獲取相應的歌詞列:

m_partlrc.getdata(m_ptimetab[m_ipartcurindex].iindex, pszlrc, ilen + 1);

這時候只要顯示pszlrc指向的字串即可。

回頭看看我們為什麼要將歌詞的用cstrstore儲存,而用timetab作為索引。因為實際情形是,可能有多個時間標籤對應於一句歌詞,例如:

[02:27.07][00:49.61]還可以呼吸 心跳也還規律

[02:32.85][00:55.87]只除了寂寞

[02:34.55][00:57.68]它還不肯馬上就平息

假設「還可以呼吸 心跳也還規律」在cstrstore中儲存的索引為3,則timetab陣列在「02:27.07」和「00:49.61」時間段都可以指向3:

timetab[i].lltime = converttime(text(「02:27.07」));

m_ptimetab[i].iindex = 3;

timetab[j].lltime = converttime(text(「00:49.61」));

m_ptimetab[j].iindex = 3;

這對資源的節約是非常明顯的,而在嵌入式裝置中,這樣的節約又是極為重要。所以將儲存和索引分離,是乙個非常重要的方式。

接下來我們討論乙個非常實際的問題,我們如何確定timetab陣列的個數。因為timetab是以時間標籤為索引,所以我們只要判斷檔案中有多少對""即可算出實際個數。

乙個簡單的演算法可以很簡單完成:

int ipos = 0;

while( (ipos = findstring(pcszbufin,"[",ipos)) != -1)

while(true)

m_ipartcurindex ++;

歌詞顯示的技術實現

cstrstore partlrc 儲存每行歌詞 partlrc.add szlrc 因為cstrstore主要是用來儲存字串的,沒辦法再儲存時間資訊。所以在這裡我們定義了乙個timetab結構 typedef struct timetab,ptimetab lltime表示的歌詞檔案裡的時間,ii...

如何實現類似KTV中螢幕歌詞顯示

本功能其實於一般的繪圖工作無異,主要是將文字繪製在screen上即可1 procedure tform1.button1click sender tobject varc tcanvas begin c tcanvas.create c.handle getdc 0 獲取桌面 handle setb...

LyricsX for Mac 桌面歌詞顯示器

lyricsx for mac功能特色 與itunes,spotify和vox完美配合。在桌面和選單欄上顯示歌詞。您可以自定義字型,顏色和位置。在狀態選單上調整歌詞偏移。用歌詞導航歌曲 雙擊一行跳到特定位置。拖放以匯入 匯出歌詞檔案。正體中文和簡體中文之間的自動轉換。lyricsx免費版更新日誌 新...