Skip to content

madcato/bl-speech-recognizer

Repository files navigation

bl-speech-recognizer

Some implemented use cases for SFSpeechRecognizer.

IMPORTANT

From Apple:

Apple important for speech recognition

Add NSSpeechRecognitionUsageDescription to your project .plist file. This key is required if your app uses APIs that send user data to Apple’s speech recognition servers.

Also add NSMicrophoneUsageDescription to run in real devices. (This is optional for iOS Simulator.)

Apple documentation

Sample usage

See Example app to learn how to use the library.

Continouos speech recognition

import bl_speech_recognizer

class YourClassViewModel: ObservableObject { 
    // ... your properties
    private var speechRecognizer = ContinuousSpeechRecognizer()
    
    @MainActor
    func startRecording() {
        isRecording = true
    
        speechRecognizer.start(inputType: .microphone, locale: .current) { result in
            switch result {
            case .success(let text):
                self.recognizedText = text
            case .failure(let error):
                self.showError(error.localizedDescription)
            }
        }
    }

    @MainActor
    func stopRecording() {
        isRecording = false
        speechRecognizer.stop()
    }
}

You need to stop recognition by calling stop() on the recognizer.

Command speech recognition

import bl_speech_recognizer

class YourClassViewModel: ObservableObject { 
    // ... your properties

    private var speechRecognizer = CommandSpeechRecognizer()

    @MainActor
    func startRecording() {
        isRecording = true
        speechRecognizer.start(inputType: .microphone, locale: .current) { result in
            switch result {
            case .success(let text):
                self.recognizedText = text
                self.isRecording = false
            case .failure(let error):
                self.showError(error.localizedDescription)
            }
        }
    }
}

You don't need to stop recognition, because the CommandSpeechRecognizer will do it. But you can add it to allow user to stop it.

Use cases sequence diagrams

Continuous recognition

sequenceDiagram
    App->>bl-speech-recognizer: start()
    actor User
    User-->>bl-speech-recognizer: "Hello"
    bl-speech-recognizer->>App: recognized("Hello")
    User-->>bl-speech-recognizer: "how"
    bl-speech-recognizer->>App: recognized("Hello how")
    User-->>bl-speech-recognizer: "are"
    bl-speech-recognizer->>App: recognized("Hello how are")
    User-->>bl-speech-recognizer: "you"
    bl-speech-recognizer->>App: recognized("Hello how are you")
    App->>bl-speech-recognizer: stop()
Loading

Command recognition

sequenceDiagram
    App->>bl-speech-recognizer: start()
    actor User
    User-->>bl-speech-recognizer: "Delete"
    User-->>bl-speech-recognizer: "all"
    User-->>bl-speech-recognizer: "files"
    User-->>bl-speech-recognizer: (One second without speech)
    bl-speech-recognizer->>App: recognized("Delete all files")
    bl-speech-recognizer->>bl-speech-recognizer: stop()
Loading

Interruptible chat

sequenceDiagram
    App->>bl-speech-recognizer: start()
    App->>bl-speech-recognizer: synthesize("My name is Chatbot)
    actor User
    bl-speech-recognizer-->>User: "My"
    bl-speech-recognizer-->>User: "name"
    User-->>bl-speech-recognizer: "Delete"
    bl-speech-recognizer->>bl-speech-recognizer:stopSynthesizing()
    User-->>bl-speech-recognizer: "all"
    User-->>bl-speech-recognizer: "files"
    bl-speech-recognizer->>App: recognized("Delete all files", isFinal: true)
Loading

StackOverflow useful links

About

Some implemented use cases for SFSpeechRecognizer

Topics

Resources

License

Contributing

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages