快速入门:在 macOS 上使用语音 SDK 通过 Objective-C 识别语音Quickstart: Recognize speech in Objective-C on macOS by using the Speech SDK

本文介绍如何使用 Azure 认知服务语音 SDK 在 Objective-C 中创建一个 macOS 应用,以便将通过麦克风录制的语音转录为文本。In this article, you learn how to create a macOS app in Objective-C by using the Azure Cognitive Services Speech SDK to transcribe speech recorded from a microphone to text.

先决条件Prerequisites

准备工作:Before you get started, you'll need:

获取适用于 macOS 的语音 SDKGet the Speech SDK for macOS

Important

下载任何 Azure 认知服务语音 SDK,即表示你已确认接受其许可条款。By downloading any of the Azure Cognitive Services Speech SDKs, you acknowledge its license. 有关详细信息,请参阅:For more information, see:

Important

需要语音 SDK 1.11.0 或更高版本。Speech SDK version 1.11.0 or later is required.

适用于 Mac 的认知服务语音 SDK 目前以框架捆绑包的形式分发。The Cognitive Services Speech SDK for Mac is distributed as a framework bundle. 可在 Xcode 项目将它作为 CocoaPod 使用,或者从 https://aka.ms/csspeech/macosbinary 下载,然后手动与它建立链接。It can be used in Xcode projects as a CocoaPod or downloaded from https://aka.ms/csspeech/macosbinary and linked manually. 本文使用 CocoaPod。This article uses a CocoaPod.

创建 Xcode 项目Create an Xcode project

启动 Xcode,然后通过选择“文件” > “新建” > “项目”来启动新项目。**** **** ****Start Xcode, and start a new project by selecting File > New > Project. 在模板选择对话框中,选择“Cocoa 应用”模板。****In the template selection dialog box, select the Cocoa App template.

在随后的对话框中,进行以下选择。In the dialog boxes that follow, make the following selections.

  1. 在“项目选项”**** 对话框中,执行以下操作:In the Project Options dialog box:

    1. 为快速入门应用输入一个名称,例如 helloworldEnter a name for the quickstart app, for example, helloworld.
    2. 如果已经有 Apple 开发人员帐户,请输入相应的组织名称和组织标识符。Enter an appropriate organization name and an organization identifier if you already have an Apple developer account. 出于测试目的,请使用 testorg 之类的名称。For testing purposes, use a name like testorg. 若要对应用进行签名,需要适当的预配配置文件。To sign the app, you need a proper provisioning profile. 有关详细信息,请参阅 Apple 开发人员站点For more information, see the Apple developer site.
    3. 确保选择 Objective-C 作为项目的语言。Make sure Objective-C is selected as the language for the project.
    4. 清除使用情节提要和创建基于文档的应用程序的复选框。Clear the check boxes to use storyboards and to create a document-based application. 以编程方式创建示例应用的简单 UI。The simple UI for the sample app is created programmatically.
    5. 清除所有用于测试和核心数据的复选框。Clear all the check boxes for tests and core data.

    项目设置

  2. 选择项目目录:Select a project directory:

    1. 选择用于放置该项目的目录。Choose a directory to put the project in. 此步骤会在主目录中创建一个 helloworld 目录,其中包含 Xcode 项目的所有文件。This step creates a helloworld directory in your home directory that contains all the files for the Xcode project.
    2. 禁止创建适用于此示例项目的 Git 存储库。Disable the creation of a Git repo for this example project.
  3. 设置网络和麦克风访问权限。Set the entitlements for network and microphone access. 选择左侧概述中第一行内的应用名称转到应用配置,Select the app name in the first line in the overview on the left to get to the app configuration. 然后选择“功能”选项卡。****Then select the Capabilities tab.

    1. 为该应用启用“应用沙盒”设置。****Enable the App sandbox setting for the app.
    2. 选择“传出连接”和“麦克风”访问权限对应的复选框。**** ****Select the check boxes for Outgoing Connections and Microphone access.

    沙盒设置

  4. 该应用还需要在 Info.plist 文件中声明使用麦克风。The app also needs to declare use of the microphone in the Info.plist file. 选择概述中的文件,然后添加“隐私 - 麦克风使用说明”键,其值类似于“语音识别所需的麦克风”。******Select the file in the overview, and add the Privacy - Microphone Usage Description key with a value like Microphone is needed for speech recognition.

    Info.plist 中的设置

  5. 关闭 Xcode 项目。Close the Xcode project. 稍后在设置 CocoaPods 后,将使用该项目的另一个实例。You use a different instance of it later after you set up the CocoaPods.

安装用作 CocoaPod 的 SDKInstall the SDK as a CocoaPod

  1. 根据安装说明中所述,安装 CocoaPod 依赖项管理器。Install the CocoaPod dependency manager as described in its installation instructions.

  2. 转到示例应用所在的目录,即 helloworld。Go to the directory of your sample app, which is helloworld. 在该目录中添加一个包含以下内容的名为 Podfile 的文本文件:Place a text file with the name Podfile and the following content in that directory:

    target 'helloworld' do
      platform :osx, '10.13'
      pod 'MicrosoftCognitiveServicesSpeech-macOS', '~> 1.7.0'
    end
    
  3. 在终端中导航到 helloworld 目录并运行命令 pod installGo to the helloworld directory in a terminal, and run the command pod install. 此命令生成一个 helloworld.xcworkspace Xcode 工作区,其中包含示例应用以及用作依赖项的语音 SDK。This command generates a helloworld.xcworkspace Xcode workspace that contains both the sample app and the Speech SDK as a dependency. 在以下步骤中使用此工作区。This workspace is used in the following steps.

添加示例代码Add the sample code

  1. 在 Xcode 中打开 helloworld.xcworkspace 工作区。Open the workspace helloworld.xcworkspace in Xcode.

  2. 将自动生成的 AppDelegate.m 文件的内容替换为以下代码:Replace the contents of the autogenerated AppDelegate.m file with the following code:

    #import "AppDelegate.h"
    #import <MicrosoftCognitiveServicesSpeech/SPXSpeechApi.h>
    
    
    @interface AppDelegate ()
    @property (weak) IBOutlet NSWindow *window;
    @property (weak) NSButton *button;
    @property (strong) NSTextField *label;
    @end
    
    @implementation AppDelegate
    
    - (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
        self.button = [NSButton buttonWithTitle:@"Start Recognition" target:nil action:nil];
        [self.button setTarget:self];
        [self.button setAction:@selector(buttonPressed:)];
        [self.window.contentView addSubview:self.button];
    
        self.label = [[NSTextField alloc] initWithFrame:NSMakeRect(100, 100, 200, 17)];
        [self.label setStringValue:@"Press Button!"];
        [self.window.contentView addSubview:self.label];
    }
    
    - (void)buttonPressed:(NSButton *)button {
        // Creates an instance of a speech config with specified subscription key and service region.
        // Replace with your own subscription key // and service region (e.g., "chinaeast2").
        NSString *speechHost = @"wss://YourServiceRegion.stt.speech.azure.cn/";
        NSString *speechKey = @"YourSubscriptionKey";
    
        SPXAudioConfiguration *audioConfig = [[SPXAudioConfiguration alloc] initWithMicrophone:nil];
        SPXSpeechConfiguration *speechConfig = [[SPXSpeechConfiguration alloc] initWithHost:speechHost subscription:speechKey];
        SPXSpeechRecognizer *speechRecognizer = [[SPXSpeechRecognizer alloc] initWithSpeechConfiguration:speechConfig audioConfiguration:audioConfig];
    
        NSLog(@"Say something...");
    
        // Starts speech recognition, and returns after a single utterance is recognized. The end of a
        // single utterance is determined by listening for silence at the end or until a maximum of 15
        // seconds of audio is processed.  The task returns the recognition text as result.
        // Note: Since recognizeOnce() returns only a single utterance, it is suitable only for single
        // shot recognition like command or query.
        // For long-running multi-utterance recognition, use startContinuousRecognitionAsync() instead.
        SPXSpeechRecognitionResult *speechResult = [speechRecognizer recognizeOnce];
    
        // Checks result.
        if (SPXResultReason_Canceled == speechResult.reason) {
            SPXCancellationDetails *details = [[SPXCancellationDetails alloc] initFromCanceledRecognitionResult:speechResult];
            NSLog(@"Speech recognition was canceled: %@. Did you pass the correct key/region combination?", details.errorDetails);
            [self.label setStringValue:([NSString stringWithFormat:@"Canceled: %@", details.errorDetails])];
        } else if (SPXResultReason_RecognizedSpeech == speechResult.reason) {
            NSLog(@"Speech recognition result received: %@", speechResult.text);
            [self.label setStringValue:(speechResult.text)];
        } else {
            NSLog(@"There was an error.");
            [self.label setStringValue:(@"Speech Recognition Error")];
        }
    }
    
    - (void)applicationWillTerminate:(NSNotification *)aNotification {
        // Insert code here to tear down your application
    }
    
    - (BOOL)applicationShouldTerminateAfterLastWindowClosed:(NSApplication *)theApplication {
        return YES;
    }
    
    @end
    
  3. 将字符串 YourSubscriptionKey 替换为你的订阅密钥。Replace the string YourSubscriptionKey with your subscription key.

  4. 将字符串 YourServiceRegion 替换为与订阅关联的区域Replace the string YourServiceRegion with the region associated with your subscription. 例如,将 chinaeast2 用于试用订阅。For example, use chinaeast2 for the trial subscription.

生成并运行示例Build and run the sample

  1. 使调试输出可见,方法是:选择“视图”**** > “调试区域”**** > ****“激活控制台”。Make the debug output visible by selecting View > Debug Area > Activate Console.
  2. 在菜单中选择“产品” > “运行”,,以生成并运行示例代码。**** ****Build and run the example code by selecting Product > Run from the menu. 也可选择“播放”。****You also can select Play.
  3. 选择相应按钮并讲几句话后,应会在屏幕下方看到讲出的文本。After you select the button and say a few words, you should see the text you have spoken on the lower part of the screen. 首次运行该应用时,系统应会提示是否允许该应用访问计算机的麦克风。When you run the app for the first time, you should be prompted to give the app access to your computer's microphone.

后续步骤Next steps