たくあんおいしいのブログ

たくあんを食べながらプログラミングとかしますよ

AVSpeechSynthesizerとAVAudioRecorder・AVAudioPlayerを一緒に使おうとしたら躓いた

iOSで音声の録音・再生をするAVAudioなんちゃらを使ってアプリを書いてた。

この記事 iPhoneで録音再生する | matsuhouse のコードを丸々コピペで書いてちゃんと動いた。
やったぜ。と思ったが、さらに同アプリ内でAVSpeechSynthesizerを使ってSiriさんにテキスト読み上げをしてもらおうと思ったら困った。

テキスト読み上げはこの記事 AVSpeechSynthesizer による音声読み上げ を参考にやはりコピペして、一見ちゃんと動いてるように思われたが、
「AVSpeechUtteranceのインスタンスを生成する→AVAudioRecorderで録音する→AVSpeechSynthesizerで合成音声を再生する」
という順番で操作すると、最後のAVSpeechSynthesizerで合成音声を再生するというところで音が出ない!
別に例外を吐くとかエラーが返ってくるとかではなく動いてるかのように見えて音が出ないという事態に見舞われた。

原因は、この記事iPhoneで録音再生する | matsuhouseの③再生のコード
audioSession = [AVAudioSession sharedInstance];
[audioSession setCategory:AVAudioSessionCategoryAmbient error:nil];
こいつだった。
AVSpeechSynthesizer による音声読み上げの合成音声再生処理のところにはこの2行が書いてなかったのでAVSpeechSynthesizerとAVAudioSessionは関係ないのかと思っていたが、どうもAVAudioPlayerと同様に、AVSpeechSynthesizerで再生する前にもこの2行を実行しておく必要があるらしい。

もっとちゃんとした原因は調べてないのでわからないが、対処はできたのでよしとする。

OSC2014Hokkaidoに行ってきた

もう先週のことになってしまったがOSC2014Hokkaidoに行ってきた。
URL: http://www.ospn.jp/osc2014-do/

OSCは初参加。
もともとは「いろいろ情報収集して勉強するぞー」と思って行ったのだが、結果的にめちゃくちゃ笑って帰ってきた。

安藤さんのChefのセミナー(https://www.ospn.jp/osc2014-do/modules/eguide/event.php?eid=8)は、「おっ、いいこと聞いた」という感じがしたので勉強してみることにした。
セミナー内でも紹介があった「Chef実践入門」を買って(OSCの学生交通費援助でもらった図書券で買った!)読んでいる最中である。