使用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
相关产品推荐
相关产品推荐

