스트리밍 음성 인식
오디오 데이터 또는 로컬 오디오 파일을 선택한 AI 서비스 제공자에게 보내고 실시간 음성 인식 결과를 받습니다.
사전 요구 사항
AIBudsAISDK가 초기화되어 있고 등록된 서비스 제공자가 선택되어 있습니다.- 서비스 제공자가
StreamingASRServiceAPI를 지원합니다. - 입력 바이트가 설정의
audioFormat과 일치합니다. languageForSpeechInput을 지정할 때는en-US,zh-CN처럼 하이픈 형식의 언어 식별자를 사용합니다.
AI를 활용해 구현
AI로 구현
AI로 이 워크플로 구현
공식 “AIBuds 스트리밍 음성 인식 구현” 스킬을 사용해 앱에 맞게 구현하세요.
https://docs-aibuds.github.io/ko/skills/implement-aibuds-streaming-asr을 읽고 지침을 따르세요. 이 스킬로 “AIBuds 스트리밍 음성 인식 구현”을 이 iOS 프로젝트에 구현하고 검증하세요.API Reference
프레임워크
AIBudsAI.xcframework
Import
- Swift
- Objective-C
import AIBudsAI
import AIBudsAIFoundation#import <AIBudsAI/AIBudsAI-Swift.h>선언
- Swift
- Objective-C
/// Recognizes voice data.
/// - Parameters:
/// - data: The audio data to recognize.
/// - config: The recognition configuration.
/// - onTranscript: Called for each incremental transcript result.
/// - onFailed: Called when recognition fails.
/// - onFinish: Called when recognition finishes.
public static func recognizeVoice(_ data: Data,
config: StreamingASRConfig = .default,
onTranscript: ((_ transcriptData: StreamSpeechASRModel) -> Void)? = nil,
onFailed: ((_ error: NSError) -> Void)? = nil,
onFinish: (() -> Void)? = nil) -> Void
/// Recognizes a voice file.
/// - Parameters:
/// - filePath: The local path of the audio file to recognize.
/// - config: The recognition configuration.
/// - onTranscript: Called for each incremental transcript result.
/// - onFailed: Called when recognition fails.
/// - onFinish: Called when recognition finishes.
public static func recognizeVoice(withFile filePath: String,
config: StreamingASRConfig = .default,
onTranscript: ((_ transcriptData: StreamSpeechASRModel) -> Void)? = nil,
onFailed: ((_ error: NSError) -> Void)? = nil,
onFinish: (() -> Void)? = nil) -> Void/// Recognizes voice data.
/// - Parameters:
/// - data: The audio data to recognize.
/// - config: The recognition configuration.
/// - onTranscript: Called for each incremental transcript result.
/// - onFailed: Called when recognition fails.
/// - onFinish: Called when recognition finishes.
+ (void)recognizeVoiceData:(NSData * _Nonnull)data
withConfig:(AIBudsStreamingASRConfig * _Nonnull)config
onTranscript:(void (^ _Nullable)(AIBudsStreamSpeechASRModel * _Nonnull))onTranscript
onFailed:(void (^ _Nullable)(NSError * _Nonnull))onFailed
onFinish:(void (^ _Nullable)(void))onFinish;
/// Recognizes a voice file.
/// - Parameters:
/// - filePath: The local path of the audio file to recognize.
/// - config: The recognition configuration.
/// - onTranscript: Called for each incremental transcript result.
/// - onFailed: Called when recognition fails.
/// - onFinish: Called when recognition finishes.
+ (void)recognizeVoiceFile:(NSString * _Nonnull)filePath
withConfig:(AIBudsStreamingASRConfig * _Nonnull)config
onTranscript:(void (^ _Nullable)(AIBudsStreamSpeechASRModel * _Nonnull))onTranscript
onFailed:(void (^ _Nullable)(NSError * _Nonnull))onFailed
onFinish:(void (^ _Nullable)(void))onFinish;두 오버로드 모두 AIBudsAISDK에서 제공하며 선택한 서비스 제공자의 StreamingASRServiceAPI 구현으로 전달됩니다.
설정
StreamingASRConfig에서 다음 값을 설정합니다.
| 값 | 설명 |
|---|---|
languageForSpeechInput | 선택적 인식 언어입니다. 생략하면 서비스 제공자가 현재 앱 현지화 언어를 사용합니다. |
audioFormat | .pcm, .mp3, .wav와 같은 입력 형식입니다. |
enableSpeakerDiarization | 서비스 제공자가 화자 구간을 구분할지 여부입니다. 기본값은 false입니다. |
입력 형식은 AIAudioFormat을 사용합니다.
| 값 | 입력 |
|---|---|
.pcm | 선택한 제공자가 요구하는 샘플 형식의 원시 PCM 오디오입니다. |
.opus | Opus로 인코딩된 오디오입니다. |
.mp3 | MP3 오디오입니다. |
.wav | WAV 컨테이너 오디오입니다. |
.none / .unknown | 사용할 수 없는 형식입니다. 이 값으로 인식을 시작하지 마세요. |
각 StreamSpeechASRModel에는 순번, 선택적 요청 ID, 실시간 인식문, 확정 여부, 선택적 인식문 순번, 선택적 화자 구간이 포함됩니다.
사용 예제
파일 인식
- Swift
- Objective-C
let config = StreamingASRConfig(
languageForSpeechInput: "en-US",
audioFormat: .wav,
enableSpeakerDiarization: true
)
AIBudsAISDK.recognizeVoice(
withFile: fileURL.path,
config: config,
onTranscript: { result in
print("Sequence \(result.sequence): \(result.transcript ?? "")")
if result.isDefinite {
print("Definite transcript received")
}
},
onFailed: { error in
print("Recognition failed: \(error.localizedDescription)")
},
onFinish: {
print("Recognition finished")
}
)AIBudsStreamingASRConfig *config =
[[AIBudsStreamingASRConfig alloc] initWithLanguageForSpeechInput:@"en-US"
audioFormat:AIBudsAIAudioFormatWav
enableSpeakerDiarization:YES];
[AIBudsAISDK recognizeVoiceFile:fileURL.path
withConfig:config
onTranscript:^(AIBudsStreamSpeechASRModel *result) {
NSLog(@"Sequence %ld: %@", (long)result.sequence, result.transcript ?: @"");
if (result.isDefinite) {
NSLog(@"Definite transcript received");
}
}
onFailed:^(NSError *error) {
NSLog(@"Recognition failed: %@", error.localizedDescription);
}
onFinish:^{
NSLog(@"Recognition finished");
}];메모리의 오디오는 recognizeVoice(_:config:onTranscript:onFailed:onFinish:)에 Data / NSData를 전달하고 동일한 방식으로 콜백을 처리합니다.
참고
- 인식문은 실시간으로 갱신되므로 문장이 완성되는 동안 반복될 수 있습니다. UI 출력을 구성할 때
sequence,transcriptSequence,isDefinite를 사용하세요. - 현재 API는 완성된
Data값 또는 파일 경로를 받습니다. 스트리밍 시작, 추가, 중지 제어나 인식 델리게이트는 제공하지 않습니다. onFinish에는 결과값이 없습니다. 완료 후 최종 텍스트가 필요하면onTranscript에서 받은 최신 인식문을 저장하세요.- 지원 형식, 언어, 화자 분리 동작은 서비스 제공자마다 다를 수 있습니다.