【问题标题】:Autohotkey soundplay does not work with every wavAutohotkey 声音播放不适用于每个 wav
【发布时间】:2016-09-22 18:23:27
【问题描述】:

我注意到 SoundPlay 不适用于我使用的每个 wav。我可以正常播放文件,但是当我使用 SoundPlay 时,其中一些文件无法播放并引发错误。我试图获取有关该错误的更多详细信息,但该异常未显示任何内容。

在示例代码中,第一个文件不播放并引发异常,但“e”为空。如果我将其注释掉其他两部戏,则没有任何问题。有什么想法吗?

try
{
    SoundPlay, c:\Alarm Files\La Cucaracha - Intro.wav, Wait ; THIS DOES NOT PLAY
    SoundPlay, c:\Alarm Files\Marimba.wav, Wait ; PLAYS WITH NO ERROR
    SoundPlay, c:\Alarm Files\Train Crossing.wav, Wait ; PLAYS WITH NO ERROR
}
catch e
{
    MsgBox, An exception was thrown!`nDetails: %e%
}
return

【问题讨论】:

  • 您可以尝试将它们重命名为“e.wav”之类的简单名称并报告回来吗?
  • 我之前试过,只是又做了一次,结果一样,抛出错误,没有显示异常。
  • 如果没有人可以分析 wav ile La Cucaracha - Intro.wav,这将很难解决,因为它仅位于您的计算机上。不是我可以:D
  • 我明白了,我只是想知道以前是否有人遇到过同样的问题。 Wave 文件不应该是特定于播放的系统。另一个我不明白的问题,为什么抛出错误时异常为空。如果不是这样,我至少可以深入挖掘。

标签: try-catch autohotkey


【解决方案1】:

根据documentation

已知限制:如果省略 WAIT 参数,操作系统可能会认为正在播放的文件“正在使用”,直到脚本关闭或播放另一个文件(甚至是不存在的文件)。

SoundPlay, FILEPATH, Wait

您可以尝试通过 DLL 调用运行音频。

FilePath := "c:\Alarm Files\La Cucaracha - Intro.wav"
DllCall("winmm.dll\PlaySound", AStr, FilePath, uint, 0, uint, 0)

【讨论】:

  • 等待是否存在似乎并不重要。该代码会为某些 WAV 文件引发异常,但不幸的是我无法获得更多详细信息。
  • 我用 DLL 调用更新了我的答案,但我很确定这会消除同样的错误。如果它确实丢弃了错误,那么您可能会在 Windows 事件日志中看到更清晰的错误消息。
  • 脱帽致敬,它与 DllCall 一起玩,感谢您的帮助。仍然不知道为什么它不适用于 SoundPlay,但这对我来说已经足够了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-25
  • 1970-01-01
  • 2023-03-22
相关资源
最近更新 更多