freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

linux下mp3播放器的實(shí)現(xiàn)-資料下載頁

2025-06-25 21:59本頁面
  

【正文】 gtk_label_set_text(GTK_LABEL(time_label), label)。 } 為了將時(shí)間格式化為一個(gè)字符串以顯示給用戶,這里使用g_snprintf()。它是Glib版本的snprintf(),提供它是為了確保即便在沒有snprintf()的系統(tǒng)中也具備可移植性。GST_TIME_ARGS()是一個(gè)宏,它將位置轉(zhuǎn)換為適用于printf()風(fēng)格函數(shù)的參數(shù)。 最后“00:00:00”格式的時(shí)間字符串放到了label變量中。label是程序定義的一個(gè)全局變量: gchar *label。 label用于顯示時(shí)間,因此,其內(nèi)容必須能夠被不斷刷新。為了使其效率更高,: label = (gchar *)malloc(25)。 set_time_label中最后一個(gè)函數(shù),將label的數(shù)值提供給time_label。time_label的生成方式與title_label類似,不再提及。 這樣,mp3播放時(shí),便會(huì)在面板上用“00:00:00”格式的時(shí)間顯示當(dāng)前的播放進(jìn)度了。 似乎已經(jīng)很完美了,但實(shí)際運(yùn)行時(shí),卻發(fā)現(xiàn)了一個(gè)嚴(yán)重的問題:mp3在播放時(shí)聲音一顫一顫的。 這個(gè)問題同樣困擾我很長(zhǎng)時(shí)間。嘗試了各種代碼的修改方案后,仍然無濟(jì)于事。最后,我開始思考是否是“音頻播放時(shí),音頻移動(dòng)滾動(dòng)條位置”和“滾動(dòng)條移動(dòng)后,移動(dòng)音頻播放位置”兩者發(fā)生了沖突。經(jīng)增加一個(gè)布爾變量,用于控制兩者的移動(dòng)條件時(shí),終于解決了這個(gè)問題。 static gboolean no_seek = FALSE。 ,并將初始值設(shè)置為FALSE。程序中只有一處可以修改no_seek的值,在前面的cb_set_position中: no_seek = TRUE。 gtk_adjustment_set_value(adj, * pos / len * 100)。 no_seek = FALSE。 在移動(dòng)滾動(dòng)條之前,先將no_seek設(shè)置為TRUE,移動(dòng)完,再設(shè)置回FALSE。由于移動(dòng)滾動(dòng)條后,同時(shí)觸發(fā)value_changed事件,此時(shí),no_seek仍然為TRUE,seek_value_change函數(shù)測(cè)試到no_seek的值為TRUE,便不再調(diào)用seek_to函數(shù)調(diào)整音頻的播放位置。因此,音頻播放程序每1000毫秒調(diào)用一次的更新滾動(dòng)條操作,不會(huì)反過來影響自己的音頻播放。聲音顫動(dòng)的問題完美解決。4.9 實(shí)現(xiàn)的一點(diǎn)補(bǔ)充 主要的功能和程序的難點(diǎn)前文已經(jīng)介紹完畢。這里是要補(bǔ)充一些小的實(shí)現(xiàn)。 快進(jìn)快退按鈕實(shí)現(xiàn)為按一下,分別向后、向前移動(dòng)音頻長(zhǎng)度的5%,這是向后: gint64 target = ((gdouble)length * ((percentage + 5) / ))。 另外,還要在下面加一個(gè)判斷,如果距離結(jié)束不到5%,禁止向后跳動(dòng),距離開始不到5%,禁止向前跳動(dòng)。 此外,為了功能和美觀,主窗口還需要設(shè)置一下,要將以下代碼放到程序的gui()函數(shù)中: gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER)。 gtk_window_set_default_size(GTK_WINDOW(window), 250, 120)。 gtk_window_set_title(GTK_WINDOW(window), MP3 PLAYER)。 g_signal_connect(G_OBJECT(window), delete_event, G_CALLBACK(all_exit), NULL)。 第一個(gè)是設(shè)置位置的函數(shù),用于打開程序時(shí),是程序默認(rèn)在屏幕的正中間。 第二個(gè)設(shè)置窗口的默認(rèn)大小。長(zhǎng)250個(gè)像素,寬120個(gè),是嘗試后感覺比較好的設(shè)置。 第三個(gè)設(shè)置窗口的標(biāo)題為“MP3 PLAYER”,見前文中的截圖。 當(dāng)按下右上角的“X”按鈕或點(diǎn)擊菜單中的Quit項(xiàng)時(shí),程序調(diào)用all_exit函數(shù),其實(shí)現(xiàn)如下: void all_exit() { free(label)。 gtk_main_quit()。 exit(0)。 } 程序用free()函數(shù)釋放了先前用malloc()為時(shí)間標(biāo)簽分配的內(nèi)存空間。 gtk_main_quit()用于結(jié)束主循環(huán)。但這是不夠的,這只結(jié)束了GTK相關(guān)的項(xiàng)目,GStreamer還會(huì)繼續(xù)運(yùn)行。于是,程序調(diào)用用Linux的系統(tǒng)調(diào)用exit(0),結(jié)束整個(gè)程序。 5 系統(tǒng)實(shí)現(xiàn)5.1 Makefile文件的編寫 根據(jù)本程序中三個(gè)C程序文件和兩個(gè)頭文件的組織方式,編寫了如下的Makefile文件:CFLAGS=`pkgconfig cflags gtk+ `LIBS=`pkgconfig libs gtk+ `Player: gcc o Player $(CFLAGS) $(LIBS): gcc c o $(CFLAGS) $(LIBS): gcc c o $(CFLAGS) $(LIBS): gcc c o $(CFLAGS) $(LIBS)install:clean cp i /usr/lib/gstreamer*/clean: rm *.o CFLAGS和LIBS是Makefile文件中兩個(gè)常用的變量名,前者表示編譯C程序所需的參數(shù)名,后者表示編譯所需的庫(kù)名。 容易注意到,兩個(gè)變量賦值語句的后面,都有一個(gè)“`”號(hào),“`”號(hào)不是單引號(hào)“’”,而是鍵盤左上角Esc鍵下面的那個(gè)鍵的符號(hào)。這個(gè)符號(hào)在類Unix系統(tǒng)中表示引用子命令的輸出結(jié)果。 這里的子命令是pkgconfig。pkgconfig是一個(gè)獲得所需的編譯、連接參數(shù)、版本號(hào)以及庫(kù)名的一個(gè)小程序。 因此,CFLAGS和LIBS變量分別得到了pkgconfig的執(zhí)行結(jié)果。 根據(jù)前文介紹的Makefile的知識(shí),后面的內(nèi)容就很淺顯易懂了。最終目標(biāo)是生成Player可執(zhí)行文件,,而中間文件則分別依賴于相應(yīng)的源文件。這就是整個(gè)Makefile文件的依賴關(guān)系。 注意發(fā)現(xiàn)install命令其實(shí)是執(zhí)行一條拷貝命令。libgstmad的意思是gst所需的lib(庫(kù))文件,庫(kù)的文件名叫做mad。程序在生成解碼器時(shí)需要這個(gè)文件,前文中已經(jīng)有敘述: decoder = gst_element_factory_make(mad,maddecoder)。 這個(gè)庫(kù)文件,由于是非自由軟件(mp3是有版權(quán)的),大多數(shù)使用GNOME桌面環(huán)境的Linux系統(tǒng)并不會(huì)自帶。雖然多數(shù)用戶以后都會(huì)自行安裝,但在在這里還是將其附上。 install偽目標(biāo)又依賴于clean偽目標(biāo),也就是說,程序在install時(shí),會(huì)先執(zhí)行clean命令,刪除掉所有的中間文件。5.2 編譯,安裝,運(yùn)行,卸載 編譯和安裝是很簡(jiǎn)單的,只需在Shell中輸入如下兩條命令即可: make make install 前者用于讀取Makefile文件,生成Player可執(zhí)行文件;后者用于安裝庫(kù)文件和清理。 在Shell中輸入./Player命令或者直接在圖形界面中雙擊Player文件,即可打開程序。程序運(yùn)行的截圖如圖51所示:圖51 播放mp3文件 卸載的話,直接刪除掉源Player文件即可。,進(jìn)入/usr/lib/,將其刪除。5.3 制作源代碼安裝包 為了方便他人使用,這里制作一個(gè)源代碼安裝包。 新建一個(gè)文件夾,命名為mp3Player:mkdir mp3Player 然后把Makefile、三個(gè)C文件、。cp Makefile *.c *.h mp3Player 如果想讓程序開起來更“規(guī)范”一些,還可以在文件夾中新建一個(gè)README文件,介紹一下軟件的安裝使用方法之類。這里就不闡述了。接下來,把文件夾打包: tar jcf mp3Player/ ,再附上j參數(shù)。 至此,實(shí)現(xiàn)mp3播放器的工作就結(jié)束了。 6 結(jié)束語該項(xiàng)目從3月初期開始,歷時(shí)2周的時(shí)間,我已經(jīng)完成了該項(xiàng)目的所有工作。從開始接到課程題目到系統(tǒng)的實(shí)現(xiàn),再到課程文章的完成,每走一步對(duì)我來說都是新的嘗試與挑戰(zhàn),這也是我在大學(xué)期間獨(dú)立完成的最大的項(xiàng)目。在這段時(shí)間里,我學(xué)到了很多知識(shí)也有很多感受,從對(duì)Linux下圖形界面應(yīng)用程序開發(fā)一無所知,對(duì)GTK,GStreamer等相關(guān)技術(shù)很不了解的狀態(tài),我開始了獨(dú)立的學(xué)習(xí)和試驗(yàn),查看相關(guān)的資料和書籍,讓自己頭腦中模糊的概念逐漸清晰,使自己非常稚嫩作品一步步完善起來,每一次改進(jìn)都是我學(xué)習(xí)的收獲,每一次代碼的成功運(yùn)行都會(huì)讓我興奮好一段時(shí)間。雖然我的論文作品不是很成熟,還有很多不足之處,但我可以自豪的說,這里面的每一段代碼,都有我的勞動(dòng)。當(dāng)看著自己的播放器能夠完美的播放出動(dòng)聽的歌曲,真是莫大的幸福和欣慰。我相信其中的酸甜苦辣最終都會(huì)化為甜美的甘泉。這次做設(shè)計(jì)報(bào)告的經(jīng)歷也會(huì)使我終身受益,我感受到做論文是要真真正正用心去做的一件事情,是真正的自己學(xué)習(xí)的過程和研究的過程,沒有學(xué)習(xí)就不可能有研究的能力,沒有自己的研究,就不會(huì)有所突破。 致 謝 我的學(xué)位論文是在周書仁老師的指導(dǎo)下完成的。在此我要對(duì)周書仁老師一絲不茍的工作態(tài)度表示十二分的敬意! 本程序的開發(fā)受益于自由和開源軟件。由此,我要感謝那些長(zhǎng)期致力于推廣開源軟件的程序員們。他們很多人并不靠此謀生,而是耗費(fèi)了業(yè)余時(shí)間來從事這份偉大的工作。Linux系統(tǒng)、GCC編譯器等一大批優(yōu)秀軟件都?xì)w功于他們。 還要感謝中英文維基百科上相關(guān)詞條和網(wǎng)絡(luò)上相關(guān)博客的作者們,他們出色的工作大大地減輕了我組織資料的負(fù)擔(dān),向他們表示感謝! 參考文獻(xiàn)[1] Stevens, Stephen A. Rago. Unix Programming in the UNIX Environment 2nd edition[M].譯者(尤晉元, 張亞英, 戚正偉),:人民郵電出版社,2006.[2] Tony Gale,Ian Main,the GTK team. GTK+ Tutorial[M]. Free book. 2008.[3] 陳特放,黎丹. Linux下用GTK+和MySQL開發(fā)基于TCP/IP 的網(wǎng)絡(luò)聊天室[J]. 長(zhǎng)沙大學(xué)學(xué)報(bào),2006.[4] Wim Taymans, Steve Baker, Andy Wingo, Ronald S. Bultje, and Stefan Kost. GStreamer Application Development Manual ()[M]. Open Publication License. 2009.[5] Jon Masters, Richard Blum. Professional Linux Programming[M]. Wiley Publishing, Inc. 2007.[6] 毛堅(jiān)桓,葉茂,朱利,馮博琴. Linux環(huán)境下基于gtk的錄制/回放工具的設(shè)計(jì)和實(shí)現(xiàn)[J]. 微電子學(xué)與計(jì)算機(jī),2005.[7] 何世勇. 基于GTK的GUI編程[J]. 中國(guó)水運(yùn)(理論版),2006,4(3):165166.[8] 陳亮,裴海龍,伍越. 基于Linux系統(tǒng)的USB攝像頭視頻播放實(shí)現(xiàn)[J]. 現(xiàn)代電子技術(shù),2008.[9] 羅賢全,尚朝軒,高勤. 用GTK開發(fā)Linux嵌入式應(yīng)用程序. 微計(jì)算機(jī)信息(測(cè)控自動(dòng)化),20048.[10] 崔尚卿. 基于Gnome/Gtk+的圖形用戶界面的幾個(gè)實(shí)現(xiàn)技巧[J]. 計(jì)算機(jī)時(shí)代,2005.[11] 潘影波,王健,Rusty Lynch. MIDLinux新一代播放器的設(shè)計(jì)與實(shí)現(xiàn)[J]. 計(jì)算機(jī)技術(shù)與發(fā)展,2009.[12] 趙毅,馬捷. 利用Python和GTK+的Linux GUI應(yīng)用的快速開發(fā)[J]. 計(jì)算機(jī)工程,20
點(diǎn)擊復(fù)制文檔內(nèi)容
環(huán)評(píng)公示相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1