马明宇,李来春,贾勃宇,浦四乘,石发翔
摘要:随着科技的飞速发展和智能手机的出现,人们的学习和生活开始依赖手机,诗说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));