🗣Voice overlay helps you turn your user's voice into text, providing a polished UX while handling for you the necessary permissions

Overview

Voice Overlay for iOS

Platform iOS Swift 4 compatible Carthage compatible CocoaPods compatible License: MIT

Overview

Voice overlay helps you turn your user's voice into text, providing a polished UX while handling for you the necessary permissions.

It uses internally the native SFSpeechRecognizer in order to perform the speech to text conversion.

       

Demo

You can clone and run the Demo project by doing pod install and then running the project

Installation

Swift Package Manager

The Swift Package Manager is a tool for managing the distribution of Swift code. It’s integrated with the Swift build system to automate the process of downloading, compiling, and linking dependencies.

To use SwiftPM, you should use Xcode 11+ to open your project. Click File -> Swift Packages -> Add Package Dependency, enter InstantSearch VoiceOverlay repo's URL.

If you're a framework author and use VoiceOverlay as a dependency, update your Package.swift file:

let package = Package(
    // 1.1.0 ..< 2.0.0
    dependencies: [
        .package(url: "https://github.com/algolia/voice-overlay-ios", from: "1.1.0")
    ],
    // ...
)

CocoaPods

InstantSearchVoiceOverlay is available through CocoaPods. To install it, add the following line to your Podfile:

pod 'InstantSearchVoiceOverlay', '~> 1.1.0'

Carthage

Carthage is a simple, decentralized dependency manager for Cocoa.

To install InstantSearchVoiceOverlay, add the following line to your Cartfile:

1.1.0 ">
github "algolia/voice-overlay-ios" ~> 1.1.0

Usage

  1. In Info.plist, add these 2 string properties along with the description
  • Privacy - Microphone Usage Description with a description like: Need the mic for audio to text
  • Privacy - Speech Recognition Usage Description some description like: Need the speech recognition capabilities for searching tags

  1. Start the Voice Overlay and listen to the text output:
import InstantSearchVoiceOverlay

class ViewController: UIViewController {
    
    let voiceOverlayController = VoiceOverlayController()
    
    @objc func voiceButtonTapped() {
        
        voiceOverlayController.start(on: self, textHandler: { (text, final) in
            print("voice output: \(String(describing: text))")
            print("voice output: is it final? \(String(describing: final))")
        }, errorHandler: { (error) in
            print("voice output: error \(String(describing: error))")
        })
    }

Customization

You can customize your voice overlay by modifying the settings property of the voiceOverlayController:

/// Specifies whether the overlay directly starts recording (true), 
/// or if it requires the user to click the mic (false). Defaults to true.
voiceOverlayController.settings.autoStart = true

/// Specifies whether the overlay stops recording after the user stops talking for `autoStopTimeout`
/// seconds (true), or if it requires the user to click the mic (false). Defaults to true.
voiceOverlayController.settings.autoStop = true

/// When autoStop is set to true, autoStopTimeout determines the amount of
/// silence time of the user that causes the recording to stop. Defaults to 2.
voiceOverlayController.settings.autoStopTimeout = 2

/// The layout and style of all screens of the voice overlay.
voiceOverlayController.settings.layout.<someScreen>.<someConstant>

// Use XCode autocomplete to see all possible screens and constants that are customisable.
// Examples:

/// The voice suggestions that appear in bullet points
voiceOverlayController.settings.layout.inputScreen.subtitleBulletList = ["Suggestion1", "Sug2"]
/// Change the title of the input screen when the recording is ongoing.
voiceOverlayController.settings.layout.inputScreen.titleListening = "my custom title"
/// Change the background color of the permission screen.
voiceOverlayController.settings.layout.permissionScreen.backgroundColor = UIColor.red
/// And many more...

Changing Locale or SpeechController

You can change locale or SpeechController when initializing your voiceOverlayController like so:

lazy var voiceOverlayController: VoiceOverlayController = {
  let recordableHandler = {
    return SpeechController(locale: Locale(identifier: "en_US"))
  }
  return VoiceOverlayController(speechControllerHandler: recordableHandler)
}()

You can create your own custom SpeechController class by implementing the Recordable protocol.

Note that in Swift 4, you can use Locale.current.languageCode to get current locale.

Delegate

Optionally, to listen to text and error events, you can conform to the method of the VoiceOverlayDelegate protocol.

// Second way to listen to recording through delegate
func recording(text: String?, final: Bool?, error: Error?) {
    if let error = error {
        print("delegate: error \(error)")
    }
    
    if error == nil {
        print("delegate: text \(text)")
    }
}

How it handles when Permissions are missing

When there are missing permissions, the voice overlay will guide the user to the correct section of the settings app.

Result Screen (Beta)

The result screen appears when showResultScreen is set to true.

/// Whether or not to show a result screen after the recording is finished.
voiceOverlayController.settings.showResultScreen = true

/// Timeout for showing the result screen in case no resultScreenText is provided on time.
voiceOverlayController.settings.showResultScreenTimeout = 2

/// Time for showing the result screen with the provided resultScreenText.
voiceOverlayController.settings.showResultScreenTime = 4

/// The processed result screen text that should be appear in the result screen.
voiceOverlayController.settings.resultScreenText = NSAttributedString(string: myString, attributes: myAttributes)

The widget provides a resultScreenHandler for when the result screen is dismissed (provided the "Start again" button is not clicked). The handler provides the text that has been set in resultScreenText beforehand.

voiceOverlayController.start(on: self, textHandler: { (text, final) in
    print("getting \(String(describing: text))")
    print("is it final? \(String(describing: final))")

    if final {
        // Process the result to post in the result screen.
        // The timer here simulates a network processing call that took 1.5 seconds.
        Timer.scheduledTimer(withTimeInterval: 1.5, repeats: false, block: { (_) in
            let myString = text
            let myAttribute = [ NSAttributedString.Key.foregroundColor: UIColor.red ]
            let myAttrString = NSAttributedString(string: myString, attributes: myAttribute)

            self.voiceOverlayController.settings.resultScreenText = myAttrString
        })
    }
}, errorHandler: { (error) in
    print("error \(String(describing: error))")
}, resultScreenHandler: { (text) in
    print("Result Screen: \(text)")
})

Getting Help

Getting involved

  • If you want to contribute please feel free to submit pull requests.
  • If you have a feature request please open an issue.
  • If you use InstantSearch in your app, we would love to hear about it! Drop us a line on discourse or twitter.

License

InstantSearchVoiceOverlay is available under the MIT license. See the LICENSE file for more info.

Comments
  • Crash when first request permission

    Crash when first request permission

    hi thanks for this cool library, but I found a problem when my serachController is in the tabBarController

    when it was my first request for permission and I allowed it, the application crashed and after the application was reopened everything went smoothly. but then the problem arises again because when the input page appears the menu on the tabbar is not overwritten like the permission page.

    I really appreciate if you help me solve the problem, cheers

    opened by fadielse 7
  • Problem in SpeechController

    Problem in SpeechController

    After recording has done I want to speak out loud the text what I just said. But I guess there is still SpeechController running in background even though SpeechController.stopRecording() method calls from deinit. I am trying to use this code

    let string = "Hello, World!"
    let utterance = AVSpeechUtterance(string: string)
    utterance.voice = AVSpeechSynthesisVoice(language: "en-US")
    
    let synth = AVSpeechSynthesizer()
    synth.speak(utterance)
    

    But no utterance is happening. Please help me.

    opened by vijaykharage 5
  • Getting NSInternalInconsistencyException on allow microphone

    Getting NSInternalInconsistencyException on allow microphone

    Hi,

    we are seeing some crashes which happen due to the voice overlay search showing permission view controllers.

    Error: Fatal Exception: NSInternalInconsistencyException accessing _cachedSystemAnimationFence requires the main thread

    I can't reproduce it on my simulator... It occurs on several iOS versions and devices. How could this be solved? Is there something happening not on the UI thread?

    Stacktrace
    Fatal Exception: NSInternalInconsistencyException
    0  CoreFoundation                 0x1b9d83758 __exceptionPreprocess
    1  libobjc.A.dylib                0x1b8f8bd00 objc_exception_throw
    2  CoreFoundation                 0x1b9c99434 +[_CFXNotificationTokenRegistration keyCallbacks]
    3  Foundation                     0x1ba773754 -[NSAssertionHandler handleFailureInMethod:object:file:lineNumber:description:]
    4  UIKitCore                      0x1e6c5ad98 -[UIApplication _cachedSystemAnimationFenceCreatingIfNecessary:]
    5  UIKitCore                      0x1e6c5adc8 -[UIApplication _systemAnimationFenceCreatingIfNecessary:]
    6  UIKitCore                      0x1e6ca88c0 +[UIWindow _synchronizedDrawingFence]
    7  UIKitCore                      0x1e7196fa0 +[_UIKeyboardChangedInformation informationForKeyboardUp:withIAV:]
    8  UIKitCore                      0x1e6afb558 -[_UIRemoteKeyboards prepareToMoveKeyboard:withIAV:showing:forScreen:]
    9  UIKitCore                      0x1e6ae4360 -[UIPeripheralHost(UIKitInternal) setInputViews:animationStyle:]
    10 UIKitCore                      0x1e6ae6120 -[UIPeripheralHost(UIKitInternal) _restoreInputViewsWithId:animated:]
    11 UIKitCore                      0x1e66aaca4 -[UIViewController _restoreInputViewsForPresentation]
    12 UIKitCore                      0x1e65bf1f4 -[UIPresentationController runTransitionForCurrentState]
    13 UIKitCore                      0x1e65bd1d4 -[UIPresentationController _dismissWithAnimationController:interactionController:target:didEndSelector:]
    14 UIKitCore                      0x1e66aa7a0 -[UIViewController _dismissViewControllerWithAnimationController:interactionController:completion:]
    15 UIKitCore                      0x1e66aa3ec -[UIViewController _dismissViewControllerWithTransition:from:completion:]
    16 UIKitCore                      0x1e66a9bb8 -[UIViewController dismissViewControllerWithTransition:completion:]
    17 UIKitCore                      0x1e66a9974 -[UIViewController dismissViewControllerWithTransition:completion:]
    18 UIKitCore                      0x1e66a9178 -[UIViewController _performCoordinatedPresentOrDismiss:animated:]
    19 UIKitCore                      0x1e66abf58 -[UIViewController dismissViewControllerAnimated:completion:]
    20 InstantSearchVoiceOverlay      0x10342d26c UIViewController.dismissMe(animated:completion:) (Extensions.swift:24)
    21 InstantSearchVoiceOverlay      0x103430628 partial apply for closure #1 in closure #1 in PermissionViewController.allowMicrophoneTapped() (PermissionViewController.swift:54)
    22 InstantSearchVoiceOverlay      0x10342f15c thunk for @escaping @callee_guaranteed (@unowned Bool) -> () (<compiler-generated>)
    23 AVFAudio                       0x1bfca5a40 __42-[AVAudioSession requestRecordPermission:]_block_invoke
    24 AudioToolbox                   0x1bde79020 invocation function for block in AudioSessionRequestRecordPermission_Common(void (unsigned char) block_pointer)
    25 TCC                            0x1bcb4b964 __TCCAccessRequest_block_invoke.75
    26 TCC                            0x1bcb4fb78 __tccd_send_message_block_invoke
    27 libxpc.dylib                   0x1b99d5e38 _xpc_connection_reply_callout
    28 libxpc.dylib                   0x1b99c902c _xpc_connection_call_reply_async
    29 libdispatch.dylib              0x1b979597c _dispatch_client_callout3
    30 libdispatch.dylib              0x1b97ad83c _dispatch_mach_msg_async_reply_invoke
    31 libdispatch.dylib              0x1b97a5684 _dispatch_kevent_worker_thread
    32 libsystem_pthread.dylib        0x1b998fac0 _pthread_wqthread
    33 libsystem_pthread.dylib        0x1b9995dc4 start_wqthread
    
    opened by IchordeDionysos 4
  • AVAudioEngine Exception

    AVAudioEngine Exception

    Hey,

    This library works perfectly on almost all the devices, but occasionally I get an exception of the following:

    Fatal Exception: com.apple.coreaudio.avfaudio required condition is false: format.sampleRate == hwFormat.sampleRate

    The exception occurs on line 100 of SpeechController on the following statement: let node = audioEngine.inputNode

    stacktrace:

    Fatal Exception: com.apple.coreaudio.avfaudio 0 CoreFoundation 0x1a92eea48 __exceptionPreprocess 1 libobjc.A.dylib 0x1a9015fa4 objc_exception_throw 2 CoreFoundation 0x1a91f0e88 +[_CFXNotificationTokenRegistration keyCallbacks] 3 AVFAudio 0x1b5de5b8c AVAE_RaiseException(NSString*, ...) 4 AVFAudio 0x1b5de5afc AVAE_Check(char const*, int, char const*, char const*, bool) 5 AVFAudio 0x1b5e80888 AVAudioIONodeImpl::SetOutputFormat(unsigned long, AVAudioFormat*) 6 AVFAudio 0x1b5e7a7a4 -[AVAudioNode setOutputFormat:forBus:] 7 AVFAudio 0x1b5e92198 AVAudioEngineImpl::UpdateInputNode(bool) 8 AVFAudio 0x1b5e8e484 -[AVAudioEngine inputNode] 9 InstantSearchVoiceOverlay 0x101cc6ad4 SpeechController.record(textHandler:errorHandler:) + 100 (SpeechController.swift:100) 10 InstantSearchVoiceOverlay 0x101cc6580 closure #1 in SpeechController.startRecording(textHandler:errorHandler:) + 81 (SpeechController.swift:81) 11 InstantSearchVoiceOverlay 0x101cc772c partial apply for closure #1 in SpeechController.requestAuthorization(:) + 67 (SpeechController.swift:67) 12 InstantSearchVoiceOverlay 0x101cc633c thunk for @escaping @callee_guaranteed (@unowned SFSpeechRecognizerAuthorizationStatus) -> () ()

    opened by ShaiAlkoby 3
  • No option to dismiss in case dismiss did not work

    No option to dismiss in case dismiss did not work

    Please add this function

    public func dismiss() {
            self.inputViewController?.dismiss(animated: true, completion: nil)
        }
    

    to VoiceOverlayController

    opened by ahmadmssm 2
  • Crash when dismissed

    Crash when dismissed

    In VoiceOverlayController -> showRecordingScreen -> line number 112, app crash due to trying to set a de-allocated object, i fixed it by replacing un-owned with weak and making self optional -. self?, So please fix it.

    opened by ahmadmssm 2
  • Unable to access settings and init with locale using Objective-C

    Unable to access settings and init with locale using Objective-C

    #import "InstantSearchVoiceOverlay-Swift.h"
    
    // can only use init 
    VoiceOverlayController *voiceOverlayController = [[VoiceOverlayController alloc] init]; 
    
    // error
    voiceOverlayController.settings.autoStopTimeout = 0.5;
    
    // *** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<InstantSearchVoiceOverlay.VoiceOverlayController 0x2827adb80> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key settings.'
    [voiceOverlayController setValue:@(0.5) forKeyPath:@"settings.autoStopTimeout"]
    
    opened by hktvmall 2
  • Change Locale error

    Change Locale error

    When I change change locale like so:

    var voiceOverlayController: VoiceOverlayController {
        let recordableHandler = {
            return SpeechController(locale: Locale(identifier: "en_US"))
        }
        return VoiceOverlayController(speechControllerHandler: recordableHandler)
     }
    

    I get a crash when run:

    inputViewController.dismissHandler = { [unowned self] (retry) in
              self.inputViewController = nil
              if retry {
                self.showRecordingScreen(view)
              }
            }
    
    

    Fatal error: Attempted to read an unowned reference but the object was already deallocated2019-01->10 10:09:32.479917+0700 hoaanhdao[2018:372531] Fatal error: Attempted to read an unowned >reference but the object was already deallocated (lldb)

    opened by tamdragle 2
  • Demo missing file

    Demo missing file

    error: missing module map file: '/Users/Harvey/Downloads/voice-overlay-ios-master/VoiceOverlay-Demo/Pods/Target Support Files/InstantSearchVoiceOverlay/InstantSearchVoiceOverlay.modulemap (in target 'InstantSearchVoiceOverlay')

    opened by HarveyDawn 2
  • Crash when voice controller finishes

    Crash when voice controller finishes

    Is this already usable?

    Because I get a crash when the controller finishes. https://cl.ly/cf78707938f5/Screenshot%2525202018-10-12%252520at%25252016.19.37.png

    voice output: error Error Domain=kAFAssistantErrorDomain Code=4 "(null)" UserInfo={NSUnderlyingError=0x600001698000 {Error Domain=SiriCoreSiriConnectionErrorDomain Code=4 "(null)"}}
    voice output: error Error Domain=kAFAssistantErrorDomain Code=4 "(null)" UserInfo={NSUnderlyingError=0x600001698000 {Error Domain=SiriCoreSiriConnectionErrorDomain Code=4 "(null)"}}
    Fatal error: Attempted to read an unowned reference but the object was already deallocated2018-10-12 16:32:59.928673+0200 simpleclub[5988:1421136] Fatal error: Attempted to read an unowned reference but the object was already deallocated
    
    Process finished with exit code 0
    
    opened by IchordeDionysos 2
  • Bump addressable from 2.7.0 to 2.8.0

    Bump addressable from 2.7.0 to 2.8.0

    Bumps addressable from 2.7.0 to 2.8.0.

    Changelog

    Sourced from addressable's changelog.

    Addressable 2.8.0

    • fixes ReDoS vulnerability in Addressable::Template#match
    • no longer replaces + with spaces in queries for non-http(s) schemes
    • fixed encoding ipv6 literals
    • the :compacted flag for normalized_query now dedupes parameters
    • fix broken escape_component alias
    • dropping support for Ruby 2.0 and 2.1
    • adding Ruby 3.0 compatibility for development tasks
    • drop support for rack-mount and remove Addressable::Template#generate
    • performance improvements
    • switch CI/CD to GitHub Actions
    Commits
    • 6469a23 Updating gemspec again
    • 2433638 Merge branch 'main' of github.com:sporkmonger/addressable into main
    • e9c76b8 Merge pull request #378 from ashmaroli/flat-map
    • 56c5cf7 Update the gemspec
    • c1fed1c Require a non-vulnerable rake
    • 0d8a312 Adding note about ReDoS vulnerability
    • 89c7613 Merge branch 'template-regexp' into main
    • cf8884f Note about alias fix
    • bb03f71 Merge pull request #371 from charleystran/add_missing_encode_component_doc_entry
    • 6d1d809 Adding note about :compacted normalization
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 1
  • Bump addressable from 2.7.0 to 2.8.1

    Bump addressable from 2.7.0 to 2.8.1

    Bumps addressable from 2.7.0 to 2.8.1.

    Changelog

    Sourced from addressable's changelog.

    Addressable 2.8.1

    • refactor Addressable::URI.normalize_path to address linter offenses (#430)
    • remove redundant colon in Addressable::URI::CharacterClasses::AUTHORITY regex (#438)
    • update gemspec to reflect supported Ruby versions (#466, #464, #463)
    • compatibility w/ public_suffix 5.x (#466, #465, #460)
    • fixes "invalid byte sequence in UTF-8" exception when unencoding URLs containing non UTF-8 characters (#459)
    • Ractor compatibility (#449)
    • use the whole string instead of a single line for template match (#431)
    • force UTF-8 encoding only if needed (#341)

    #460: sporkmonger/addressable#460 #463: sporkmonger/addressable#463 #464: sporkmonger/addressable#464 #465: sporkmonger/addressable#465 #466: sporkmonger/addressable#466

    Addressable 2.8.0

    • fixes ReDoS vulnerability in Addressable::Template#match
    • no longer replaces + with spaces in queries for non-http(s) schemes
    • fixed encoding ipv6 literals
    • the :compacted flag for normalized_query now dedupes parameters
    • fix broken escape_component alias
    • dropping support for Ruby 2.0 and 2.1
    • adding Ruby 3.0 compatibility for development tasks
    • drop support for rack-mount and remove Addressable::Template#generate
    • performance improvements
    • switch CI/CD to GitHub Actions
    Commits
    • 8657465 Update version, gemspec, and CHANGELOG for 2.8.1 (#474)
    • 4fc5bb6 CI: remove Ubuntu 18.04 job (#473)
    • 860fede Force UTF-8 encoding only if needed (#341)
    • 99810af Merge pull request #431 from ojab/ct-_do_not_parse_multiline_strings
    • 7ce0f48 Merge branch 'main' into ct-_do_not_parse_multiline_strings
    • 7ecf751 Merge pull request #449 from okeeblow/freeze_concatenated_strings
    • 41f12dd Merge branch 'main' into freeze_concatenated_strings
    • 068f673 Merge pull request #459 from jarthod/iso-encoding-problem
    • b4c9882 Merge branch 'main' into iso-encoding-problem
    • 08d27e8 Merge pull request #471 from sporkmonger/sporkmonger-enable-codeql
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 0
  • Bump tzinfo from 1.2.9 to 1.2.10

    Bump tzinfo from 1.2.9 to 1.2.10

    Bumps tzinfo from 1.2.9 to 1.2.10.

    Release notes

    Sourced from tzinfo's releases.

    v1.2.10

    TZInfo v1.2.10 on RubyGems.org

    Changelog

    Sourced from tzinfo's changelog.

    Version 1.2.10 - 19-Jul-2022

    Commits
    • 0814dcd Fix the release date.
    • fd05e2a Preparing v1.2.10.
    • b98c32e Merge branch 'fix-directory-traversal-1.2' into 1.2
    • ac3ee68 Remove unnecessary escaping of + within regex character classes.
    • 9d49bf9 Fix relative path loading tests.
    • 394c381 Remove private_constant for consistency and compatibility.
    • 5e9f990 Exclude Arch Linux's SECURITY file from the time zone index.
    • 17fc9e1 Workaround for 'Permission denied - NUL' errors with JRuby on Windows.
    • 6bd7a51 Update copyright years.
    • 9905ca9 Fix directory traversal in Timezone.get when using Ruby data source
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 0
  • Bump cocoapods-downloader from 1.4.0 to 1.6.3

    Bump cocoapods-downloader from 1.4.0 to 1.6.3

    Bumps cocoapods-downloader from 1.4.0 to 1.6.3.

    Release notes

    Sourced from cocoapods-downloader's releases.

    1.6.3

    Enhancements
    • None.
    Bug Fixes
    • None.

    1.6.2

    Enhancements
    • None.
    Bug Fixes
    • None.

    1.6.1

    Enhancements
    • None.
    Bug Fixes
    • None.

    1.6.0

    Enhancements
    • None.
    Bug Fixes
    • Adds a check for command injections in the input for hg and git.
      orta #124

    1.5.1

    Enhancements
    • None.
    Bug Fixes
    • Fix "can't modify frozen string" errors when pods are integrated using the branch option
      buju77 #10920

    1.5.0

    ... (truncated)

    Changelog

    Sourced from cocoapods-downloader's changelog.

    1.6.3 (2022-04-01)

    Enhancements
    • None.
    Bug Fixes
    • None.

    1.6.2 (2022-03-28)

    Enhancements
    • None.
    Bug Fixes
    • None.

    1.6.1 (2022-03-23)

    Enhancements
    • None.
    Bug Fixes
    • None.

    1.6.0 (2022-03-22)

    Enhancements
    • None.
    Bug Fixes
    • Adds a check for command injections in the input for hg and git.
      orta #124

    1.5.1 (2021-09-07)

    Enhancements
    • None.

    ... (truncated)

    Commits
    • c03e2ed Release 1.6.3
    • f75bccc Disable Bazaar tests due to macOS 12.3 not including python2
    • 52a0d54 Merge pull request #128 from CocoaPods/validate_before_dl
    • d27c983 Ensure that the git pre-processor doesn't accidentally bail also
    • 3adfe1f [CHANGELOG] Add empty Master section
    • 591167a Release 1.6.2
    • d2564c3 Merge pull request #127 from CocoaPods/validate_before_dl
    • 99fec61 Switches where we check for invalid input, to move it inside the download fun...
    • 96679f2 [CHANGELOG] Add empty Master section
    • 3a7c54b Release 1.6.1
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 0
  • Crash on iOS 12 and iOS 13 devices

    Crash on iOS 12 and iOS 13 devices

    2021-09-01 10:37:38.497110+0530 EduNet[2488:52836] [aqme] 254: AQDefaultDevice (1): output stream 0: null buffer 2021-09-01 10:37:38.527571+0530 EduNet[2488:52836] [aqme] 1640: EXCEPTION thrown (-50): - 2021-09-01 10:37:46.958175+0530 EduNet[2488:52702] RPCTimeout.mm:55:_ReportRPCTimeout: Initialize: Mach message timeout. Apparently deadlocked. Aborting now. CoreSimulator 757.5 - Device: iPhone 7 Plus (69C5E06B-DE35-49CE-BF09-E997779A03F7) - Runtime: iOS 12.1 (16B91) - DeviceType: iPhone 7 Plus Printing description of errorHandler: expression produced error: error: Execution was interrupted, reason: EXC_BAD_ACCESS (code=EXC_I386_GPFLT). The process has been returned to the state before expression evaluation.

    opened by rapuru 0
  • Error Domain=kAFAssistantErrorDomain Code=203

    Error Domain=kAFAssistantErrorDomain Code=203

    some times i got this error. [Utility] +[AFAggregator logDictationFailedWithError:] Error Domain=kAFAssistantErrorDomain Code=203 "Error" UserInfo={NSLocalizedDescription=Error, NSUnderlyingError=0x60000252eee0 {Error Domain=SiriSpeechErrorDomain Code=201 "(null)"}}

    opened by shravanteegala 0
  • remove search screen

    remove search screen

    hi, first thanks for great library. I just want to get text from speech and compare with my text to check condition, so i dont need to show "Searching for" screen, did you have any solution to provide it? Thanks

    opened by fukemy 0
Owner
Algolia
Open source tools for building search. Learn more at community.algolia.com
Algolia
Recording Indicator Utility lets you turn off the orange microphone recording indicator light for live events and screencasts.

Recording Indicator Utility Recording Indicator Utility lets you turn off the orange microphone recording indicator light, making it ideal for profess

Tyshawn Cormier 121 Jan 1, 2023
Voice Memos is an audio recorder App for iPhone and iPad that covers some of the new technologies and APIs introduced in iOS 8 written in Swift.

VoiceMemos Voice Memos is a voice recorder App for iPhone and iPad that covers some of the new technologies and APIs introduced in iOS 8 written in Sw

Zhouqi Mo 322 Aug 4, 2022
A clone for Apple's Voice Memos app.

VoiceMemosClone A clone for Apple's Voice Memos app. Article on Medium. Please read the article on how I created this project here. License Freely pro

Hassan ElDesouky 159 Dec 26, 2022
Another is a tweak written in Logos and Objective-C to customize Apple's voice assistant - Siri.

Preview On screeen: In reality: English: Another Allows you to customize Siri. Only for Jailbreak users. Compiling Theos is required to compile the pr

Matthew 3 May 5, 2022
Learn to Code While Building Apps - The Complete iOS Development Bootcamp

Xylophone Our Goal The goal of this tutorial is to dive into a simple iOS recipe - how to play sound and use an Apple library called AVFoundation. The

The App Brewery 83 Jan 6, 2023
Sample project displaying bugs in the StarSDK while using Kotlin Native

StarSampleSdk iOS Bugs that need to be reproduced Retrieving network printer status fails after subsequent attempts Star Bluetooth printer with an act

Bailey Pollard 1 Aug 18, 2022
AIB indicates for your app users which audio is playing. Just like the Podcasts app.

Audio Indicator Bars for iOS and tvOS Indicates for your app users which audio is playing. Just like the Podcasts app. Index Requirements and Details

Leonardo Cardoso 285 Nov 23, 2022
Silent Rock app: to notify users when approaching silent rock

silent-rock Silent Rock app - to notify users when approaching silent rock. Capstone Concept - Michelle Bodart Team members none Problem Statement #1

null 0 Jan 4, 2022
Nobetci Eczacim is open-source App Store Application which users can get pharmacy information and location easily and safely.

Pharmacy-On-Duty Nobetci Eczacim Project Description This project designed for make it easier for people to search for a pharmacy on duty. App Store A

Mert Demirtas 5 Sep 19, 2022
What is eCortex? A informative tool to manage and organize thoughts and ideas sparked through out the day into custom categories.

eCortex What is eCortex? A informative tool to manage and organize thoughts and ideas sparked through out the day into custom categories. What problem

Myra 21 May 11, 2022
Proof of concept app for trying to integrate passkeys and WebAuthn into Vapor

Vapor Passkey Demo Proof of concept app for trying to integrate passkeys and WebAuthn into Vapor Usage Clone the project, then in Terminal run swift r

Tim Condon 70 Dec 20, 2022
TTSLanguage: Text To Speech commandline executable for macOS

TTSLanguage Text To Speech commandline executable for macOS. It can detect sentence language and read it using proper voice. example: $ TTSLanguage "H

Mateusz Szlosek 2 Jan 17, 2022
Sentiments is an iOS app written in Swift that analyzes text for positive or negative sentiment

Sentiments Sentiments is an iOS app written in Swift that analyzes text for positive or negative sentiment. Positive sentiment is highlighted in green

Kyle Weiner 177 Nov 16, 2022
Meow-Speech - IOS app - Text to Speech

Meow-Speech IOS app - Text to Speech All licensed code belongs to the respective

Shivam Mishra 2 Jul 30, 2022
Audite - My SwiftUI app that is using Google's text to speech API

Speech My SwiftUI app that is using Google's text to speech API. Goal is to list

null 1 May 23, 2022
🖥 Control your display's brightness & volume on your Mac as if it was a native Apple Display

?? Control your display's brightness & volume on your Mac as if it was a native Apple Display. Use Apple Keyboard keys or custom shortcuts. Shows the native macOS OSDs.

null 20k Dec 29, 2022
Squares - a toy drum machine which you can control by multi touch capabilities of your track pad

Squares Squares is a toy drum machine which you can control by multi touch capab

Umur Gedik 7 Oct 3, 2022
An app to get you the latest and the trending news based on your location.

Newsline Link to APK : http://bit.ly/newslineapp Newsline is an android application made with flutter which makes use of NewsAPI.org to fetch and serv

Ayush Shekhar 19 Nov 11, 2022
AudioPlayer is syntax and feature sugar over AVPlayer. It plays your audio files (local & remote).

AudioPlayer AudioPlayer is a wrapper around AVPlayer. It also offers cool features such as: Quality control based on number of interruption (buffering

Kevin Delannoy 676 Dec 25, 2022