この記事は クソアプリアドベントカレンダー2 の5日目の記事です。これを書いている今は実は12/9なのですが、現時点で枠がまだ空いていて、衝動的につくりたいクソアプリを思いついたので急遽参加させていただきました。
ちなみに先日はこんなクソアプリで参加させていただきました。
もはや「リアル」は遅い
Podcastなどの音声コンテンツでは1.5xや2.0xでの倍速再生が普通で、たまに間違って1.0xで再生すると「あれ、Miyagawaさん今日は眠いのかな?」などと感じてしまったりするのはあるあるかと思います。YouTubeではそもそもジェットカットなんて用語もあるぐらい「間」を極限まで減らす編集が好まれる上に、やはり倍速再生している人が多い印象です。最近ではついにはNetflixでも倍速再生が可能となり、映画やドラマも倍速で鑑賞する時代になってきました。
一方で、リアルタイムの勉強会やパネルディスカッション、Zoomでの会議中に、等速で行われる会話の遅さにやきもきしたことはないでしょうか。
もはや我々にはリアルは遅すぎるのです。
「倍速マイク」というiOSアプリをつくった
しくみ
- AirPodsとかのノイズキャンセリングイヤホンを装着して使う(実際の話し声が直接聴こえてしまわないように)
- iPhoneのマイクから入力された音から、無音区間やノイズといった人の声「以外」の音を除外しつつバッファリング
(※)
- ある程度たまったら倍速再生する
(※)
ごめんなさい、今回のクソアプリでは時間の都合でこの無音区間除去までは実装できませんでした🙇🏻♂️
ただ同等の処理(無音区間やノイズといった人の声「以外」の音を除外)を弊アプリ「Chopper」では実装済みなので、フィジビリティ的には問題ありません。
実装のポイント
- 録音は
AVAudioEngine
を利用
- 録音しつつ再生もするので、
AVAudioSession
でplayAndRecord
カテゴリーをセット。allowBluetooth
も忘れずに。
try! AVAudioSession.sharedInstance().setCategory(.playAndRecord, options: .allowBluetooth)
-
倍速再生中も音を録音できるよう、ダブルバッファ化
-
バッファ1を倍速再生中、バッファ2に録音
-
バッファ2を倍速再生中、バッファ1に録音
-
-
発話区間の判定にはSound AnalysisのSound Classificationを利用する
-
speech
に分類された区間だけをバッファにwrite
する
-
- 無音区間の判定には
vDSP
を利用する
使ってみた所感
すみません、デモ動画はないしUIも何もないのでスクショも意味ないし録音された音声ファイルもただの音声だしで何もお見せできるものがないのですが、本当につくって一応人と会話してみました。(ちょうど近くにいた@ku_suke氏に相手になってもらった)
「ある程度たまったら倍速再生」の挙動としては今は 10秒
たまるごとに 2x
で再生するようにしました。
作る前から想像していたことですが、まぁ会話では実用的ではないです。
再生と再生の間が結局手持ち無沙汰になるし、キャッチボールにならないし。
ただ、完全に非実用的なクソアプリかというと、実用的な場面もあるとは思います。
**自分が一方的に聞く立場(反応する必要がない)**場面では、バッファリングする時間をかなり大きめにして、無音区間や非発話区間をがっつりカットすれば、かなり時短になり、十分実用的だと思われます。