当サイトではPRを含む商品リンクを使用しております。

Swiftで音声入力を実装するクラスのソースコード Xcode16 iOS18対応

Swift

最近はswiftを触っているリンボクです。

実装手順は大きく2つ、

①ソースコードのコピペ
②音声データ使用の認証を追加

です。

細かい例外処理をしていないので、試しに動かす用としての提供です。

Swiftで音声入力を実装するクラスのソースコード Xcode16 iOS18対応

gitにソースコードをアップしております。

GitHub - KidaiRinboku/Swift-Speech-code
Contribute to KidaiRinboku/Swift-Speech-code development by creating an account on GitHub.
コード使用手順

この段階ではコードの準備はできましたが、実行はできません。

また、Canvasのプレビューは音声を扱えずクラッシュするようです。(回避方法は調べてません。シミュレータと実機であれば、後述の認証情報の追加をすればOK)

音声入力の認証を Xcode16 iOS18対応のSwiftで音声入力を実装するクラスのソースコードを読み込んだプロジェクト に追加する

画面左側のファイルツリーで一番上にある、真っ青なxcodeなアイコンのファイルをクリックします。

下記画像でいうと、test_transです。

音声入力の認証情報追加手順
  • 上記のxcodeアイコンなものを開いたら、
  • 画面左のTARGETSを、これもxcodeなアイコンのを選択
  • 画面中央、infoタブに移動
  • Custom iOS Target Propertiesを展開
  • 適当なKey列の行を選び、+ - なボタンがでるので + をクリック
  • Privacy - Microphone Usage Description を選択
  • Value欄に認証時にユーザに見せる文言を追加
  • 適当なKey列の行を選び、+ - なボタンがでるので + をクリック
  • Privacy - Speech Recognition Usage Description を選択
  • Value欄に認証時にユーザに見せる文言を追加

これで実行可能です。

実機またはシミュレータで実行可能かと思います。

Canvasはクラッシュします。(回避方法は特に調べていません)

シミュレータでmacのマイクを使用して Xcode16 iOS18対応のSwiftで音声入力を実装するクラスのソースコードを読み込んだプロジェクト を 試す方法

シミュレータが起動している状態で、

一番上のアップルマークがあるバーで、

I/O > Audio Input > macbookのマイク

呼び出し方 音声入力を実装するクラスのソースコード Xcode16 iOS18対応

Content Viewから、
startRecording(使いたい言語コード) で呼び出します。

gitのContent Viewでは下記の部分で音声入力を呼び出しています。

speechRecognizer.startRecording(language: selectedLanguage)

注意点など 音声入力を実装するクラスのソースコード Xcode16 iOS18対応

音声入力を検知すると、下記のループが回ります。

recognitionTask = speechRecognizer?.recognitionTask(with: recognitionRequest) { result, error in }

ループの中で、下記のテキストが受け付けている音声でリアルテイムで更新されます。

「こんにちは」としゃべると「こ」「こん」「こんにち」「こんにちは」とループしながらテキストを完成させていく挙動です。

result.bestTranscription.formattedString

音声を検知しなくなると、ループはピタっととまります。

しばらく沈黙ののち、再度しゃべると、

result.bestTranscription.formattedString

このテキストは沈黙前のテキストを保持せずに、入力を再び受け付けます。

私がswiftを理解できていないのもありますが、「黙るとループがピタッと止まるため、ループないでのブランクチェックやフラグチェックはできない」「ループごとにテキストが変わりまくるので前後比較はできない」「非同期処理を増やしすぎると変化が激しすぎてその後の同期がむずかしい」。

ということがあり、今回のソースコードは音声入力のループごとにタイマー変数をリセットして、タイマー変数が指定の秒数たったら音声入力情報を確定して、録音を再開しています。

アプリの特性に合わせてカスタマイズして使おうかと思います。

コメント

タイトルとURLをコピーしました