3次元で合成音声話す女子がいたら今すぐ連絡ください。
ペッパーはだめです。
というわけでやっていきます。
AWS Polly
いろんな言語を話してくれる音声合成AIです。AIに入るの?
CLIからの利用記事が目立ちますが、今回はどうしてもiPhoneにいれて好きな言葉を話させたかったので、swiftでラッパーを作りました。
ちなみにVersionが違うせいか公式docのままじゃ動きません。
手元の環境
- iOS = 10.0
- Xcode = 8.2
- Swift = 2.2
構築手順
- CognitoIdentityPoolをつくる
enable access to unauthenticated identities
みたいなのにチェックいれとく - サービスクラスをつくる
import Foundation
import UIKit
import AVFoundation
import AWSCore
import AWSPolly
import AWSCognito
class AudioGuidanceService: UIViewController, NSURLSessionDownloadDelegate {
var audioPlayer = AVAudioPlayer()
func say(message: String) {
let credentialsProvider = AWSCognitoCredentialsProvider(
regionType: .USWest2,
identityPoolId: "作成したPoolID"
)
// 匿名で認証する
let configuration = AWSServiceConfiguration(region: .USWest2, credentialsProvider: credentialsProvider)
AWSServiceManager.defaultServiceManager().defaultServiceConfiguration = configuration
// みずきちゃんフォーマットを組み立てる
let input = AWSPollySynthesizeSpeechURLBuilderRequest()
input.textType = AWSPollyTextType.Text
input.text = message
input.outputFormat = AWSPollyOutputFormat.Mp3
input.voiceId = AWSPollyVoiceId.Mizuki
let builder = AWSPollySynthesizeSpeechURLBuilder.defaultPollySynthesizeSpeechURLBuilder().getPreSignedURL(input)
// みずきちゃん召喚!
builder.continueWithSuccessBlock({ (awsTask: AWSTask) in
let result = awsTask.result! as! NSURL
let config: NSURLSessionConfiguration = NSURLSessionConfiguration.backgroundSessionConfigurationWithIdentifier("backgroundSession")
let session: NSURLSession = NSURLSession(configuration: config, delegate: self, delegateQueue: nil)
let url: NSURL = result
let request: NSURLRequest = NSURLRequest(URL: url)
let task:NSURLSessionDownloadTask = session.downloadTaskWithRequest(request)
// タスクを実行.
task.resume()
return nil
})
}
// みずきちゃん召喚後の実体に喋らせる
func URLSession(
session: NSURLSession,
downloadTask: NSURLSessionDownloadTask,
didFinishDownloadingToURL url: NSURL) {
do {
self.audioPlayer = try AVAudioPlayer(contentsOfURL: url)
self.audioPlayer.prepareToPlay()
self.audioPlayer.play()
} catch let error as NSError {
print(error)
} catch {
print("error")
}
}
}
- 利用する
var audio = AudioGuidanceService()
audio.say("はろーわーるど!!")
余談
swift歴2週間なので変なところがあったらご指摘ください!
ちなみに 4
の発音が疑問形っぽくなってかわいい。