1. 程式人生 > >ios原生文字轉語音

ios原生文字轉語音

link inf oid uic 是我 代理方法 聲音錄制 初始 https

因新項目需求,需要接入類似支付寶收款提示聲----“支付寶到賬xxxx元”,就查看了一些文章,蘋果還是想的很周全,廢話不多說。

首先

在General -> Linked Frameworks and Libraries 中導入 AVFoundation框架

其次

頭文件包含 #import <AVFoundation/AVSpeechSynthesis.h>

AVSpeechSynthesizerDelegate 實現文字轉語音需要代理方法 用來控制聲音,由於我的項目不需要進行控制,所以代理方法暫時不需要,稍後會貼上代理控制的方法,根據項目需求自行設置。

定義一個全局變量(局部也可),如果需要進行暫停,繼續播放等控制操作,定義全局變量

@property(nonatomic,strong) AVSpeechSynthesizer *voice;

.m下創建一個textfield --------- 用來輸入需要轉換的文字 (如果不需要就不創建,直接AVSpeechUtterance初始化的時候添加文字即可 稍後會講到)

創建一個按鈕 ---------用來控制語音的暫停/繼續。(按鈕創建就不用多說了,不會的趕緊買塊豆腐去O(∩_∩)O)

按鈕點擊方法 在實現中需要將按鈕傳過去

[speechaddTarget:selfaction:@selector(speech:)forControlEvents:UIControlEventTouchUpInside];

實現

- (void)speech:(UIButton*)btn

因為要用這個按鈕來判斷點擊狀態 讓她播放或者暫停或者繼續播放

在實現方法中,進行初始化。

技術分享圖片

如果需要用代理方法控制聲音的暫停/繼續那就需要設置代理,不需要就請忽略

技術分享圖片

先初始化 後面帶上需要轉換的文字,也就是textField輸入的內容。

接著 我們就可以玩一玩這個語音了

技術分享圖片

技術分享圖片

第一個 pitchMultiplier

音調調節 調節範圍 :[0.5 - 2] 默認是:1

第二個 volume

音量調節 調節範圍 :[0-1] 默認是 :1

第三個 tate

語速調節 調節範圍 :[0-1] 0最慢 1 最快

說個題外話 之前一直認為支付寶的提示聲也是轉出來的,後來看到一個視頻,發現我錯了, 支付寶的提示聲 是他們一個員工的聲音錄制的,這個員工是臺灣人,也是支付寶的交互設計師,叫唐啥來著 我記不起來了。日後有機會 可以封裝一個 定制文字轉語音播放的庫,各式各樣的聲音 。。。。扯多了 繼續,

既然是轉語音 那就需要進行語種的設置了

技術分享圖片

附上 各個語種 如果直接設置 如 “th -TH”放到 設置語種的方法最好就哦啦

"[AVSpeechSynthesisVoice 0x978a0b0] Language: th-TH",

"[AVSpeechSynthesisVoice 0x977a450] Language: pt-BR",

"[AVSpeechSynthesisVoice 0x977a480] Language: sk-SK",

"[AVSpeechSynthesisVoice 0x978ad50] Language: fr-CA",

"[AVSpeechSynthesisVoice 0x978ada0] Language: ro-RO",

"[AVSpeechSynthesisVoice 0x97823f0] Language: no-NO",

"[AVSpeechSynthesisVoice 0x978e7b0] Language: fi-FI",

"[AVSpeechSynthesisVoice 0x978af50] Language: pl-PL",

"[AVSpeechSynthesisVoice 0x978afa0] Language: de-DE",

"[AVSpeechSynthesisVoice 0x978e390] Language: nl-NL",

"[AVSpeechSynthesisVoice 0x978b030] Language: id-ID",

"[AVSpeechSynthesisVoice 0x978b080] Language: tr-TR",

"[AVSpeechSynthesisVoice 0x978b0d0] Language: it-IT",

"[AVSpeechSynthesisVoice 0x978b120] Language: pt-PT",

"[AVSpeechSynthesisVoice 0x978b170] Language: fr-FR",

"[AVSpeechSynthesisVoice 0x978b1c0] Language: ru-RU",

"[AVSpeechSynthesisVoice 0x978b210] Language: es-MX",

"[AVSpeechSynthesisVoice 0x978b2d0] Language: zh-HK",中文(香港)粵語

"[AVSpeechSynthesisVoice 0x978b320] Language: sv-SE",

"[AVSpeechSynthesisVoice 0x978b010] Language: hu-HU",

"[AVSpeechSynthesisVoice 0x978b440] Language: zh-TW",中文(臺灣)

"[AVSpeechSynthesisVoice 0x978b490] Language: es-ES",

"[AVSpeechSynthesisVoice 0x978b4e0] Language: zh-CN",中文(普通話)

"[AVSpeechSynthesisVoice 0x978b530] Language: nl-BE",

"[AVSpeechSynthesisVoice 0x978b580] Language: en-GB",英語(英國)

"[AVSpeechSynthesisVoice 0x978b5d0] Language: ar-SA",

"[AVSpeechSynthesisVoice 0x978b620] Language: ko-KR",

"[AVSpeechSynthesisVoice 0x978b670] Language: cs-CZ",

"[AVSpeechSynthesisVoice 0x978b6c0] Language: en-ZA",

"[AVSpeechSynthesisVoice 0x978aed0] Language: en-AU",

"[AVSpeechSynthesisVoice 0x978af20] Language: da-DK",

"[AVSpeechSynthesisVoice 0x978b810] Language: en-US",英語(美國)

"[AVSpeechSynthesisVoice 0x978b860] Language: en-IE",

"[AVSpeechSynthesisVoice 0x978b8b0] Language: hi-IN",

"[AVSpeechSynthesisVoice 0x978b900] Language: el-GR",

"[AVSpeechSynthesisVoice 0x978b950] Language: ja-JP"

最後 開始 播放 停止播放 這裏就不用代理實現了

[voice speakUtterance:speech]; //開始播放

[voice continueSpeaking]; // 停止播放

[voice pauseSpeakingAtBoundary:AVSpeechBoundaryWord];//暫停

如果想用代理實現的話 方法如下

- (void)speechSynthesizer:(AVSpeechSynthesizer*)synthesizer didStartSpeechUtterance:(AVSpeechUtterance*)utterance;

//開始

- (void)speechSynthesizer:(AVSpeechSynthesizer*)synthesizer didFinishSpeechUtterance:(AVSpeechUtterance*)utterance;

//完成

- (void)speechSynthesizer:(AVSpeechSynthesizer*)synthesizer didPauseSpeechUtterance:(AVSpeechUtterance*)utterance;

//暫停

- (void)speechSynthesizer:(AVSpeechSynthesizer*)synthesizer didContinueSpeechUtterance:(AVSpeechUtterance*)utterance;

//恢復

- (void)speechSynthesizer:(AVSpeechSynthesizer*)synthesizer didCancelSpeechUtterance:(AVSpeechUtterance*)utterance;

//取消

這是我git地址 對這些簡單的進行了包裝 大家有空可以去看看https://github.com/FormerMonster/JCVoice 純屬為了方便設置 ,節省開發時間。大家見諒 如若有需要修正的 望指正 。

ios原生文字轉語音