10

我正在尝试使用我的 AutoHotkey 应用程序播放 24 位音频文件。它只使用SoundPlay。Windows 7 没有问题,但是 Windows XP 用户无法播放 24 位文件。

文档说:

所有 Windows 操作系统都应该能够播放 .wav 文件。但是,如果操作系统上未安装正确的编解码器或功能,其他文件(.mp3、.avi 等)可能无法播放。

如何在 Windows Media Player 中播放 24 位 WAV 文件一文中提到的可能修复正在修复 Windows Media Player 的问题,但不适用于自动热键:

分步指南

  1. 下载旧版高清音频过滤器
  2. regsvr32.exe AudioTypeConvert.ax
  3. 在 windows 媒体播放器(工作)和 AHK(无声音)中播放 24 位文件。
  4. regsvr32.exe /u AudioTypeConvert.ax 卸载

预期行为:在 Windows Media Player 和 AutoHotkey 应用程序中播放音频文件时均无错误。实际行为:音频文件仅在 Windows Media Player 中无错误播放,在 Windows XP 下的 AutoHotkey 应用程序中无法播放。

进一步的调查

正如 AutoHotKey 论坛中提到的,SoundPlay 在后台使用mciSendString,可以通过直接调用它来获得有关错误性质的更多信息。

使用 mciSendString 替代 DLL 调用,我收到错误消息 320,它对应于MCIERR_WAVE_OUTPUTSINUSE

所有可以播放当前格式文件的波形设备都在使用中。等到这些设备之一空闲;然后,再试一次。

如何在我的 AutoHotkey 应用程序中在 Windows XP 中播放 24 位音频文件?

基于 SoundPlay 的测试应用程序下载

#NoEnv 
SetWorkingDir %A_ScriptDir%
FileSelectFile, f
SoundPlay, %f%
Msgbox, You should hear audio - except for 24bit wave files under Windows XP.

基于 MCI 的测试应用程序下载

#NoEnv 
SetWorkingDir %A_ScriptDir%
FileSelectFile, f
TryPlaySound(f)
Msgbox, You should hear audio - except for 24bit wave files under Windows XP.

; If SoundPlay does not work TryPlaySound
TryPlaySound( mFile ) 
{ 
    ; SKAN  www.autohotkey.com/forum/viewtopic.php?p=361791#361791
    VarSetCapacity( DN,16 ), DLLFunc := "winmm.dll\mciSendString" ( A_IsUnicode ? "W" : "A" )
    DN := DllCall(DLLFunc, Str, "play " """" mFile """" "", Uint, 0, Uint, 0, Uint, 0)
    Return DN
}
4

1 回答 1

1

如果可行的话,我会将 24 位文件转换为 16 位文件。

于 2011-05-31T22:08:04.403 回答