我试着用我的AutoHotkey应用程序播放一个24位的音频文件。它只使用SoundPlay。Windows 7没有问题,但是Windows用户不能播放24位文件。
文档说:
所有的Windows OSes都应该能够播放.wav文件。但是,其他文件(.mp3、.avi等)如果操作系统上没有安装正确的编解码器或功能,则可能无法播放。
在文章如何在中播放24位WAV文件中提到的可能的修复方法是修复Windows的问题,但是对于自动热键没有修复:
一步一步指南
预期行为:在和AutoHotkey应用程序中都没有错误的音频文件回放。实际行为:音频文件回放,仅在中没有错误,在Windows下的AutoHotkey应用程序中不播放。
进一步调查
正如在AutoHotKey论坛中所提到的,SoundPlay正在使用遮罩下的mciSendString,通过直接调用它可以获得关于错误本质的更多信息。
使用mciSendString替代DLL调用,我得到错误信息320,它对应于乌图西努斯
所有可以以当前格式播放文件的波形设备都在使用中。等待这些设备中的一个空闲,然后再试一次。
如何在我的AutoHotkey应用程序中播放Windows中的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
}发布于 2011-05-31 22:08:04
如果这是可行的话,我会把24位文件转换成16位文件。
https://stackoverflow.com/questions/6032795
复制相似问题