Перейти к основному содержимому

Синхронный перевод

Запускайте длительную сессию устного перевода и получайте исходный и переведённый текст по мере обработки, необязательное TTS-аудио, события и итоговый отчёт.

Жизненный цикл SimultaneousInterpretationEventType, используемый onEvent, описан в разделе «События AI-сессий».

Animated workflow

Жизненный цикл сессии перевода

Согласуйте запуск поставщика, активный источник аудио, упорядоченные потоковые результаты, обработку прерываний и окончательную остановку.

Приложение

Настроить языки

Задать совместимые исходный и целевой языки, параметры TTS и воспроизведения.

AI-сервис

Запустить сессию

Запустить сервис синхронного перевода выбранного поставщика.

Приложение

Сохранить сессию

Сохранить возвращённую сессию и проверить, записывает ли AIBuds AI SDK аудио самостоятельно.

Приложение + устройство

Передать аудио

Если внутренняя запись SDK отключена, передавать в сессию внешний PCM; одним из источников может быть устройство.

AI-сервис → приложение

Получать результаты

Упорядочивать подтверждённые исходные и целевые сегменты и обрабатывать необязательное TTS-аудио.

потоковые результаты
Приложение

Обработать события

Обрабатывать события, восстанавливаемые исключения и остановки из-за прерываний.

Устройство

Остановить внешнее аудио

Если запись устройства активна, остановить её до остановки перевода.

AI-сервис

Остановить перевод

Запросить остановку текущей сессии синхронного перевода.

Завершающий callback

Завершить сессию

Обработать необязательный отчёт и удалить сохранённую активную сессию.

Восстанавливаемый callback onException не означает автоматическую остановку сессии.

Предварительные условия

  • AIBudsAISDK инициализирован, зарегистрированный поставщик выбран и авторизован.
  • Поставщик поддерживает SimultaneousInterpretationServiceAPI.
  • Идентификаторы исходного и целевого языков записаны через дефис и различаются.
  • Если внутренняя запись AIBuds AI SDK отключена, приложение передаёт внешний PCM. Если источником служит подключённое устройство, оно соответствует DeviceAudioRecordingAPI.

Реализация с помощью AI

Разработка с AI

Реализуйте этот сценарий с AI

Используйте официальный навык «Реализация синхронного перевода AIBuds» и адаптируйте сценарий к приложению.

Прочитайте и выполните инструкции https://docs-aibuds.github.io/ru/skills/implement-aibuds-simultaneous-interpretation. Используйте этот навык, чтобы реализовать «Реализация синхронного перевода AIBuds» в данном iOS-проекте и проверить результат.
Открыть официальный навык

API Reference

Framework

AIBudsAI.xcframework

Import

Swift
import AIBuds
import AIBudsAI
import AIBudsAIFoundation

Declaration

Swift
/// Starts a simultaneous interpretation session.
/// - Parameters:
///   - config: The session configuration.
///   - onStartSuccess: Called with the started session.
///   - onStartFailure: Called when the session cannot start.
///   - onStopByInterruption: Called when an interruption stops the session.
///   - onException: Called for a recoverable session exception. The app decides
///     whether the session should stop.
///   - streamResultHandler: Called with incremental interpretation results.
///   - onEvent: Called for session-level events.
///   - onFinish: Called with the optional final report.
public static func startSimultaneousInterpretation(_ config: SimultaneousInterpretationConfig = .default,
                                             onStartSuccess: ((_ session: SimultaneousInterpretationSessionConvertible) -> Void)? = nil,
                                             onStartFailure: ((_ error: NSError) -> Void)? = nil,
                                       onStopByInterruption: ((_ error: NSError?) -> Void)? = nil,
                                                onException: ((_ error: NSError) -> Void)? = nil,
                                        streamResultHandler: ((
                                            _ isFinal: Bool,
                                            _ response: SimultaneousInterpretationDataModel?,
                                            _ error: Error?
                                        ) -> Void)? = nil,
                                                    onEvent: ((_ event: SimultaneousInterpretationEventModel) -> Void)? = nil,
                                                   onFinish: ((_ report: SimultaneousInterpretationReportModel?) -> Void)? = nil)

/// Stops the current simultaneous interpretation session.
public static func stopSimultaneousInterpretation()

См. startSimultaneousInterpretation и stopSimultaneousInterpretation.

Конфигурация

SimultaneousInterpretationConfig предоставляет:

СвойствоПо умолчаниюОписание
sourceLanguageЯзык приложенияНеобязательный исходный язык; пустая строка включает автоопределение.
targetLanguageen-USОбязательный целевой язык.
enableTTStrueНужно ли синтезировать переведённую речь.
enableVoicePlaybacktrueВключено ли воспроизведение синтезированной речи.
usesInternalAudioRecordingtrueЗаписывает ли AIBuds AI SDK аудио для этой сессии.
preferSpeakerOutputfalseПредпочитать ли вывод через динамик.

Когда usesInternalAudioRecording равно false, AIBuds AI SDK не записывает аудио сессии. Приложение должно сохранить возвращённую сессию и передавать внешний PCM через appendInt16PCM(_:isFinal:) или appendAudioPCMBuffer(_:isFinal:).

Примеры использования

Swift
let config = SimultaneousInterpretationConfig.default
config.sourceLanguage = "zh-CN"
config.targetLanguage = "en-US"
config.usesInternalAudioRecording = true
config.preferSpeakerOutput = false

AIBudsAISDK.startSimultaneousInterpretation(
    config,
    onStartSuccess: { session in
        currentSession = session
    },
    onStartFailure: { error in
        print("Unable to start: \(error.localizedDescription)")
    },
    onStopByInterruption: { error in
        print(error?.localizedDescription ?? "Session interrupted")
        currentSession = nil
    },
    onException: { error in
        print("Session exception: \(error.localizedDescription)")
    },
    streamResultHandler: { isFinal, response, error in
        if let error {
            print(error.localizedDescription)
            return
        }
        guard let response else { return }

        if response.isSourceTextDefinite {
            print("Source: \(response.sourceText ?? "")")
        }
        if response.isTargetTextDefinite {
            print("Target: \(response.targetText ?? "")")
        }
        if isFinal { print("Final result") }
    },
    onEvent: { event in
        print(event)
    },
    onFinish: { report in
        currentSession = nil
        print(report ?? "No report")
    }
)

Когда session.isRecordingInternally равно false, внешним аудиоканалом управляет приложение. После onStartSuccess Demo запускает AI-запись на устройстве, передаёт каждый декодированный пакет PCM в session.appendInt16PCM(_:isFinal:), сначала останавливает запись устройства, а затем вызывает AIBudsAISDK.stopSimultaneousInterpretation().

Примечания

  • Сохраняйте возвращённый при запуске SimultaneousInterpretationSessionConvertible, чтобы отслеживать активную сессию и режим записи.
  • onException не обязательно останавливает сессию. Решите, продолжать работу или вызвать stopSimultaneousInterpretation().
  • Упорядочивайте подтверждённые сегменты по sourceTextSequence и targetTextSequence, а не добавляйте безусловно каждый потоковый callback.
  • TTS-аудио в SimultaneousInterpretationDataModel может быть представлено относительным путём, полным путём или PCM-данными Base64.