近期項目中有個需求就是要實現(xiàn)類似微信或者支付寶的收款時的語音播報功能,于是筆者就開始了漫長的踩坑之路。
創(chuàng)新互聯(lián)建站堅持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:成都做網(wǎng)站、成都網(wǎng)站設(shè)計、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時代的麻陽網(wǎng)站設(shè)計、移動媒體設(shè)計的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!
剛開始討論實現(xiàn)方案時,安卓的小伙伴說可以使用WebSocket + 訊飛語音在線合成實現(xiàn)。于是最初的幾天筆者自己也一直在這條路上走了很久,基本功能都已經(jīng)實現(xiàn)了,項目在前臺的時候,基本沒問題。但是項目一進(jìn)入后臺大概半分鐘的時間,就無法播報了。原因是iOS項目如果不做任何處理的話,在進(jìn)入后臺大概30s之后,程序就會進(jìn)入類似休眠的狀態(tài),然后就不會再進(jìn)行任何操作了
跟安卓的同事討論之后,發(fā)現(xiàn)安卓有方法可以讓程序一直在后臺處于活躍狀態(tài),于是筆者也開始找尋保持項目后臺運(yùn)行的方法,大概有兩種
在這里我們并沒有發(fā)現(xiàn),程序在后臺收到推送時,作相應(yīng)處理的方法,哪到底能不能收到推送后就進(jìn)行處理呢?
iOS 10 之后 iOS推出了Notification Service Extension,我們可以在收到推送之后,通過這個Extension 我們可以有三十秒的時間來對這個推送進(jìn)行處理
完成之后長這樣
然后我們配置一下NotificationService
然后我們看下NotificationService.swift文件
在完成上述操作之后,再次收到推送的話,就會走NotificationService的邏輯了,可以打斷點(diǎn)或者Log測試一下
需要注意的是 在推送的內(nèi)容中 必須配置mutable-content字段,結(jié)構(gòu)大致如下
做完上邊的操作之后,我們可以知道什么時候去播報語音了,但是語音又要怎么去播報呢?
筆者這邊也是試過幾個方案,下邊一一說來
筆者剛開始使用訊飛發(fā)現(xiàn)不行,然后又測試了系統(tǒng)自帶的AVSpeech,發(fā)現(xiàn)也不好用,查資料才知道,蘋果在近期的版本中,停用的在NotificationService中播放語音的功能,之前的某個版本應(yīng)該可以這么操作。好吧,此方案Pass
既然不讓我播,那我存起來總可以了吧,測試發(fā)現(xiàn)訊飛在線生成是可以的,也可以存到本地,但。。。是,UNMutableNotificationContent的sound好像只支持提前添加到項目中的文件,并不支持立即生成之后存到本地,然后再設(shè)置的功能。。。
筆者在項目中預(yù)先生成的文件如下(語音包通過百度語音開放平臺在線生成 百度語音在下生成(拉到中間就有了) )
比如說我要播放“支付寶到賬100元”,我就會發(fā)放多個通知,依次播放wx-pre,1,bai,yuan這幾個語音,連貫起來就能達(dá)到要求
筆者能力有限,暫時想到的方法就是這個,有好的方法可以多多分享,溝通
object-c主要還是對c的擴(kuò)張。。如果的c學(xué)的比較好。。那就比較好上手了,一般剛開始學(xué)習(xí)iOS的時候,要先學(xué)習(xí)c語言,但實際上開發(fā)中主要用oc, 實在覺得麻煩,就去參加個培訓(xùn),主要看看學(xué)啥,技術(shù)的關(guān)鍵點(diǎn)在哪,然后自己再勇猛精進(jìn)就可以了。
下載和安裝,現(xiàn)在我們使用的最新版本是ibm viavoice9.1簡體中文版,很多網(wǎng)站都有下載,大家可以用百度搜索,下載來的文件格式一般為iso鏡像,所以要用虛擬光驅(qū)安裝。軟件的安裝沒有什么特別之處,一路下一步就行了,當(dāng)然也可以在安裝向?qū)Ю镄薷陌惭b信息,要注意的是一定要關(guān)閉殺毒軟件,由于軟件在安裝過程中需要重起電腦,重起后還要繼續(xù)安裝,所以最好將殺毒軟件的自動運(yùn)行也暫時關(guān)閉。語音訓(xùn)練:這是使用viavoice最關(guān)鍵的一步,對于盲人來說也是難度最大的環(huán)節(jié),如果順利過了這一關(guān),我們的工作也就完成了七八成了,剩下的軟件操作其實并不復(fù)雜。程序安裝完成后,程序自動開始運(yùn)行,首先會出現(xiàn)一段語音提示,緊接著探出用戶向?qū)?。要求輸入用戶名和選擇音頻設(shè)備,采用默認(rèn)即可,如果有兩塊聲卡就要選擇其中之一。點(diǎn)下一步,探出音頻設(shè)置向?qū)?,點(diǎn)擊測試按鈕,出現(xiàn)一段回放音樂,系統(tǒng)音量測試成功,下一步進(jìn)入麥克風(fēng)設(shè)置。選擇頭戴式麥克風(fēng),下一步,在音頻輸出設(shè)備的列表里仍然要選擇頭戴式麥克風(fēng)。下一步,要求連接好麥克風(fēng),不用管它,繼續(xù)下一步。開始測試麥克風(fēng),點(diǎn)測試即開始測試環(huán)境噪音,完成后在點(diǎn)下一步。這一部系統(tǒng)詢問你是否有信號適配器,一定要選是,繼續(xù)下一步。這時系統(tǒng)要調(diào)整麥克風(fēng)音量。在測試過程中環(huán)境要保持安靜,關(guān)閉音箱,帶好耳麥,讓讀屏的聲音從耳麥里發(fā)出,并且要將讀屏的語速調(diào)到最慢,因為下面要跟隨讀屏朗讀系統(tǒng)給出的語句。點(diǎn)擊開始,讀出系統(tǒng)給出的語句即可,這段文字可以用四六件切換來找到,其內(nèi)容如下:"這里有一小段文章,您必須用正常、輕松的語調(diào)將其讀出。請在段落與語句之間自然停頓。計算機(jī)將利用這一過程調(diào)整其音量。當(dāng)這一過程完成以后,您會聽到一小段結(jié)束提示音,系統(tǒng)將顯示聲音的品質(zhì)。在聽到這一小段提示音之前,您必須不斷地重復(fù)這段文章。"這時可以用小鍵盤的加減號及點(diǎn)號[暫停]來控制跟讀的速度及停頓。待出現(xiàn)聲音提示在點(diǎn)下一步。現(xiàn)在就要開始創(chuàng)建個人語音模型了。這一步至關(guān)重要,會直接影響將來語音識別的效果。在點(diǎn)下一步語音模型的創(chuàng)建就真正開始了。系統(tǒng)要求你讀出下面的文字,四六鍵切換到六可編輯文字處,tab鍵切換到開始按鈕,點(diǎn)擊及開始,用加減號配合點(diǎn)號跟隨讀屏朗讀。如果系統(tǒng)跟不上你的朗讀速度,便發(fā)出聲音提示,此時就點(diǎn)擊暫停,在點(diǎn)繼續(xù)重復(fù)朗讀。讀完后系統(tǒng)提示正在處理請稍候。系統(tǒng)會進(jìn)行語音訓(xùn)練,訓(xùn)練完畢后,最簡單的語音模型就建立完畢了,當(dāng)然可以想像得到,這樣輕松建立起來的模型效果并不是很好。稍等片刻在點(diǎn)下一步。這一部是分析你的語音,以便讓系統(tǒng)了解你的說話方式。選擇開始錄音單選按鈕,繼續(xù)下一步。在列表里選擇一篇文章,四六鍵切換到十二可編輯文字處,tab鍵切換到開始按鈕,點(diǎn)擊開始,還是用加減號配合點(diǎn)號跟讀,如果我們的說話沒有被系統(tǒng)識別出來,屏幕上的文字就不會往下滾動,并發(fā)出聲音提示。這時可以按加減號重復(fù)朗讀,直到出現(xiàn)新的文字,才可以繼續(xù)往下朗讀。為了提高識別率,建議將列表中的四篇文章全部讀完。讀完文章以后點(diǎn)下一步。系統(tǒng)提示正在處理請稍候,等幾分鐘后點(diǎn)完成。到此,個人用戶(語音模型)建立完畢,我們可以正式開始使用語音輸入了。語音輸入:語音訓(xùn)練及語音模型的建立雖然比較繁瑣,但是軟件的使用卻非常簡單。其功能只有聲控命令和語音聽寫。在程序組中啟動ibm viavoice語音中心,程序運(yùn)行后在通知區(qū)域工具欄里出現(xiàn)viavoice的圖標(biāo)。我們首先要設(shè)置麥克風(fēng)開關(guān)狀態(tài)的熱鍵,在停止語音輸入時要立刻官麥,否則會出現(xiàn)大量的亂碼、或發(fā)出錯誤命令導(dǎo)致不必要的麻煩。右鍵單擊通知區(qū)域里的viavoice圖標(biāo),在探出菜單里選用戶選項,右光標(biāo),點(diǎn)viavoice選項。在探出的對話框中選啟動選項卡,選中麥克風(fēng)狀態(tài)和發(fā)現(xiàn)問題時啟動識別向?qū)С绦驈?fù)選礦,要不老有識別向?qū)鰜頁v亂。在21熱鍵域無處加入快捷鍵。如果創(chuàng)建了幾個用戶,就要在用戶選項卡里選擇你自己創(chuàng)建的用戶,否則識別效果會很差。其它選項涉及到高級設(shè)置,采用默認(rèn)設(shè)置即可,帶操作熟練后可在作改動。點(diǎn)確定關(guān)閉對話框。此時按下剛才設(shè)置的快捷鍵打開麥克風(fēng),[當(dāng)然在菜單里也有這個命令],就進(jìn)入了語音輸入狀態(tài)了。第一次使用會有語音提示。此時你就可以向計算機(jī)下達(dá)任何語音命令,讓它為你做你想做的任何事情。想要了解當(dāng)前有什么命令可用,只要說出當(dāng)前命令及,就會調(diào)出當(dāng)前可用命令。要了解當(dāng)前幫助,就說學(xué)習(xí)內(nèi)容,就會調(diào)出當(dāng)前幫助。要想啟動某個程序就說出啟動某程序,例如想要啟動大智慧,就說啟動大智慧,大智慧就隨即啟動了。又如在ie里面,只要說出某個鏈接的名稱即可進(jìn)入該頁面,說出任何菜單和按鈕名稱即可執(zhí)行相應(yīng)的命令,你說出收藏夾,收藏夾就立刻打開了,在說出收藏夾中網(wǎng)站的名稱,就會打開該網(wǎng)站。viavoice支持幾乎所有的已安裝的或?qū)⒁惭b的應(yīng)用程序的聲控操作和直接聽寫。只要應(yīng)用程序有文本編輯框就可以進(jìn)行語音聽寫,但要先說直接聽寫,進(jìn)入文字聽寫模式,結(jié)束聽寫后要說停止直接聽寫,回到命令輸入模式。如在qq的聊天界面上,激活文本輸入框,說出要輸入的內(nèi)容,即可在編輯框中自動寫出相應(yīng)的文字。不過初期使用識別的準(zhǔn)確率不可能達(dá)到很高,需要進(jìn)行一些手工修改,但是它有自學(xué)習(xí)功能,隨著使用的增多,識別的準(zhǔn)確率會越來越高。在進(jìn)行聽寫時,請您使用連續(xù)語音,并注意同時口述標(biāo)點(diǎn)符號和編排命令,比如句號,逗號和另起一段。盡量使用正常的節(jié)奏講話,不要太快,也不要太慢。盡量不要吞音或者滑音,也不要故意拉長或者略讀某些詞語。盡量不要連讀,也沒有必要故意對某些音進(jìn)行重讀。開始時您會可能會講話比較快。請耐心一點(diǎn),放慢速度。過了一段時間之后,您就會發(fā)現(xiàn)完全可以在不損失準(zhǔn)確率的情況下提高講話速率。不要對著麥克風(fēng)大聲講話,請使用盡量平和的語音。正確佩戴麥克風(fēng)對語音識別率非常重要。請確認(rèn)麥克風(fēng)接收頭(在海綿套的里面)離您的嘴角大約一個拇指的距離,并檢查麥克風(fēng)上的白點(diǎn)正對著您的嘴部。不要將海綿套拿走,它可以起過濾作用。 不要將麥克風(fēng)正對您的嘴部,以防受呼吸影響。每次使用麥克風(fēng)時請不要變動麥克風(fēng)的位置,例如麥克風(fēng)的距離時遠(yuǎn)時近。如果進(jìn)行大量文字錄入,建議使用系統(tǒng)自帶的字處理程序[語音板]。說出聽寫到語音板,語音板隨即啟動。這是一個類似寫字板的編輯工具,語音板擁有寫字板的所有功能而且增加了聽寫能力。語音聽寫與其他應(yīng)用程序中的直接聽寫的注意事項基本一致,要想執(zhí)行語音命令,在聽寫過程中稍作停頓,說出菜單命令即可。值得注意的是糾錯窗口的使用。 在聽寫的過程中,ViaVoice可能會發(fā)生誤識。您可以用糾錯窗口對誤識詞進(jìn)行糾錯,以便ViaVoice以后提高識別率;或者讓ViaVoice分析您已有的文檔,以便讓ViaVoice熟悉您的措辭和行文方式。在口述一段文字以后,查找誤識的詞。如果要對某個詞或短語進(jìn)行糾錯,先選中該詞,然后說出糾錯就會探出糾錯窗口。如果正確的詞已經(jīng)位于候選詞列表中,念出該詞的序號。這一動作將糾正所選的詞或短語。如果正確的詞不在候選詞列表中,你可以單擊糾錯窗口的文本編輯框,輸入正確的詞/短語。念糾錯或者按回車進(jìn)行確定。z在聽寫完一篇文章以后,建議用文檔分析程序?qū)倢懙奈恼逻M(jìn)行分析,從而修正語言模型,提高識別率。
。。。。。。。
。。。。。。。
ios voip 推送---案例 ?
java?
php?
驗證.pem
。。。。。。。
注意?? token 在 ahc 打包出來的是不一樣的,切記
。1。。。。。。。。。。。。。。
如何生成.pem 證書 ,適用于PHP 。Java是.p12 證書
1、將之前生成的voip.cer SSL證書雙擊導(dǎo)入鑰匙串
2、打開鑰匙串訪問,在證書中找到對應(yīng)voip.cer生成的證書,右鍵導(dǎo)出并選擇.p12格式,這里我們命名為voippush.p12,這里導(dǎo)出需要輸入密碼(隨意輸入,別忘記了)。
3、目前我們有兩個文件,voip.cer SSL證書和voippush.p12私鑰,新建文件夾命名為VoIP、并保存兩個文件到VoIP文件夾。
4、把.cer的SSL證書轉(zhuǎn)換為.pem文件,打開終端命令行cd到VoIP文件夾、執(zhí)行以下命令
openssl x509 -in voip.cer? -inform der -out VoiPCert.pem
5、把.p12私鑰轉(zhuǎn)換成.pem文件,執(zhí)行以下命令(這里需要輸入之前導(dǎo)出設(shè)置的密碼)
openssl pkcs12 -nocerts -out VoIPKey.pem -in voippush.p12
6、再把生成的兩個.pem整合到一個.pem文件中
cat VoiPCert.pem VoIPKey.pem ck.pem
最終生成的ck.pem文件一般就是服務(wù)器用來推送的。
但是我驚奇的發(fā)現(xiàn),不管是對于生產(chǎn)pem,還是測試pem,這兩個網(wǎng)址都可以進(jìn)行驗證
openssl s_client -connect gateway.sandbox.push.apple.com:2195 -cert ck.pem
openssl s_client -connect gateway.push.apple.com:2195 -cert apns-ck.pem
驗證結(jié)果:
。2。。。。。。。。。。
后臺使用的接口
開發(fā)接口:gateway.sandbox.push.apple.com:2195
發(fā)布接口:gateway.push.apple.com:2195
官網(wǎng)提供的是:
開發(fā)接口: api.development.push.apple.com:443
發(fā)布接口: api.push.apple.com:443
這兩個接口都能使用一個是Socket連接的方式,一個是采用Http的方式
。3。。。。。。。。。。。
用終端命令行cd到我們的VoIP文件夾中(有5個證書),輸入: php -f 文件名.php;
?php
$deviceToken = 'token'; //能通
//ck.pem密碼
$pass ='******';
//消息內(nèi)容
$message ='收到金額0.12元,來自支付寶掃碼支付';
//數(shù)字
$badge =1;
$sound ='default';
$body =array();
$body['aps'] =array('alert'= $message);
//把數(shù)組數(shù)據(jù)轉(zhuǎn)換為json數(shù)據(jù)
$payload = json_encode($body);
echostrlen($payload),"\r\n";
$ctx = stream_context_create([
? ? ? ? ? ? ? ? ? ? ? ? ? ? 'ssl'= [
? ? ? ? ? ? ? ? ? ? ? ? ? ? 'verify_peer'? ? ? = false,
? ? ? ? ? ? ? ? ? ? ? ? ? ? 'verify_peer_name'= false
? ? ? ? ? ? ? ? ? ? ? ? ? ? // 'cafile'? ? ? ? ? = '/path/to/bundle/entrust_2048_ca.cer',
? ? ? ? ? ? ? ? ? ? ? ? ? ? ]
? ? ? ? ? ? ? ? ? ? ? ? ? ? ]);
// $pem = dirname(__FILE__) .'/'.'ck.pem';
stream_context_set_option($ctx,'ssl','local_cert','ck.pem');
stream_context_set_option($ctx,'ssl','passphrase', $pass);
// gateway.push.apple.com:2195 -- 正式環(huán)境
// gateway.sandbox.push.apple.com:2195 -- 開發(fā)環(huán)境
$fp = stream_socket_client('tls://gateway.push.apple.com:2195',$err,$errstr,60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx);
if(!$fp) {
? ? print "Failed to connect $err $errstr\n";
? ? return;
}
else{
print "Connection OK\n
";
}
// send message
$msg = chr(0).pack("n",32).pack('H*', str_replace(' ','', $deviceToken)).pack("n",strlen($payload)).$payload;
print "Sending message :" . $payload . "\n";
fwrite($fp, $msg);
fclose($fp);
/*
35 Connection OK
Sending message :{"aps":{"alert":"A test message!"}}?
*/
。補(bǔ)充。。。。。。。。。。。。。。
1、當(dāng)app要上傳App Store時,請在iTunes connect上傳頁面右下角備注中填寫你用到VoIP推送的原因,附加上音視頻呼叫用到VoIP推送功能的demo演示鏈接,演示demo必須提供呼出和呼入功能,demo我一般上傳到優(yōu)酷。
2、經(jīng)過大量測試,VoIP當(dāng)應(yīng)用被殺死(雙擊劃掉)并且黑屏大部分情況都能收到推送,很小的情況會收不到推送消息,經(jīng)測試可能跟手機(jī)電量消耗還有信號強(qiáng)弱有關(guān)。 再強(qiáng)調(diào)一遍,測試穩(wěn)定性請在生產(chǎn)環(huán)境測試。
3、如果不足和錯誤的地方,歡迎補(bǔ)充和改正,謝謝。
手機(jī)系統(tǒng)有安卓的,也有iphone .還有windowphone
安卓上面的應(yīng)用程序都是用java寫的,iphone手機(jī)上的程序是用objective c寫的。
windowphone接觸的不多,市場占有份額也比較少,
如果想學(xué)習(xí)手游,安卓的市場份額比較大,建議選擇安卓,學(xué)習(xí)java編程語言
文本轉(zhuǎn)語音技術(shù), 也叫TTS, 是Text To Speech的縮寫. iOS如果想做有聲書等功能的時候, 會用到這門技術(shù).
這個類就像一個會說話的人, 可以”說話”, 可以”暫?!闭f話, 可以”繼續(xù)”說話, 可以判斷他當(dāng)前是否正在說話.有以下的方法或者屬性:
這是一個枚舉. 在暫停, 或者停止說話的時候, 停下的方式用這個枚舉標(biāo)示. 包括兩種:
合成器的委托, 對于一些事件, 提供了響應(yīng)的接口.
AVSpeechSynthesisVoice定義了一系列的聲音, 主要是不同的語言和地區(qū).
這個類就是一段要說的話. 主要的屬性和方法有:
這些類的關(guān)系如下:
網(wǎng)頁題目:ios語音開發(fā),ios語言開發(fā)
當(dāng)前路徑:http://jinyejixie.com/article30/dschhpo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供移動網(wǎng)站建設(shè)、搜索引擎優(yōu)化、品牌網(wǎng)站建設(shè)、App開發(fā)、品牌網(wǎng)站設(shè)計、網(wǎng)站收錄
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)