基於Linux系統的C語言歌詞解析

2021-10-03 20:39:39 字數 2379 閱讀 4760

該歌詞解析器是在ubuntu系統下實現的,可以實現歌詞的滾屏實時顯示、進度條及時間顯示、以及字元畫的顯示。

專案截圖:

第一步.將歌詞檔案讀取到堆區空間:

//一次性將檔案內容讀取到堆區空間

char

*get_lrc_memory

(char

*name,

int num)

fseek

(fp,0,

2);//將流指標定位在檔案的尾部

unsigned

long len =0;

len =

ftell

(fp)

;//獲取檔案長度

rewind

(fp)

;char

*arr =

null

; arr =

(char*)

calloc(1

,len+1)

;//根據檔案長度申請空間

if(arr ==

null

)fread

(arr,len,

1,fp)

;//將檔案讀取到申請的空間中

fclose

(fp)

;return arr;

}

第二步.將歌詞進行切割:

//將讀取到的歌詞檔案 按行進行分割

intstrtok_lrc

(char

*buf)

第三步分析歌詞這一步中分為兩小步

a.分析歌詞的前四行,因為歌詞中一般前四行為歌曲資訊

//前四行分析 顯示

void

analyze_lrc_four

(char

*buf)

if(strcmp

("ar"

,tmp1)==0

)if(strcmp

("al"

,tmp1)==0

)if(strcmp

("by"

,tmp1)==0)}}

b.分析後邊的歌詞並將其按歌詞時間順序存入鍊錶

分析歌詞 **:

//歌詞分析

lrc*

analyze_lrc_last

(char

*buf,

const

unsigned

int row)

//逐個時間分析

char

*str_time = buf[i]

;while

(*str_time ==

'[')

}return head;

}

鍊錶插入**:

//歌詞 按照time的大小排序 插入鍊錶

lrc*

insert_link

(lrc *head,lrc tmp)

*pi = tmp;

pi->next =

null;if

(head ==

null

)//不存在

else

//存在

//b.插入點判斷

if(pd->time >= pi->time)

//頭部中部插入

else

//中間

}else

//尾部插入

}return head;

}

鍊錶插入之後建議進行一次鍊錶遍歷操作,以便於確認鍊錶插入沒有出現問題:

遍歷鍊錶**如下:

//遍歷鍊錶

void

print_link

(lrc *head)

else

}return

;}

char buf1[

128]=""

;char buf2[

128]=""

;char buf3[

128]=""

;char buf4[

128]=""

;while(1

)sleep(1

);time++

;}

此文章及**完全由本人完成,以上**不完全,只包括部分函式。

C語言歌詞解析

定義乙個結構體用來存放下面分離的時間戳和歌詞 struct liric liric 400 int main char b 300 file fp1 fopen 夢回還.lrc r if fp1 null printf error 提取文字文件放入結構體陣列中 for i 0 feof fp1 i ...

基於C語言的避障系統程式

基於c語言的避障小車程式 因為最近在做一些小專案,我就把我寫的程式分享給大家,一起學習 include include define uchar unsigned char define uint unsigned int sbit trig p3 0 sbit echo p3 3 sbit con...

基於C語言的校園導航系統

利用迪傑斯特拉求單源最短路演算法,設計出鄭州公升達經貿管理學院的校園導航,求出學校乙個景點到另乙個景點的最短距離及路線。將校園設計為平面圖,將學校各代表景點構成乙個抽象的無向帶權圖,頂點為景點,邊的權值代表了景點間路徑的長度。設計出能夠幫助人們快速找到從乙個景點到達另一景點的最短路徑及路線 以及能夠...