亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于Android的手機語音記錄器應用的設計與實現(xiàn)

        2017-07-29 10:30:11馮江惠王穎潔王志軍
        電腦知識與技術 2017年12期
        關鍵詞:Android系統(tǒng)即時通訊

        馮江惠 王穎潔 王志軍

        摘要:為了提升老年人等特殊群體對手機的使用效果,使中老年人更方便地使用手機,為了方便人們在不適合聽語音的場合通過文字及時獲取信息,研究了基于Android系統(tǒng)的手機語音記錄器。采用Android應用開發(fā),將語音轉文字、語音記錄、即時通訊、語音轉發(fā)和語音的云存儲結合起來,構成一套完整的語音交流、共享平臺?;贏ndroid的應用可以搭載到絕大多數(shù)手機上,具有開放、分享、高整合的優(yōu)點。

        關鍵詞:Android系統(tǒng);語音轉文字;即時通訊

        語音識別是人工智能和機器學習應用的一個重要方向,近年來,語音識別技術突飛猛進,大量產品被開發(fā)并應用到實際。前不久,微信App中就有了一個語音轉文字的重大更新,長按語音文件,點擊“轉換為文字”,就可以進行識別,給不方便聽語音的用戶帶來了福祉。近三十年來,語音識別技術發(fā)展迅速,逐漸從實驗室走向市場,形成產品。

        語音識別發(fā)展到現(xiàn)在,在中小詞匯量非特定人語音識別系統(tǒng)和特定人語音識別系統(tǒng)中的識別精度已經接近100%,這些技術已經能夠滿足一般應用的需求。在信息處理、通信與電子系統(tǒng)、自動控制等領域相繼出現(xiàn)了不同用途的語音識別系統(tǒng),已經逐漸顯露出其強大的技術優(yōu)勢和生命力。隨著硬件技術和軟件技術的快速發(fā)展,語音識別為我們提供了一種嶄新的遠景。

        現(xiàn)在上線的手機應用中有很多聊天應用,但是缺少以語音為主的應用,所以本文借用了百度語音的語音識別技術,參考其他手機應用的成功案例,使用Android開發(fā)技術,結合Http和Mysql作為后臺服務器,制作了一個以語音為主體的手機應用,功能包括語音錄制、語音轉文字、添加好友并進行即時語音通信等,將語音的功能整合到一起,形成一個完整的以語音為主體的手機應用。

        系統(tǒng)的功能主要在以下三個方面:

        1)語音錄制

        實現(xiàn)錄制的語音在外置存儲卡中以PCM格式的文件長期存儲。在語音錄制中,可以隨時暫停錄制和繼續(xù)錄制;在語音播放中,可以隨時暫停和繼續(xù)播放,且可以調整播放進度。

        2)語音到文字的轉換

        通過當前市場上比較成熟的百度語音開放平臺的RESTAPI實現(xiàn)。

        3)即時通訊

        實現(xiàn)了用戶之間的即時通訊,用戶之間可以相互發(fā)送文字消息和語音消息。

        本文將介紹該系統(tǒng)實現(xiàn)所用的關鍵技術,并對相應技術進行概括分析。

        1軟件的設計

        1.1設計流程圖

        如圖l所示。

        1.2平臺搭建

        1.2.1客戶端平臺的搭建

        需要用到的工具包和軟件:JDK和Android Studio需要添加的iar包及其用途:

        1)Bmob短信驗證碼API:BMobSMS-v1.0.1_20150710jar

        利用Bmob后端云平臺的短信驗證碼接口,實現(xiàn)手機短信驗證碼功能。

        2)搭建Mina框架需要用到的兩個包:mina-core-2.0.13.jar、slf4j-api-1.7.14.jar

        在阻塞模式下,若從網絡流中讀取不到指定大小的數(shù)據(jù)量,阻塞10就在那里阻塞著。在非阻塞模式下,若從網絡流中讀取不到指定大小的數(shù)據(jù)量,非阻塞10就立即通行。顯然,非阻塞10比阻塞10有更高的性能,但是非阻塞式開發(fā)難度就成數(shù)倍遞增了。我們需要開啟線程專門去維護網絡方面的操作,讓它不影響主線程的運行。javal.4以上有NIO網絡操作框架newl0,非阻塞式高伸縮性,但它的用法比較復雜,Mina和Nety,是用NIO封裝的好用的網絡操作框架,所以引入了Mina框架來進行客戶端文件的上傳。

        Slf4j是Simple Logging Facade for Java的全拼,是在Mina內部用來做日志用的。

        3)用于網絡通信的包:volley.jar

        Volley是2013年Google I/O上發(fā)布的一款網絡框架,基于Android平臺,能使網絡通信更快,更簡單,更健全。Volley只適合數(shù)據(jù)量小,通信頻繁的網絡操作,不適合數(shù)據(jù)量大的,像音頻,視頻等的傳輸。

        4)用于解析和打包json數(shù)據(jù)的包:fastjson-1.1.38.jar

        1.2.2服務器端平臺的搭建

        需要用到的工具包和軟件:Eclipse的Java EE版本,Apache Tomcat v7.0,mysql數(shù)據(jù)庫

        需要添加的{ar包及其用途:

        1)用于連接數(shù)據(jù)庫的包:mysql-connector-java-5.1.7-bin.jar

        2)使用servlet相關的類時需要用到的包:servlet-api.jar

        3)與客戶端對應的搭建Mina框架時所用的包:mina-core-2.0.13.jar、slf4j-api-1.7.14.jar、slf4j-simple-1.7.21.jar

        與客戶端相比,服務器端多了slf4i-simple-1.7.21.jar這個包,這個包是為了給類路徑添加一個綁定,如果沒有這個綁定,控制臺就會有相應的警告,slf4i-simple-1.7.21.jar相當于slf4j-api-1.7.14.jar的日志接口的實現(xiàn)包。

        2功能的實現(xiàn)

        2.1錄音功能的具體實現(xiàn)

        錄音功能的實現(xiàn)過程可以通過分析錄音界面每個控件的行為來分析,錄音界面如圖2所示:

        2.1.1錄音按鈕的實現(xiàn)(三種狀態(tài))

        1)準備狀態(tài):初次點擊按鈕時,圖標為●,就會得到一個AudioTrackManager對象,用來初始化存放錄音的絕對路徑,并且設置音源為麥克風,音頻采樣率為16k,聲道為單聲道,音頻采樣位數(shù)為PCM(脈沖編碼調制)16位/{羊本,設置音頻的最小緩沖區(qū)大小,并轉到錄音線程開始錄音并用Android API中擁有的類AudioRecord類的startRecord方法開始計時,在這之前還要隱藏保存和播放按鈕,并且獲取音量大小。

        2)暫停狀態(tài):暫停計時,顯示保存按鈕和播放按鈕,修改按鈕的樣式為圖2.1,調用AudioRecord類的stop()方法暫停錄音,并調用AudioRecord類的release()方法釋放資源,如果不釋放就會一直占用資源,導致后來再申請的時候無法申請。

        3)繼續(xù)狀態(tài):在暫停之后點擊繼續(xù)可以繼續(xù)進行錄音,這時要重新開啟錄音線程,這里要判斷是否是剛剛開始錄音,如果AudioRecord未被初始化,說明是剛剛開始錄音,如果AudioRecord被初始化,則是暫停錄音之后繼續(xù)錄音,繼續(xù)錄音時要繼續(xù)進行計時,并修改圖標樣式為●。

        2.1.2退出錄音按鈕的實現(xiàn)

        點擊退出錄音按鈕,在錄音按鈕的響應事件中進行相應的操作,首先彈出對話框,提示“是否退出錄音?退出將不保存此條錄音”,如果確定退出,則將刪除當前音頻對應的文件及路徑信息,取消則僅僅取消對話框的顯示,不做其他操作。

        2.1.3播放的實現(xiàn)

        播放時主要有播放和暫停播放兩種狀態(tài),為了方便人們直觀地看出音頻播放的進度,還設置了一個可以拖動的滾動條,這樣也可以方便用戶對播放進度隨時進行調整。播放界面的屏幕截圖如圖2.1所示

        1)初次播放:點擊播放按鈕,在鼠標點擊事件中得到該語言的路徑,并調用AudioTrack這個可以播放簡單音頻資源類的play()方法,將音頻播放出來。

        2)暫停播放:調用AudioTrack類的pause()方法,進行暫停。

        3)繼續(xù)播放:操作跟初次播放時相同,但播放進度要設置為暫停時的播放進度,這樣就可以從暫停處繼續(xù)進行播放。

        4)Seekbar滾動條的實現(xiàn):主要需要計算好滾動條的進度和音頻進度百分比的問題,根據(jù)滾動條已拖動的百分比計算繼續(xù)播放開始時的位置,位置的計算公式如下:

        position=(int)(fileLength*1.0f*progress/100);

        這里在實際設計的時候出現(xiàn)了一個問題:如果最后計算出的position的值不能被2整除,那么要讓它加1,使它能被2整除,這是因為AudioRecord類中進行錄音時,每次讀取一個short類型的長度,而short型是2個字節(jié),而且PCM采樣位數(shù)設置的是16位,即2個字節(jié),即每次讀人兩個字節(jié)的數(shù)據(jù)樣本,如果不能被2整除,播放時就會出現(xiàn)雜音。

        5)柱狀頻譜圖的繪制:柱狀頻譜圖根據(jù)音量的大小繪制頻譜中的振幅,振幅的大小根據(jù)聲音的大小成正比調整,屏幕中顯示200個條形柱,更新時,在handleMessage中每隔50ms更新一次界面顯示效果。

        2.2語音轉文字功能的實現(xiàn)過程

        調用第三方文檔:百度的REST API實現(xiàn)在線語音轉文字的功能。具體實現(xiàn)過程如下:

        1)在繼承了AsyncTask的類中異步加載要發(fā)送到服務器的信息

        設置請求方式為“POST”,并設置文件的格式、采樣頻率和長度,語音數(shù)據(jù)轉換為字節(jié)序列放在HTTP-BODY中,然后發(fā)送到百度服務器,發(fā)送前要首先獲取百度的“access_token”這個驗證字符串,獲取連接權限。

        2)獲取服務器來的響應信息

        在Http響應體中,給出了Json格式的文字,客戶端接收到Json格式的輸入流,并將其解析成字符串,再在繼承AsyncTask類的繼承類中的onPostExecute(Void avoid)方法中將文字放在handler中,顯示在界面上,最終實現(xiàn)文字到語音的轉換。

        文字轉換界面和語音播放界面如下:

        2.3備份文件的實現(xiàn)過程

        2.3.1服務器備份(上傳)

        將需要傳送的文件打包成FileObject,發(fā)送到Service中,Service默認都在主線程中運行,因為若直接在Service中進行發(fā)送文件等耗時操作,應用進程將會被掛起,甚至出現(xiàn)ANR(應用無法響應)錯誤,所以在Service中的onStartCommandO方法中重新開啟一個子線程,在子線程中通過IoSession發(fā)送FileObject,這個FileObject的file_type屬性設置成TYPE_BACKUP,進行文件的傳送,服務器根據(jù)所收到文件的文件名,創(chuàng)建文件,并建立好流通信,循環(huán)接收數(shù)據(jù)包,將數(shù)據(jù)報寫入文件,當所接收數(shù)據(jù)的長度等于提前接收到的信息中的文件長度,則表示接收完畢。

        2.3.2本地備份

        在qq、微信等即時通訊中,目前還沒有本地備份語音的功能,所以想到可以設計一個本地備份的功能,方便隨時查看、分享語音文件。

        本地備份就是開啟一個子線程,將文件通過DbHelper這個SQLite數(shù)據(jù)庫幫助類寫入到SD卡中。

        2.4即時通訊的實現(xiàn)過程

        要進行即時通訊,首先要注冊賬號并登錄,截圖如下:

        登錄之后主要有兩個方面:

        1)添加好友

        將要添加好友的手機號通過Service中的子線程發(fā)送給服務器端,服務器從數(shù)據(jù)庫首先確認是否有該用戶字段。如果有,就將此條消息通過Notification通知發(fā)送給對方,對方接受請求后,發(fā)送一個響應給服務器,服務器再更新當前用戶的好友列表;如果沒有該用戶字段,就將反饋消息發(fā)送給用戶,用戶界面顯示相應的提示信息。

        鎖屏情況下添加好友,也是直接發(fā)送Notification通知給對方。

        2)發(fā)送消息

        發(fā)送消息可以是先用戶A直接通過服務器發(fā)送過來的用戶B的IP地址、TCP端口號等信息,直接向用戶B的PC機發(fā)出聊天信息,用戶B的IM客戶端軟件收到后顯示在屏幕上,然后用戶B再直接回復到用戶A的PC機,這樣雙方的即時文字消息就不通過IM服務器中轉,而是通過網絡進行點對點的直接通訊,這稱為對等通訊方式(Peer To Peer),也可以是每次發(fā)送信息都經過服務器中轉,這樣就可以解決用戶A與用戶B的點對點通訊由于防火墻、網絡速度等原因難以建立或者速度很慢的問題,這里用的是通過服務器中轉的方式。

        發(fā)送消息時,用戶A先通過socket與服務器取得連接,服務器獲得用戶A的Id、要發(fā)送的信息和用戶B的Id,然后把消息打包發(fā)送給用戶B,用戶B如果想要發(fā)送消息給用戶A,也是同樣的過程。

        發(fā)送消息時,手機界面當前所處的情況有多種,也要分別討論:

        1)手機界面停在當前聊天界面:更新當前界面聊天信息。

        2)手機界面停留在好友列表界面:在對應的好友右側顯示未讀消息數(shù),當點開聊天界面時更新界面聊天信息。

        3)本應用的其他界面和非本應用的其他界面:發(fā)送Notification通知,提醒用戶查看消息。

        4)鎖屏界面:發(fā)送Notification通知,而且對方要首先獲取好友昵稱稱,以便開鎖后直接進入聊天界面。

        3結束語

        當下語音交互在即時通訊方面得到了足夠的重視,語音識別技術在人機交互中成為非常重要的方式,語音交互極大地提高了人們的交互速度,了解并學習語音交互相關的技術,對未來在語音領域有更多的了解和深入有很大的幫助。本文介紹了一個相對完整的語音聊天工具,對文件的存儲、文件的上傳、消息的發(fā)送做了相應的研究,對語音的錄制、播放、發(fā)送功能做了略為系統(tǒng)的闡述,幫助鞏固和系統(tǒng)地運用已有的知識,未來在語音技術的研究上還需繼續(xù)努力,不斷前行。

        猜你喜歡
        Android系統(tǒng)即時通訊
        即時通訊在高校體育教學中的應用研究
        運動精品(2019年10期)2019-11-26 04:56:26
        民事訴訟中即時通訊記錄的證據(jù)采用進路
        即時通訊軟件發(fā)展模型的實證研究
        東方教育(2016年19期)2017-01-16 12:34:53
        Android系統(tǒng)上的移動互聯(lián)網集成平臺開發(fā)機制
        Android系統(tǒng)核心管理工具設計與實現(xiàn)
        Android下的機械式電表數(shù)字識別技術研究
        軟件導刊(2016年11期)2016-12-22 22:02:11
        基于Android系統(tǒng)的掌上班級課表與學生考勤管理系統(tǒng)
        基于GPS和iBeacon的智能校園信息發(fā)布平臺設計與實現(xiàn)
        軟件導刊(2016年9期)2016-11-07 18:32:10
        基于增強現(xiàn)實技術的導航系統(tǒng)研究
        軟件導刊(2016年9期)2016-11-07 18:09:28
        科學技術哲學視域下的即時通訊
        科技傳播(2015年14期)2015-12-13 04:20:18
        日本欧美国产精品| 国产精品视频自拍在线| 日韩人妻另类中文字幕| 97人人超碰国产精品最新| 亚洲美免无码中文字幕在线| 狠狠丁香激情久久综合| 中文字幕一区二区在线看| 午夜大片在线播放观看 | 日本av在线一区二区| 久久www免费人成—看片| 国产乱子伦精品免费无码专区| 91久久国产精品视频| 日本亚洲一级中文字幕| 亚洲97成人精品久久久| 久久久久亚洲av无码专区首| 无码少妇a片一区二区三区| 国产香蕉尹人在线视频播放| 扒开双腿操女人逼的免费视频| 中文字幕亚洲入口久久 | 久久人妻av不卡中文字幕| 亚洲免费一区二区三区四区| 各种少妇正面着bbw撒尿视频| 欧美性xxxx狂欢老少配| 国产亚洲欧美另类久久久| 青青久在线视频免费视频| 色偷偷亚洲第一成人综合网址| 欧美巨大xxxx做受l| 国产精品视频一区二区三区,| 国产主播一区二区三区在线观看| 青青草免费手机视频在线观看| 亚洲人成无码区在线观看| 精品国产高清a毛片无毒不卡| 一区二区三区免费视频网站| 日韩在线一区二区三区中文字幕 | 国产午夜三级精品久久久| 国产一区二区三区小说| 乱子伦视频在线看| 免费国人成人自拍视频| 日本区一区二区三视频| 国产啪亚洲国产精品无码 | 亚洲肥老熟妇四十五十路在线 |