[iOS] 使用 AVSpeechSynthesizer 實現文字轉語音 (TTS) 功能

iOS 7 開始提供 TTS(Text to Speech) API,可以實現文字轉語音的功能。

範例程式畫面如下,由 Text Field 和 Button 組成的簡單畫面。
首先要在專案中加入 AVFoundation.framework 這個函式庫
然後開始撰寫程式,要先匯入 AVFoundation 函式庫
import AVFoundation
Button 的程式碼如下:
let synth = AVSpeechSynthesizer()
    var myUtterance = AVSpeechUtterance(string: "")
 
    @IBAction func textToSpeechButton(_ sender: UIButton) {

        myUtterance = AVSpeechUtterance(string: txtFieldText.text!)
        myUtterance.rate = 0.4
        myUtterance.pitchMultiplier = 1.2
        myUtterance.postUtteranceDelay = 0.1
        myUtterance.volume = 1
        myUtterance.voice = AVSpeechSynthesisVoice(language: "zh-TW")
        synth.speak(myUtterance)
        
    }
utterance 可用的屬性如下,上面的數值已經是經過調整後,聽起來較正常的聲音:
  • rate:發音速度,數值越大讀的越快
  • pitchMultiplier:音高
  • postUtteranceDelay:讀完一段話後的停頓時間
  • preUtteranceDelay:讀一段話之前的停頓時間
  • volume:音量
  • voice:使用的聲音(可以指定不同語系的語言)
完成以上的程式,模擬器已經可以正常運作,可是實體機仍沒有聲音,要讓實體機有聲音,請在 viewDidLoad 加入以下程式碼
do{
            try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback)         
            do{
                try AVAudioSession.sharedInstance().setActive(true)
            }catch{
                
            }
        }catch{
            
        }

完整程式碼如下

分類:

[iOS] CocoaPods 套件管理工具的安裝

最近終於決定踏入 iOS 開發的領域,要寫 iOS,除了要有一台 Mac 之外,還得要安裝 4.43 GB 的 Xcode。然而,Xcode 不像 Android Studio 使用 Gradle 做套件管理和自動化建置,它需要依靠第三方工具來做套件管理,較著名的是 CocoaPods。

安裝 CocoaPods

在安裝之前,請執行下面的指令,先將 Ruby 升級到最新版本
sudo gem update --system

然後開始安裝 CocoaPods
sudo gem install cocoapods

這樣就裝好了

設定 CocoaPods

完成安裝之後,要執行下面的指令,
pod setup
你會發現,它會停在「Setting up CocoaPods master repo」沒有反應,其實背後是在執行程式下載的動作。

也可以使用 --verbose 參數,顯示安裝過程
pod setup --verbose
等待約十五分鐘才會執行完畢,這個設定的動作是將程式下載到 /.cocoapods 目錄下,可以查看這個目錄的大小,有 852 MB!


參考資料:[StackOverflow] Pod install is staying on 「Setting up CocoaPods Master repo」

開始使用 CocoaPods 管理套件

首先,在專案根目錄下執行以下指令,它會自動生成 Podfile 設定檔
pod init
使用文字編輯器編輯 Podfile,加入你要使用的第三方套件。

最後執行安裝指令。
pod install
需等待一段時間,套件會被安裝到 /Pod 目錄下,還會產生 XXX.xcworkspace 檔案,之後要開你的專案就要選這個檔案,不是 XXX.xcodeproj。

分類:

[Android] 使用 Calligraphy 自訂字型

要更改 Android App 的字型,正常的做法是使用 setTypeface,改變 TextView 的字型。可是一旦要變更的 TextView 很多的時候,修改起來相當費時。

Calligraphy 這個函式庫使用注入的方式,自動尋找 Activity 中 TextView,並設置其使用的字型。

先安裝函式庫,然後將你要變更的字型檔放到 assets/ 目錄下
dependencies {
    compile 'uk.co.chrisjenx:calligraphy:2.2.0'
}

在 Application 的 onCleate 初始要使用的字型
@Override
public void onCreate() {
    super.onCreate();
    CalligraphyConfig.initDefault(new CalligraphyConfig.Builder()
                     .setDefaultFontPath("fonts/Roboto-Regular.ttf")
                     .setFontAttrId(R.attr.fontPath)
                     .build()
            );
    //....
}
然後在 Activity 的 attachBaseContext 方法中注入 CalligraphyContextWrapper。
@Override
protected void attachBaseContext(Context newBase) {
    super.attachBaseContext(CalligraphyContextWrapper.wrap(newBase));
}

這個 Activity 中的 TextView 字型就會全部改變了,如果有 BaseActivity 的話,建議加在 BaseActivity。

分類:

GTmetrix 網站檢測工具

GTmetrix 是一個線上的網站檢測分析工具,它在全世界 7 個地區(香港、雪梨、巴西聖保羅、溫哥華、美國達拉斯、倫敦、印度孟買)佈建 13 台伺服器。透過這些伺服器的分析,提供使用者效能最佳化的建議。

GTmetrix 首頁可以直接輸入網址分析。首頁的測試只能使用溫哥華的主機,以及 Firefox 瀏覽器做測試。如果要使用其他地區的主機,和 Chrome 瀏覽器測試的話,要另外申請帳號登入做測試。

測試結果有兩個分數:PageSpeed Score 和 YSlow Score,分數越高越好。在下方會列出建議修改的項目。

用帳號登入後,可以選擇測試伺服器的地區、欲測試的瀏覽器種類、以及連線類型

GTmetrix 可以設定定期監控某個網站,當監控值分數過低時會發通知,不過免費版本只能選用溫哥華的測試伺服器。檢測頻率則可選擇每天、每週或每月。


這個網站還有一個有趣的功能,它會檢測 Google 公布的前一千大網站


GTmetrix 也有提供 REST API,可與外部系統整合。因此我們可以整合至 CI 系統,當程式部署之後,可以馬上執行 GTmetrix 檢測。



分類:

[Android] MultiDex

因為前陣子的程式做了重構,加入了 RxJava 相關函式庫,導致 App 內的 Method 總數超過 64435 個,導致 App 無法編譯,於是參考 Google 建議的做法,解決這個問題。
在 App 層級的 build.gradle 加入 multiDexEnabled true
android {
    compileSdkVersion 21
    buildToolsVersion "21.1.0"

    defaultConfig {
        ...
        minSdkVersion 14
        targetSdkVersion 21
        ...

        // Enabling multidex support.
        multiDexEnabled true
    }
    ...
}
如果 App 支援 Android 4.x 的話,要額外做以下的步驟,否則會出現以下的錯誤。
Exception java.lang.NoClassDefFoundError: rx.plugins.RxJavaHooks
rx.Observable.create (Observable.java:98)
retrofit2.adapter.rxjava.RxJavaCallAdapterFactory$SimpleCallAdapter.adapt (RxJavaCallAdapterFactory.java:233)
retrofit2.adapter.rxjava.RxJavaCallAdapterFactory$SimpleCallAdapter.adapt (RxJavaCallAdapterFactory.java:219)
retrofit2.Retrofit$1.invoke (Retrofit.java:147)
首先要引用 Multidex 函式庫
compile 'com.android.support:multidex:1.0.1'
然後,在 Application class 要改成繼承 MultiDexApplication
public class BaseApplication extends MultiDexApplication {
...
}
如果 Application 已繼承自定的方法,也可以直接覆寫 attachBaseContext 方法
@Override 
protected void attachBaseContext(Context base) {
    super.attachBaseContext(base); 
    MultiDex.install(this);
}

結語

Android 的第三方函式庫固然好用,畢竟不用自己造輪子,可是用多了第三方函式庫的話,很容易超過 Android 64K 方法數的限制。即便用了 MultiDex 突破 64K 方法數的限制,可是 MultiDex 可能會有 App 啟動時間過長的問題,在使用前還是事先要評估一下,拿掉不必要的第三方函式庫,也許才是正解。

參考資料


分類:

PHP + MySQL 的 VPS 免費虛擬主機

Byethost 和 000webhost 這兩家都是經營多年的 VPS 虛擬主機供應商,也提供相當不錯的免費方案,我將這兩家的免費方案(2016 年 10 月)列表整理如下。

Byethost 000webhost
檔案空間 1 TB 1.5 GB
每月流量 50 GB 100 GB
每日請求數 50000 無上限
支援 FTP
支援 Cron Job
phpMyAdmin
後台 CPanel CPanel
MySQL 資料庫 5 個 無上限
自訂網域 最多5個 無上限
PHP版本 5.6.32 5.2.x
MySQL版本 5.6.30 5.1.x

000webhost 的系統版本稍舊,檔案空間只能算堪用,可是它每個月的流量較多,也沒有每天請求數的限制。Byethost 則是 1TB 的大容量空間非常吸引人。 我在這兩家 VPS 都試裝過 WordPress,搭配 CloudFlare,連線速度和穩定度都不錯。如果對流量的要求大於空間的話,建議使用 000webhost

對於有架設網站需求的朋友,雖然不少人推薦使用 WixWeebly 之類,號稱快速架站的 Website Builder,但這些網站免費帳號提供的服務,不但不能自訂網域,也有流量上的限制,還不如申請免費的虛擬主機自行架站,也較有主控權。


分類:

使用 Vysor 在電腦上控制 Android 裝置

市面上有很多工具(例如之前介紹過的 Anrdoid Tool for Mac)都能將 Android 裝置畫面投射到電腦上,但這些工具的投射方式,多半使用 ADB 不斷對 Android 裝置截圖,再將截圖畫面傳送到電腦,讓用戶在電腦上感覺到 Android 裝置在操作,而這些工具無法從電腦上控制 Android 裝置。

這裡介紹 ClockworkMod 創辦人及主要開發者 Koush,開發的 Vysor

安裝

首先,在手機上安裝 Vysor App

然後在電腦上的 Chrome 瀏覽器安裝 Chrome App (個人猜測大概有用到 Chrome Remote Debugging

Windows 平台需要額外安裝 ADB Driver

手機

在手機上安裝 Vysor App 之後,就開啟它。這個 App 只是做連線之用,沒有與使用者互動的功能。只要隨著它的指示跟著操作即可。

首先是歡迎畫面

然後要打開手機上的 USB Debugging,可以從「Open Developer Options」開啟「開發人員選項」去開啟「USB Debugging」

使用 USB 線連接電腦

完成第一次設定後,以後如果要使用 Vysor,手機接上電腦,然後從電腦端的 Chrome App 開啟,就會自動完成連線,不需要從手機端開啟 Vysor App。

Chrome

打開 Chrome 瀏覽器上的 Vysor App

點選「Find Devices」

此時,Vysor 應會找到你連接至電腦的 Android 裝置。如果沒有找到裝置,可以參考這裡的故障排除方法。

選取裝置之後,Android 裝置會出現安全警示訊息,按下確定即可。

如果出現這個畫面,表示 Android 裝置成功連結到手機。

然後,就可以從電腦觀看或操作 Android 裝置了

結語

Vysor 可以將 Android 裝置的畫面投射到電腦,不但操作非常流暢,而且可以從電腦端操作 Android 裝置,非常適合 Demo 簡報時使用。或者打電動時,覺得手機操控不方便,也可以投射到電腦來操作。


分類: ,

[Mac] 使用 QuickTime Player 的螢幕錄製功能

不同於 Windows,Mac 內建的 QuickTime Player 有「螢幕錄影」功能,因此不用再安裝其他軟體,就能將電腦上的操作步驟錄影下來。

螢幕錄製

直接從應用程式開啟「QuickTime Player」

從上方工具列開啟「檔案 > 新增螢幕錄製」

然後會出現螢幕錄製的小工具

螢幕錄製預設是關閉麥克風,如果要錄聲音,要將麥克風選項選擇「內建麥克風」

然後按下中間的紅點按鈕,開始錄製

錄製之前,如果只要錄製部分的螢幕,直接用滑鼠將你要錄製的部分選取

然後按下「開始錄製」,就會開始錄影了

從工具列的「QuickTime Player」按滑鼠右鍵,選擇「停止螢幕錄製」,就會停止錄製

mov 檔轉 mp4 檔

使用 QuickTime Player 錄製出來的影片是 mov 格式,mov 格式檔案會很大,不利於網路傳輸。此時可以用 Mac 內建的功能,將 mov 格式的影片檔轉檔成 mp4 格式。

選擇要轉檔的 mov 檔,按滑鼠右鍵,選擇「為所選的影片檔案編碼」

此時會出現編碼媒體視窗,將 Setting 改選為「720p」,按下「繼續」,就開始轉檔了

轉檔後會產生 m4v 副檔名的檔案,可以直接把副檔名 m4v,改成 mp4 

同場加映:mov 檔案合併

Mac QuickTime Player 可以將多個 mov 檔案合併成一個檔

先開啟第一個影片檔,再將要合併的檔案依序拖曳到第一個影片檔,第一個影片檔下方會出現一個小視窗,顯示合併進來的影片檔內容,待全部拖曳之後,按下「完成」,然後儲存檔案,就完成檔案的合併。



分類:

Copyright © Andy Cheng

Distributed By My Blogger Themes | Blogger Theme By NewBloggerThemes Up ↑