Malcev, должен играть параллельно.
Можно загружать и так:
File := FileOpen("D:\Programs\Maple 18\data\signalprocessing\maplesim.wav", "r")
File.RawRead(LaserWAV_Bin, 100500)
Из той же темы интересный способ обойти ограничение SoundPlay в один исполняющийся трек, путем запуска в новом потоке:
ArrWAV:={WAV01: "D:\dtmf.wav", WAV02: "C:\explode.wav", WAV03: "C:\applause.wav", WAV04: "C:\chimes.wav"}
Gui Add, Button, gPlay, WAV01
Gui Add, Button, gPlay, WAV02
Gui Add, Button, gPlay, WAV03
Gui Add, Button, gPlay, WAV04
Gui Show, w300 h300
Return
Play:
SoundPlay(ArrWAV[A_GuiControl], "Multi")
Return
SoundPlay(Filename, wait="") {
static pSoundPlay=0, File=0
if !(pSoundPlay)
pSoundPlay := RegisterCallback("SoundPlay")
if !(Filename=0xFFFF)
File := Filename
if (wait="Multi") or (wait>=2)
DllCall("CreateThread", UInt,0, UInt,0, UInt,pSoundPlay, UInt,0xFFFF, UInt,0, UInt,0)
else
SoundPlay % File, % wait
Return
}
GuiClose:
ExitApp
Однако, если много раз подряд часто нажимать, скрипт замирает на команде SoundPlay, и больше не играет.
Интересно попробовать вызывать сразу с параметром, но я не понимаю, как правильно передать в ф-ию, которую вызывает CreateThread указатель на переменную:
FileRead WAV01, *c D:\dtmf.wav
FileRead WAV02, *c C:\explode.wav
FileRead WAV03, *c C:\applause.wav
FileRead WAV04, *c C:\chimes.wav
ArrWAV:={WAV01: WAV01, WAV02: WAV02, WAV03: WAV03, WAV04: WAV04}
Gui Add, Button, gPlay, WAV01
Gui Add, Button, gPlay, WAV02
Gui Add, Button, gPlay, WAV03
Gui Add, Button, gPlay, WAV04
Gui Show, w300 h300
Return
Play:
SoundPlay(ArrWAV[A_GuiControl], false)
Return
SoundPlay(Bin, Callback:=true) {
static pSoundPlay:=0
if !pSoundPlay
pSoundPlay := RegisterCallback("SoundPlay")
if Callback
PlaySound(Bin)
else
DllCall("CreateThread", UInt,0, UInt,0, UInt,pSoundPlay, Ptr,&Bin, UInt,0, UInt,0)
Return
}
PlaySound(ByRef Sound) {
Return DllCall("winmm.dll\PlaySound" (A_IsUnicode ? "W" : "A"), UInt, &Sound, UInt, 0, UInt, 0x7)
}
GuiClose:
ExitApp
Кстати,
teadrinker пишет:Как раз в этом и смысл, иначе будут задержки.
В mciSendString open и play — отдельные методы, можно заранее открыть файл, а уже по требованию сразу играть.