馬明宇,李來春,賈勃宇,浦四乘,石發翔

摘要:隨著科技的飛速發展和智能手機的出現,人們的學習和生活開始依賴手機,詩說App也應運而生。詩說是一款使用MySql數據庫進行數據存儲,基于Android平臺開發的軟件,系統將以朗讀詩詞為中心,并帶有書法分享、創作詩詞及詩詞小游戲等模塊。讓用戶不受地點和時間的限制,用手機隨時隨地學習詩詞。
關鍵詞:詩詞;App;Android
中圖分類號:TP311? ? ? 文獻標識碼:A
文章編號:1009-3044(2021)19-0071-03
1 背景
詩詞文化深刻、生動地體現著中國文化的基本精神。詩詞文學是語言的藝術,是民族的精神與心靈史,也是文化的主要形態之一。隨著科技的飛速發展和智能手機的出現,人們的學習和生活開始依賴手機,詩詞類App也應運而生[1]。但現有App只能簡單地閱讀古詩詞,查看注解,不能把詩詞真正的情感內涵運用起來,只注重學習詩詞,不注重詩詞朗讀和詩詞發音。因此我們團隊將為詩詞愛好者設計一個以朗讀詩詞為中心,帶有書法分享、創作詩詞及詩詞小游戲的一個詩說App。讓越來越多的人開始喜歡詩詞,用唐詩宋詞激發出人們生命中的詩意,從唐詩宋詞中了解更多古代文化,讓詩詞文化成為日常生活中不可缺少的一部分。
2 系統設計
2.1 主要功能
詩說App主要分為一下模塊:風雅集會、書法分享、朗讀分享和個人中心。
1)朗讀分享:在有配樂的情況下,選擇粵語或者普通話進行詩詞朗讀,作品根據選擇的語言不同進行分類。詩說App提供詩詞朗讀場景,詩詞提示詞,頭飾貼紙,身體服飾模型以及一些經典的情緒動作。用戶在拍攝之前選擇心儀的特效修飾自己,結合朗讀的情感添加動作,讓自己身臨到詩人創作時的意境之中,其他用戶可以在分享區進行視頻的瀏覽和評論。此功能的目的是讓用戶通過朗讀詩詞,去感受詩人的創作意境和詩的靈魂,在朗讀過程中體驗古代服飾的魅力,促進人們對中國傳統詩詞文化的感悟。
2)書法分享:用戶可以通過圖片的形式分享自己的書法作品以及自己創作的詩句。為了讓用戶能夠討論詩詞作品,書法技巧,分享自己對某首詩或詞的見解,開設點贊評論功能。
3)風雅集會:將設計一個詩詞小游戲,主要內容是:
題型一:傳統形式的默寫。
題型二:“飛花令”提出某個字,讓用戶在規定時間內寫出帶這個字的詩句,根據同一時間用戶寫的詩句對的多少來積分。
4)節日專享:每逢傳統節假日,例如清明節、端午節時會舉行一個專題的比賽活動或者關于該節日的詩詞創作比賽。
5)個人中心:用戶登錄,注冊,退出,個人信息管理,作品的喜歡與收藏,作品管理,添加詩友等。
3 系統實現
3.1 開發技術與環境
詩說App的開發選用Android Studio和Java語言作為重要的集成開發環境,安裝Android SDK工具包來完成詩說App的開發[2]。采用現已有的音視頻,文字處理方法,算法成熟。數據庫選擇MySQL數據庫,根據數據的不同建立不同的表和關系,并填入相應數據。在服務器的選擇上,將選擇流媒體服務器。服務器和客戶端之間的通信是基于RTSP協議的消息應答機制,從而實現類似VCR的遠程遙控功能[3]。服務端與客戶端之間的連接采用Socket套接字實現[4]。系統會采取框架式設計,根據用戶的需求進行靈活擴充。
3.2 具體功能設計
1)首頁:用戶成功登錄App后,默認進入App首頁,在首頁用戶可以瀏覽其他用戶創作的朗讀視頻和書法,系統會為其推薦經常瀏覽的作者以及瀏覽詩詞的類型,如圖1所示[5]。
2)詩詞庫:在詩詞庫中,主要進行詩詞查詢,在搜索欄為空時,會出現推薦詩詞,輸入文字后,根據所輸入的文字進行動態查詢,能使用戶了解更多該方面的詩詞,同時也方便用戶的查找。點擊列表中的詩句,會進入詩詞詳情界面,如圖2所示。
3)游戲:在游戲中心中,會展示幾款游戲,可選擇感興趣的游戲進行體驗,游戲的目的是為了加強用戶對詩詞的興趣,打破詩詞是枯燥乏味的認定。并且在每款游戲中,還會增加積分排名,讓用戶知道自己在此游戲中的排名,激發用戶的競爭心理。
4)聊天:用戶在聊天界面和自己的粉絲進行聊天,并對某一個作品進行討論。用戶還可以看自己好友是否在線。點擊對應好友的頭像可查看對方基本資料,展示對方喜歡的作品以及創作的作品。
3.3 主要功能實現
1)服務器建立。一個好的系統必須有一個良好的服務器,在與客戶端的連接中,將使用Socket套接字進行即時通信。在通信時首先進行服務器的綁定以及監聽。服務端的綁定監聽關鍵代碼如下:
mmy_iRet = WSAStartup(MAKEWORD(2, 2), &mmywsaData);
if (mmy_iRet != 0)printf("Winsock初始化失敗!!!\r\n");;
mmy_Server_add.sin_family = AF_INET;//地址家族,必須為AF_INET
mmy_Server_add.sin_addr.S_un.S_addr = INADDR_ANY;
mmy_Server_add.sin_port = htons(1997);
Socket_mmyserver = socket(AF_INET, SOCK_STREAM, 0); //建立監聽套接字
m_edit1 = m_edit1 + _T("建立服務端的監聽套接字---成功!!!\r\n");
mmy_iRet = bind(Socket_mmyserver, (SOCKADDR*)&mmy_Server_add, sizeof(SOCKADDR));