2011-05-17 109 views
10

我試圖用我的AutoHotkey應用程序播放24位音頻文件。它只是使用SoundPlay。 Windows 7沒有問題,但Windows XP用戶無法播放24位文件。播放24bit音頻不可能

documentation說:

所有Windows操作系統中應該能夠 播放.wav文件。但是,如果在OS上未安裝正確的編解碼器或功能,則其他文件 (.mp3,.avi等)可能不是 。然而卻沒有

文章 How to play 24bit WAV files in Windows Media Player中提到

可以修復被固定爲Windows Media Player的問題,AutoHotkey的:

步一步的指導

  1. 下載Legacy HD Audio Filter
  2. regsvr32.exe AudioTypeConvert.ax
  3. 在windows media playe中播放24位文件r(作品)和AHK(沒有聲音)。
  4. 的regsvr32.exe/U AudioTypeConvert.ax卸載

預期的行爲:沒有在這兩個Windows Media Player和AutoHotkey的應用程序錯誤的音頻文件playsback。 實際行爲:只在Windows Media Player中播放音頻文件沒有錯誤,並且在Windows XP下的AutoHotkey Apps中不播放。

此外調查

如SoundPlay使用罩和對誤差的性質的更多信息下mciSendString的AutoHotkey的論壇中提到可以通過直接調用它來獲得。

使用mciSendString替代DLL調用我得到error message 320相當於MCIERR_WAVE_OUTPUTSINUSE

,可以在播放當前格式文件的所有波形設備都在使用。等到這些設備中的一個空閒時;然後,再試一次。

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

基於SoundPlay測試應用download

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

基於MCI的測試應用程序download

#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 
} 
+0

改進問題本身的想法在評論中被愉快地接受。 – svandragt 2011-05-30 11:21:37

+0

如何改進如此完美的東西。問題中提供的詳細信息爲+1。 – 2011-05-31 01:57:00

回答

1

我會的24位文件轉換爲16-bit文件,如果這是可行的。

+0

在這種情況下,我無法控制這些文件。我想唯一的解決方案是調用像Bass這樣的第三方DLL來進行播放。 – svandragt 2011-06-01 08:39:51

+0

如果是我,我會檢查文件標題的24位,並做一個臨時的16位副本,並播放之前我拉另一個DLL,但我是老學校。 – 2011-06-01 18:09:51