Snabb start: identifiera tal i mål-C på iOS med hjälp av tal-SDKQuickstart: Recognize speech in Objective-C on iOS by using the Speech SDK

Snabb Starter är också tillgängliga för tal syntes.Quickstarts are also available for speech synthesis.

I den här artikeln får du lära dig hur du skapar en iOS-app i mål-C genom att använda Azure Cognitive Services Speech SDK för att skriva tal till text från en mikrofon eller från en fil med inspelat ljud.In this article, you learn how to create an iOS app in Objective-C by using the Azure Cognitive Services Speech SDK to transcribe speech to text from a microphone or from a file with recorded audio.

KravPrerequisites

Innan du börjar måste du ha:Before you get started, you'll need:

Skaffa Speech SDK för iOSGet the Speech SDK for iOS

Viktigt

När du väljer att ladda ned någon av Speech SDK för Cognitive Services-komponenterna på den här sidan accepterar du även dess licens.By downloading any of the Speech SDK for Azure Cognitive Services components on this page, you acknowledge its license. Se licensvillkoren för Microsoft-programvara för Speech SDK.See the Microsoft Software License Terms for the Speech SDK.

Cognitive Services Speech SDK för iOS är för närvarande distribuerad som ett kakao-ramverk.The Cognitive Services Speech SDK for iOS is currently distributed as a Cocoa framework. Den kan hämtas från den här webbplatsen.It can be downloaded from this website. Ladda ned filen till arbetskatalogen.Download the file to your home directory.

Skapa ett Xcode-projektCreate an Xcode project

Starta Xcode och starta ett nytt projekt genom att välja fil > nytt > -projekt.Start Xcode, and start a new project by selecting File > New > Project. I dialog rutan Mallval väljer du app-mallen för iOS-enkel vy .In the template selection dialog box, select the iOS Single View App template.

Gör följande val i dialog rutorna som följer.In the dialog boxes that follow, make the following selections.

  1. I dialog rutan projekt alternativ :In the Project Options dialog box:

    1. Ange ett namn för snabb starts appen, till exempel HelloWorld.Enter a name for the quickstart app, for example, helloworld.
    2. Ange ett lämpligt organisations namn och organisations-ID om du redan har ett Apple Developer-konto.Enter an appropriate organization name and organization identifier if you already have an Apple developer account. I test syfte kan du använda ett namn som testorg.For testing purposes, use a name like testorg. För att signera appen behöver du en korrekt etableringsprofil.To sign the app, you need a proper provisioning profile. Mer information finns på webbplatsen för Apple Developer.For more information, see the Apple developer site.
    3. Kontrol lera att mål-C har valts som språk för projektet.Make sure Objective-C is selected as the language for the project.
    4. Avmarkera alla kryss rutor för test-och kärn data.Clear all the check boxes for tests and core data.

    Projekt inställningar

  2. Välj en projekt katalog:Select a project directory:

    1. Välj arbetskatalogen och spara projektet där.Choose your home directory to put the project in. Det här steget skapar en HelloWorld-katalog i din arbets katalog som innehåller alla filer för Xcode-projektet.This step creates a helloworld directory in your home directory that contains all the files for the Xcode project.

    2. Inaktivera skapandet av en Git-lagringsplats för det här exempelprojektet.Disable the creation of a Git repo for this example project.

    3. Justera Sök vägarna till SDK: n på skärmen projekt inställningar.Adjust the paths to the SDK on the project settings screen.

      1. På fliken Allmänt under rubriken inbäddade binärfiler lägger du till SDK-biblioteket som ett ramverk genom att välja lägg till inbäddade binärfiler > Lägg till annan.On the General tab under the Embedded Binaries header, add the SDK library as a framework by selecting Add embedded binaries > Add other. Gå till din Hem Katalog och välj filen MicrosoftCognitiveServicesSpeech.framework.Go to your home directory and select the file MicrosoftCognitiveServicesSpeech.framework. Den här åtgärden lägger till SDK-biblioteket i sidhuvudet och biblioteken som länkas automatiskt.This action adds the SDK library to the header Linked Framework and Libraries automatically. ![Added Framework @ no__t-1Added framework
      2. Gå till fliken versions inställningar och välj inställningen alla .Go to the Build Settings tab, and select the All setting.
      3. Lägg till katalogen $ (SRCROOT)/..Add the directory $(SRCROOT)/.. till ramverk Sök vägar under rubriken Sök sökvägar .to Framework Search Paths under the Search Paths heading.

      Inställning av Ramverks Sök vägar

Konfigurera användargränssnittetSet up the UI

Exempel appen har ett väldigt enkelt användar gränssnitt.The example app has a very simple UI. Det finns två knappar för att starta tal igenkänning från en fil eller från mikrofon indata och en text etikett för att visa resultatet.It has two buttons to start speech recognition either from file or from microphone input and a text label to display the result. Användargränssnittet konfigureras i Main.storyboard-delen av projektet.The UI is set up in the Main.storyboard part of the project. Öppna XML-vyn för storyboard genom att högerklicka på posten Main.storyboard i projekt trädet och välja öppna som > -källkod.Open the XML view of the storyboard by right-clicking the Main.storyboard entry of the project tree and selecting Open As > Source Code.

Ersätt den automatiskt genererade XML:en med följande kod:Replace the autogenerated XML with this code:

<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="14113" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="BYZ-38-t0r">
    <device id="retina4_7" orientation="portrait">
        <adaptation id="fullscreen"/>
    </device>
    <dependencies>
        <deployment identifier="iOS"/>
        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="14088"/>
        <capability name="Safe area layout guides" minToolsVersion="9.0"/>
        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
    </dependencies>
    <scenes>
        <!--View Controller-->
        <scene sceneID="tne-QT-ifu">
            <objects>
                <viewController id="BYZ-38-t0r" customClass="ViewController" sceneMemberID="viewController">
                    <view key="view" contentMode="scaleToFill" id="8bC-Xf-vdC">
                        <rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
                        <subviews>
                            <button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="qFP-u7-47Q">
                                <rect key="frame" x="84" y="247" width="207" height="82"/>
                                <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
                                <accessibility key="accessibilityConfiguration" hint="Start speech recognition from file" identifier="recognize_file_button">
                                    <accessibilityTraits key="traits" button="YES" staticText="YES"/>
                                    <bool key="isElement" value="YES"/>
                                </accessibility>
                                <fontDescription key="fontDescription" type="system" pointSize="30"/>
                                <state key="normal" title="Recognize (File)"/>
                                <connections>
                                    <action selector="recognizeFromFileButtonTapped:" destination="BYZ-38-t0r" eventType="touchUpInside" id="Vfr-ah-nbC"/>
                                </connections>
                            </button>
                            <label opaque="NO" userInteractionEnabled="NO" contentMode="center" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" text="Recognition result" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="5" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="tq3-GD-ljB">
                                <rect key="frame" x="20" y="408" width="335" height="148"/>
                                <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
                                <accessibility key="accessibilityConfiguration" hint="The result of speech recognition" identifier="result_label">
                                    <accessibilityTraits key="traits" notEnabled="YES"/>
                                    <bool key="isElement" value="NO"/>
                                </accessibility>
                                <fontDescription key="fontDescription" type="system" pointSize="30"/>
                                <color key="textColor" red="0.5" green="0.5" blue="0.5" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                                <nil key="highlightedColor"/>
                            </label>
                            <button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="91d-Ki-IyR">
                                <rect key="frame" x="16" y="209" width="339" height="30"/>
                                <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
                                <accessibility key="accessibilityConfiguration" hint="Start speech recognition from microphone" identifier="recognize_microphone_button"/>
                                <fontDescription key="fontDescription" type="system" pointSize="30"/>
                                <state key="normal" title="Recognize (Microphone)"/>
                                <connections>
                                    <action selector="recognizeFromMicButtonTapped:" destination="BYZ-38-t0r" eventType="touchUpInside" id="2n3-kA-ySa"/>
                                </connections>
                            </button>
                        </subviews>
                        <color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                        <viewLayoutGuide key="safeArea" id="6Tk-OE-BBY"/>
                    </view>
                    <connections>
                        <outlet property="recognitionResultLabel" destination="tq3-GD-ljB" id="kP4-o4-s0Q"/>
                    </connections>
                </viewController>
                <placeholder placeholderIdentifier="IBFirstResponder" id="dkx-z0-nzr" sceneMemberID="firstResponder"/>
            </objects>
            <point key="canvasLocation" x="135.19999999999999" y="132.68365817091455"/>
        </scene>
    </scenes>
</document>

Lägga till exempelkodenAdd the sample code

  1. Hämta exempel filen WAV genom att högerklicka på länken och välja Spara mål som.Download the sample wav file by right-clicking the link and selecting Save target as. Lägg till wav-filen i projektet som en resurs genom att dra det från ett Finder-fönster till projektvyns rotnivå.Add the wav file to the project as a resource by dragging it from a Finder window into the root level of the Project view. Välj Slutför i följande dialog ruta utan att ändra inställningarna.Select Finish in the following dialog box without changing the settings.

  2. Ersätt innehållet i den automatiskt genererade ViewController.m-filen med följande kod:Replace the contents of the autogenerated ViewController.m file with the following code:

    #import "ViewController.h"
    #import <MicrosoftCognitiveServicesSpeech/SPXSpeechApi.h>
    
    @interface ViewController () {
        NSString *speechKey;
        NSString *serviceRegion;
    }
    
    @property (weak, nonatomic) IBOutlet UIButton *recognizeFromFileButton;
    @property (weak, nonatomic) IBOutlet UIButton *recognizeFromMicButton;
    @property (weak, nonatomic) IBOutlet UILabel *recognitionResultLabel;
    - (IBAction)recognizeFromFileButtonTapped:(UIButton *)sender;
    - (IBAction)recognizeFromMicButtonTapped:(UIButton *)sender;
    @end
    
    @implementation ViewController
    
    - (void)viewDidLoad {
        speechKey = @"YourSubscriptionKey";
        serviceRegion = @"YourServiceRegion";
    }
    
    - (IBAction)recognizeFromFileButtonTapped:(UIButton *)sender {
        dispatch_async(dispatch_get_global_queue(QOS_CLASS_DEFAULT, 0), ^{
            [self recognizeFromFile];
        });
    }
    
    - (IBAction)recognizeFromMicButtonTapped:(UIButton *)sender {
        dispatch_async(dispatch_get_global_queue(QOS_CLASS_DEFAULT, 0), ^{
            [self recognizeFromMicrophone];
        });
    }
    
    - (void)recognizeFromFile {
        NSBundle *mainBundle = [NSBundle mainBundle];
        NSString *weatherFile = [mainBundle pathForResource: @"whatstheweatherlike" ofType:@"wav"];
        NSLog(@"weatherFile path: %@", weatherFile);
        if (!weatherFile) {
            NSLog(@"Cannot find audio file!");
            [self updateRecognitionErrorText:(@"Cannot find audio file")];
            return;
        }
    
        SPXAudioConfiguration* weatherAudioSource = [[SPXAudioConfiguration alloc] initWithWavFileInput:weatherFile];
        if (!weatherAudioSource) {
            NSLog(@"Loading audio file failed!");
            [self updateRecognitionErrorText:(@"Audio Error")];
            return;
        }
    
        SPXSpeechConfiguration *speechConfig = [[SPXSpeechConfiguration alloc] initWithSubscription:speechKey region:serviceRegion];
        if (!speechConfig) {
            NSLog(@"Could not load speech config");
            [self updateRecognitionErrorText:(@"Speech Config Error")];
            return;
        }
    
        [self updateRecognitionStatusText:(@"Recognizing...")];
    
        SPXSpeechRecognizer* speechRecognizer = [[SPXSpeechRecognizer alloc] initWithSpeechConfiguration:speechConfig audioConfiguration:weatherAudioSource];
        if (!speechRecognizer) {
            NSLog(@"Could not create speech recognizer");
            [self updateRecognitionResultText:(@"Speech Recognition Error")];
            return;
        }
    
        SPXSpeechRecognitionResult *speechResult = [speechRecognizer recognizeOnce];
        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 updateRecognitionErrorText:([NSString stringWithFormat:@"Canceled: %@", details.errorDetails ])];
        } else if (SPXResultReason_RecognizedSpeech == speechResult.reason) {
            NSLog(@"Speech recognition result received: %@", speechResult.text);
            [self updateRecognitionResultText:(speechResult.text)];
        } else {
            NSLog(@"There was an error.");
            [self updateRecognitionErrorText:(@"Speech Recognition Error")];
        }
    }
    
    - (void)recognizeFromMicrophone {
        SPXSpeechConfiguration *speechConfig = [[SPXSpeechConfiguration alloc] initWithSubscription:speechKey region:serviceRegion];
        if (!speechConfig) {
            NSLog(@"Could not load speech config");
            [self updateRecognitionErrorText:(@"Speech Config Error")];
            return;
        }
        
        [self updateRecognitionStatusText:(@"Recognizing...")];
        
        SPXSpeechRecognizer* speechRecognizer = [[SPXSpeechRecognizer alloc] init:speechConfig];
        if (!speechRecognizer) {
            NSLog(@"Could not create speech recognizer");
            [self updateRecognitionResultText:(@"Speech Recognition Error")];
            return;
        }
        
        SPXSpeechRecognitionResult *speechResult = [speechRecognizer recognizeOnce];
        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 updateRecognitionErrorText:([NSString stringWithFormat:@"Canceled: %@", details.errorDetails ])];
        } else if (SPXResultReason_RecognizedSpeech == speechResult.reason) {
            NSLog(@"Speech recognition result received: %@", speechResult.text);
            [self updateRecognitionResultText:(speechResult.text)];
        } else {
            NSLog(@"There was an error.");
            [self updateRecognitionErrorText:(@"Speech Recognition Error")];
        }
    }
    
    - (void)updateRecognitionResultText:(NSString *) resultText {
        dispatch_async(dispatch_get_main_queue(), ^{
            self.recognitionResultLabel.textColor = UIColor.blackColor;
            self.recognitionResultLabel.text = resultText;
        });
    }
    
    - (void)updateRecognitionErrorText:(NSString *) errorText {
        dispatch_async(dispatch_get_main_queue(), ^{
            self.recognitionResultLabel.textColor = UIColor.redColor;
            self.recognitionResultLabel.text = errorText;
        });
    }
    
    - (void)updateRecognitionStatusText:(NSString *) statusText {
        dispatch_async(dispatch_get_main_queue(), ^{
            self.recognitionResultLabel.textColor = UIColor.grayColor;
            self.recognitionResultLabel.text = statusText;
        });
    }
    
    @end
    
  3. Ersätt strängen YourSubscriptionKey med din prenumerationsnyckel.Replace the string YourSubscriptionKey with your subscription key.

  4. Ersätt strängen YourServiceRegion med den region som är associerad med din prenumeration.Replace the string YourServiceRegion with the region associated with your subscription. Använd till exempel westus för den kostnads fria prov prenumerationen.For example, use westus for the free trial subscription.

  5. Lägg till begäran om åtkomst till mikrofonen.Add the request for microphone access. Högerklicka på posten Info.plist i projekt trädet och välj öppna som > käll kod.Right-click the Info.plist entry of the project tree, and select Open As > Source Code. Lägg till följande rader i avsnittet <dict> och spara sedan filen.Add the following lines into the <dict> section, and then save the file.

    <key>NSMicrophoneUsageDescription</key>
    <string>Need microphone access for speech recognition from microphone.</string>
    

Skapa och köra exempelappenBuild and run the sample

  1. Gör fel söknings resultatet synligt genom att välja visa > fel söknings sektion > Aktivera konsol.Make the debug output visible by selecting View > Debug Area > Activate Console.

  2. Välj antingen iOS-simulatorn eller en iOS-enhet som är ansluten till utvecklings datorn som mål för appen från listan påmål menyn för produkt > .Choose either the iOS simulator or an iOS device connected to your development machine as the destination for the app from the list in the Product > Destination menu.

  3. Skapa och kör exempel koden i iOS-simulatorn genom att välja produkt > Kör på menyn.Build and run the example code in the iOS simulator by selecting Product > Run from the menu. Du kan också välja knappen spela upp .You also can select the Play button.

  4. När du har valt knappen identifiera (fil) i appen bör du se innehållet i ljud filen "Vad är väder som?"After you select the Recognize (File) button in the app, you should see the contents of the audio file "What's the weather like?" på den nedre delen av skärmen.on the lower part of the screen.

    Simulerad iOS-app

  5. När du har valt knappen identifiera (mikrofon) i appen och sagt några ord bör du se texten du har talat om i den nedre delen av skärmen.After you select the Recognize (Microphone) button in the app and say a few words, you should see the text you have spoken on the lower part of the screen.

Nästa stegNext steps