Я пытаюсь воспроизвести 24-битный аудиофайл с помощью приложения AutoHotkey. Он просто использует SoundPlay . Windows 7 не имеет проблем, однако пользователи Windows XP не могут воспроизводить 24-битные файлы.
Документация гласит:
Все операционные системы Windows должны иметь возможность
играть. WAV файлы. Тем не менее, другие файлы
(.mp3, .avi и т. д.) может быть
играбелен, если правильные кодеки или
функции не установлены в ОС.
Возможные исправления, упомянутые в статье Как воспроизводить 24-битные файлы WAV в проигрывателе Windows Media исправляет проблему для проигрывателя Windows Media, но не для autohotkey:
Пошаговое руководство
- Скачать Legacy HD Audio Filter
- regsvr32.exe AudioTypeConvert.ax
- Воспроизведение 24-битного файла в Windows Media Player (работает) и AHK (без звука).
- regsvr32.exe / u AudioTypeConvert.ax для удаления
Ожидаемое поведение: аудиофайл воспроизводится без ошибок как в проигрывателе Windows Media, так и в приложениях AutoHotkey.
Фактическое поведение: аудиофайл воспроизводится без ошибок только в проигрывателе Windows Media и не воспроизводится в приложениях AutoHotkey под Windows XP.
Дальнейшее расследование
Как уже упоминалось на форумах AutoHotKey, SoundPlay использует mciSendString под капотом, и дополнительную информацию о природе ошибки можно получить, вызвав ее напрямую.
Используя альтернативный вызов DLL mciSendString, я получаю сообщение об ошибке 320 , которое соответствует MCIERR_WAVE_OUTPUTSINUSE
Используются все волновые устройства, которые могут воспроизводить файлы в текущем формате. Подождите, пока одно из этих устройств не освободится; затем попробуйте еще раз.
Как воспроизвести 24-битные аудиофайлы в Windows XP в приложении AutoHotkey?
Тестовое приложение на основе 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
}