質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Framework

Frameworkは、アプリケーションソフトを開発する際に、一般的な機能をより簡単に、より早く完了させる事を目的とした、ソフトウェアやライブラリのセットを指します。開発にフレームワークを使用する事で、追加で必要となる機能だけを開発するだけで済む為、開発効率の向上が見込めます。

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

Q&A

0回答

1015閲覧

【Swift】音声入力の結果をひらがなで統一する方法が知りたい

Leader731

総合スコア20

Framework

Frameworkは、アプリケーションソフトを開発する際に、一般的な機能をより簡単に、より早く完了させる事を目的とした、ソフトウェアやライブラリのセットを指します。開発にフレームワークを使用する事で、追加で必要となる機能だけを開発するだけで済む為、開発効率の向上が見込めます。

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

0グッド

1クリップ

投稿2020/01/23 11:29

編集2020/01/23 13:47

前提・実現したいこと

音声入力の結果をひらがなで統一する方法が知りたいです。
Speech Frameworkを使って音声入力をした場合、
ひらがな、カタカナ、漢字が入り混じった結果が返ってきてきます。

該当のソースコード

swift5

1import UIKit 2import Speech 3 4class ViewController: UIViewController, SFSpeechRecognitionTaskDelegate { 5 6 //UIラベルの変数 7 @IBOutlet weak var textView: UILabel! 8 @IBOutlet weak var recordButton: UIButton! 9 //UIボタンの変数 10 @IBAction func recordButton(_ sender: UIButton) { 11 if audioEngine.isRunning { 12 // 音声エンジン動作中なら停止 13 audioEngine.stop() 14 recognitionRequest?.endAudio() 15 recordButton.isEnabled = false 16 recordButton.setTitle("Stopping", for: .disabled) 17 recordButton.backgroundColor = UIColor.lightGray 18 return 19 } 20 // 録音を開始する 21 try! startRecording() 22 recordButton.setTitle("録音中", for: []) 23 recordButton.backgroundColor = UIColor.red 24 } 25 26 //メンバプロパティでタスクのオブジェクトを宣言 27 private var recognitionTask: SFSpeechRecognitionTask? 28 //認識リクエストのインスタンスを宣言 29 private var recognitionRequest: SFSpeechAudioBufferRecognitionRequest? 30 31 //SFSpeechRecognizerインスタンスを生成 32 //日本語に指定 33 private let speechRecognizer = SFSpeechRecognizer(locale: Locale(identifier: "ja-JP"))! 34 35 //端末のマイクを使う準備 36 private let audioEngine = AVAudioEngine() 37 38 override func viewDidLoad() { 39 super.viewDidLoad() 40 // Do any additional setup after loading the view. 41 42 //マイクの許可をデフォルトでは無効にしておく 43 recordButton.isEnabled = false 44 45 } 46 47 // 画面に表示される直前に呼ばれます。 48 override func viewWillAppear(_ animated: Bool) { 49 speechRecognizer.delegate = self as? SFSpeechRecognizerDelegate // デリゲート先になる 50 SFSpeechRecognizer.requestAuthorization { (status) in 51 OperationQueue.main.addOperation { 52 switch status { 53 case .authorized: // 許可OK 54 self.recordButton.isEnabled = true 55 self.recordButton.backgroundColor = UIColor.blue 56 case .denied: // 拒否 57 self.recordButton.isEnabled = false 58 self.recordButton.setTitle("録音許可なし", for: .disabled) 59 case .restricted: // 限定 60 self.recordButton.isEnabled = false 61 self.recordButton.setTitle("このデバイスでは無効", for: .disabled) 62 case .notDetermined:// 不明 63 self.recordButton.isEnabled = false 64 self.recordButton.setTitle("録音機能が無効", for: .disabled) 65 default: break 66 } 67 } 68 } 69 } 70 71 private func startRecording() throws { 72 //ここに録音する処理を記述 73 //オプショナルバインディング 74 if let recognitionTask = recognitionTask { 75 // 既存タスクがあればキャンセルしてリセット 76 recognitionTask.cancel() 77 self.recognitionTask = nil 78 } 79 80 let audioSession = AVAudioSession.sharedInstance() 81 try audioSession.setCategory(AVAudioSession.Category.record) 82 try audioSession.setMode(AVAudioSession.Mode.measurement) 83 try audioSession.setActive(true) 84 85 //認識開始の前に認識リクエストを初期化 86 recognitionRequest = SFSpeechAudioBufferRecognitionRequest() 87 guard let recognitionRequest = recognitionRequest else { fatalError("リクエスト生成エラー") } 88 89 //録音完了前に途中の結果を報告してくれる 90 recognitionRequest.shouldReportPartialResults = true 91 92 //audioEngineインスタンスのinputNodeプロパティを取得する 93 let inputNode = audioEngine.inputNode 94 95 //リクエストを登録してタスクを実行 96 recognitionTask = speechRecognizer.recognitionTask(with: recognitionRequest) { (result, error) in 97 var isFinal = false 98 99 if let result = result { 100 self.textView.text = result.bestTranscription.formattedString 101 isFinal = result.isFinal 102 } 103 104 if error != nil || isFinal { 105 self.audioEngine.stop() 106 inputNode.removeTap(onBus: 0) 107 108 self.recognitionRequest = nil 109 self.recognitionTask = nil 110 111 self.recordButton.isEnabled = true 112 self.recordButton.setTitle("Start Recording", for: []) 113 self.recordButton.backgroundColor = UIColor.blue 114 115 } 116 } 117 118 119 //マイクからの録音フォーマット 120 let recordingFormat = inputNode.outputFormat(forBus: 0) 121 122 inputNode.installTap(onBus: 0, bufferSize: 1024, format: recordingFormat) { (buffer: AVAudioPCMBuffer, when: AVAudioTime) in 123 self.recognitionRequest?.append(buffer) 124 } 125 126 //オーディオエンジンで録音を開始して、テキスト表示を変更する 127 audioEngine.prepare() // オーディオエンジン準備 128 try audioEngine.start() // オーディオエンジン開始 129 130 //textView.text = "Hello World" 131 132 } 133 134 //音声認識機能の状態が変化するタイミングで呼ばれる 135 //録音ボタンの有効と無効を切り替える 136 public func speechRecognizer(_ speechRecognizer: SFSpeechRecognizer, availabilityDidChange available: Bool) { 137 if available { 138 // 利用可能になったら、録音ボタンを有効にする 139 recordButton.isEnabled = true 140 recordButton.setTitle("Start Recording", for: []) 141 recordButton.backgroundColor = UIColor.blue 142 } else { 143 // 利用できないなら、録音ボタンは無効にする 144 recordButton.isEnabled = false 145 recordButton.setTitle("現在、使用不可", for: .disabled) 146 } 147 } 148 149 override func didReceiveMemoryWarning() { 150 super.didReceiveMemoryWarning() 151 // Dispose of any resources that can be recreated. 152 } 153 154} 155

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問