iOS 集成文档
最近更新时间:2023-06-28 09:23:05 前往 Coding 编辑 导出文档
语音转译(translation)
要开始在iOS上使用语音转译,我们建议您下载SpeechRecognition。
功能介绍
SpeechRecognition 是一个语音转译应用程序,演示了如何在iOS上使用Whisper。该代码是用Swift编写。
要求
- Xcode 12.4 or later
- iOS 13.0或更高版本
集成步骤
1.准备模型
将.bin
格式模型文件保存到model
文件夹。
2.导入语音转译C++文件库
将C++文件复制到项目文件夹下,
whisper.h
whisper.cpp
ggml.h
ggml.c
3.添加录音权限
如果开启录音时项目crash,请检查plist文件中,是否添加 Privacy - Microphone Usage Description
录音权限
代码简介
在这一部分中,我们将逐步完成代码。
开启录音
通过FileManager在Documents/
目录下创建并获取录音文件地址,开启录音
do {
let file = try FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: true).appendingPathComponent("output.wav")
try await self.recorder.startRecording(toOutputFile: file, delegate: self)
self.messageLog += "录音中...\n"
self.isRecording = true
self.recordedFile = file
}
获取语音流
通过 RiffWaveUtils
中的decodeWaveFile()
方法 获取到文件的流信息
func decodeWaveFile(_ url: URL) throws -> [Float] {
let data = try Data(contentsOf: url)
let floats = data.withUnsafeBytes { (ptr: UnsafeRawBufferPointer) -> [Float] in
let count = (data.count - 44) / 2 // 计算采样点的个数
let buffer = UnsafeRawBufferPointer(start: ptr.baseAddress!.advanced(by: 44), count: count*2) // 跳过 WAV 文件头
return buffer.bindMemory(to: Int16.self).map { max(-1.0, min(Float($0) / 32767.0, 1.0)) }
}
return floats
}
开始转译
获取语音流之后,调用whisperContext
的getTranscription()
方法,返回值即为转译结果
do {
let data = try readAudioSamples(url)
await whisperContext.fullTranscribe(samples: data)
let text = await whisperContext.getTranscription()
messageLog += "识别完成: \(text)\n"
}