在MacOS上以编程方式切换听写

P i*_*P i 6 macos speech-recognition speech-to-text dictation

由于受伤,我在MacOS上使用命令:

在此处输入图片说明

从屏幕截图可以看出,我可以使用键盘快捷键对其进行切换。

我希望从代码中切换它(最好是ObjC)。

我可以手动注入事件:

// Assumes CTRL OPT CMD Space toggles dictation
void toggle_dictation()
{
    // NOTE: To return created event in tap-callback:
    //      cgEvent = [my_nsEvent CGEvent];
    //      CFRetain(cgEvent);

    //unsigned short keyCode_SPACE = 49;

    NSEvent* down_event = [NSEvent keyEventWithType: NSEventTypeKeyDown
                                           location: NSZeroPoint
                                      modifierFlags: NSEventModifierFlagControl | NSEventModifierFlagOption | NSEventModifierFlagCommand
                                          timestamp: 0.0
                                       windowNumber: 0
                                            context: nil
                                         characters: @" "
                        charactersIgnoringModifiers: @" "
                                          isARepeat: false
                                            keyCode: 0 /* keyCode_SPACE */ ];

    NSEvent* up_event = [NSEvent keyEventWithType: NSEventTypeKeyUp
                                         location: NSZeroPoint
                                    modifierFlags: 0
                                        timestamp: 0.0
                                     windowNumber: 0
                                          context: nil
                                       characters: @" "
                      charactersIgnoringModifiers: @" "
                                        isARepeat: false
                                          keyCode: 0 /* keyCode_SPACE */ ];

    CGEventPost(kCGHIDEventTap, [down_event CGEvent]);
    CGEventPost(kCGHIDEventTap, [up_event CGEvent]);
}
Run Code Online (Sandbox Code Playgroud)

...但是这很笨拙,因为它取决于我选择的快捷方式。

有什么方法可以通过API调用吗?

jva*_*ela 2

就在这里:

NSSpeechRecognizer *recognizer = [[NSSpeechRecognizer alloc] init];
// start
[recognizer startListening];
// stop
[recognizer stopListening];
Run Code Online (Sandbox Code Playgroud)

完整的 API 在这里:

https://developer.apple.com/documentation/appkit/nsspeechrecognizer?language=objc