gpt4 book ai didi

c# - 确定声音何时在 C# 中播放完毕

转载 作者:行者123 更新时间:2023-11-30 21:25:54 25 4
gpt4 key购买 nike

情况是这样的:
用户查找内容。

  • 播放提示音是因为他查找的项目上有提示
  • 用户关闭通知——应用继续获取信息
  • 用户会收到一个“叮”,告诉他们信息已完成检索
  • 应用程序开始向 TextToSpeech 发送某些属性
  • 应用程序第二次遇到通知,内部通知数据并发送另一个警报(文本到语音暂停,然后在警报完成后恢复)
  • 文本到语音完成,播放另一个“叮”让用户知道已阅读所有内容

我们目前使用队列以有序的方式处理声音,以防止声音重叠。我们目前只在调用 SoundAdded 事件时播放队列中的声音。这是我们在向队列添加声音时引发的自定义事件。目前,每次调用事件只会播放一种声音。我们遇到了一个问题,即在播放某些声音后,它们将“锁定”队列,阻止处理更多声音。我们通过始终“解锁”队列来解决这个问题,即使没有播放声音。然而,这仍然给我们留下了一个问题,即队列中有要播放的声音。

我能想到的解决这个问题的唯一方法是添加一个循环,以便在仍有声音等待播放时继续尝试播放声音。目前,主线程正在处理声音,我可能需要将声音处理移动到一个单独的线程,但我不确定处理声音的最佳方法是什么。

所以...我的问题...是否有一个好的声音库可供我们使用,其中包含一个声音结束事件。或者……创造这样一个东西的最好方法是什么?

最佳答案

我不知道是否已经有一个 .NET 库可以让你这样做,但我认为你可以很容易地 P/Invoke PlaySound从 Windows API 并使用它来播放您的声音。只要您不指定 SND_ASYNcflags,它就会阻塞,直到声音播放完毕,此时您可以播放下一个声音。正如您所提到的,您肯定希望在不同的线程中执行此操作。

关于c# - 确定声音何时在 C# 中播放完毕,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/422543/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com