You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用CommunityToolkit SpeechToText致iPad蓝牙音频失效问题排查

问题:CommunityToolkit SpeechToText直接调用导致iPad蓝牙音频失效

背景

我正在使用CommunityToolkit SpeechToText开发适配iPad 10的蓝牙耳机交互应用。此前通过接口调用SpeechToText存在识别文本偶尔重复的问题,改为直接调用SpeechToText.Default.ListenAsync后,出现了蓝牙耳机失效的异常情况。

原音频会话配置(AppDelegate)

最初在AppDelegate中配置的音频会话可正常启用蓝牙,代码如下:

public override bool FinishedLaunching(UIApplication application, NSDictionary launchOptions)
{
    SetAudioSession();
    return base.FinishedLaunching(application, launchOptions);
}

public bool SetAudioSession()
{
    var audioSession = AVAudioSession.SharedInstance();
    var err = audioSession.SetCategory(AVAudioSessionCategory.PlayAndRecord, 
        AVAudioSessionCategoryOptions.AllowBluetooth |
        AVAudioSessionCategoryOptions.AllowAirPlay | 
        AVAudioSessionCategoryOptions.DefaultToSpeaker);

    if (err != null)
        return false;

    err = audioSession.SetActive(true);

    if (err != null)
        return false;

    return true;
}

接口调用方式(原正常工作,存在文本重复)

之前通过自定义接口封装SpeechToText调用,配合上述音频配置可正常使用蓝牙,但偶尔会出现识别文本重复的问题:

public interface ISpeechToText
{
    Task<bool> RequestPermissions();

    Task<string> Listen(CultureInfo culture,
        IProgress<string> recognitionResult,
        CancellationToken cancellationToken);
}

public async Task GetPhraseAsync(CancellationToken cancellationToken)
{  
    var recognitionResult = await speechToText.Listen(CultureInfo.GetCultureInfo("en-us"),
        new Progress<string>(partialText =>
        {
            Debug.WriteLine("--- " + partialText + "---");
            if (previousText != partialText)
            {
                RecognitionText = partialText + " ";
                previousText = partialText;
            }
        }), cancellationToken);
    // ... 其他业务逻辑
}

直接调用方式(蓝牙失效)

改为直接调用SpeechToText.Default.ListenAsync后,iPad状态栏的耳机图标消失,蓝牙耳机完全无法工作;退出应用后,耳机图标会重新显示。如果禁用SpeechToText的实例化操作,音频输出及TextToSpeech功能均可正常通过蓝牙耳机工作,代码如下:

public async Task GetPhraseAsync(CancellationToken cancellationToken)
{
    var recognitionResult = await SpeechToText.Default.ListenAsync(CultureInfo.GetCultureInfo("en-us"),
        new Progress<string>(partialText =>
        {
            Debug.WriteLine("--- " + partialText + "---");
            if (previousText != partialText)
            {
                RecognitionText = partialText + " ";
                previousText = partialText;
            }
        }), cancellationToken);
    // ... 其他业务逻辑
}

疑问

请问该蓝牙失效问题是由自身代码配置错误导致,还是属于CommunityToolkit SpeechToText库的问题?

内容的提问来源于stack exchange,提问作者Gratzy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 22:43:16