Skip to content

Commit

Permalink
Initialize the audio session for iOS ASR example (#1786)
Browse files Browse the repository at this point in the history
Fixes #1784
  • Loading branch information
Ross-Fan authored Feb 2, 2025
1 parent 59ff854 commit 1d950a8
Showing 1 changed file with 29 additions and 10 deletions.
39 changes: 29 additions & 10 deletions ios-swiftui/SherpaOnnx/SherpaOnnx/SherpaOnnxViewModel.swift
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@
// Created by knight on 2023/4/5.
//

import Foundation
import AVFoundation
import Foundation

enum Status {
case stop
Expand All @@ -22,6 +22,7 @@ class SherpaOnnxViewModel: ObservableObject {

var audioEngine: AVAudioEngine? = nil
var recognizer: SherpaOnnxRecognizer! = nil
private var audioSession: AVAudioSession!

var lastSentence: String = ""
let maxSentence: Int = 20
Expand All @@ -36,20 +37,37 @@ class SherpaOnnxViewModel: ObservableObject {

let start = max(sentences.count - maxSentence, 0)
if lastSentence.isEmpty {
return sentences.enumerated().map { (index, s) in "\(index): \(s.lowercased())" }[start...]
.joined(separator: "\n")
return sentences.enumerated().map { (index, s) in
"\(index): \(s.lowercased())"
}[start...]
.joined(separator: "\n")
} else {
return sentences.enumerated().map { (index, s) in "\(index): \(s.lowercased())" }[start...]
.joined(separator: "\n") + "\n\(sentences.count): \(lastSentence.lowercased())"
return sentences.enumerated().map { (index, s) in
"\(index): \(s.lowercased())"
}[start...]
.joined(separator: "\n")
+ "\n\(sentences.count): \(lastSentence.lowercased())"
}
}

func updateLabel() {
self.subtitles = self.results
}

func setupAudioSession() {
audioSession = AVAudioSession.sharedInstance()
do {
try audioSession.setCategory(
.playAndRecord, mode: .default, options: [.defaultToSpeaker])
try audioSession.setActive(true)
} catch {
print("Failed to set up audio session: \(error)")
}
}

init() {
initRecognizer()
setupAudioSession()
initRecorder()
}

Expand Down Expand Up @@ -116,8 +134,8 @@ class SherpaOnnxViewModel: ObservableObject {
pcmFormat: outputFormat,
frameCapacity:
AVAudioFrameCount(outputFormat.sampleRate)
* buffer.frameLength
/ AVAudioFrameCount(buffer.format.sampleRate))!
* buffer.frameLength
/ AVAudioFrameCount(buffer.format.sampleRate))!

var error: NSError?
let _ = converter.convert(
Expand All @@ -129,7 +147,7 @@ class SherpaOnnxViewModel: ObservableObject {
let array = convertedBuffer.array()
if !array.isEmpty {
self.recognizer.acceptWaveform(samples: array)
while (self.recognizer.isReady()){
while self.recognizer.isReady() {
self.recognizer.decode()
}
let isEndpoint = self.recognizer.isEndpoint()
Expand All @@ -141,7 +159,7 @@ class SherpaOnnxViewModel: ObservableObject {
print(text)
}

if isEndpoint{
if isEndpoint {
if !text.isEmpty {
let tmp = self.lastSentence
self.lastSentence = ""
Expand Down Expand Up @@ -170,7 +188,8 @@ class SherpaOnnxViewModel: ObservableObject {
do {
try self.audioEngine?.start()
} catch let error as NSError {
print("Got an error starting audioEngine: \(error.domain), \(error)")
print(
"Got an error starting audioEngine: \(error.domain), \(error)")
}
print("started")
}
Expand Down

0 comments on commit 1d950a8

Please sign in to comment.