1

Тема: AHK: Воспроизведение звука из исполняемого файла

Здравствуйте. Интересует такой вопрос:
Можно ли как-нибудь засунуть .wav звук в скомпилированный скрипт, чтобы воспроизводить его оттуда?
Просто необходимо, чтобы файл не лежал напрямую в системе.

2

Re: AHK: Воспроизведение звука из исполняемого файла

Можно сначала извлечь файл .wav в папку %Temp%, а затем воспроизвести его.

3

Re: AHK: Воспроизведение звука из исполняемого файла

Откуда извлечь и как в "это" засунуть файл?

4

Re: AHK: Воспроизведение звука из исполняемого файла

Подробности - в описании команды FileInstall.

5

Re: AHK: Воспроизведение звука из исполняемого файла

Fileinstall, путь к файлу\file.wav, %a_temp%\file.wav
Soundpaly, %a_temp%\file.wav

6

Re: AHK: Воспроизведение звука из исполняемого файла

BashkaMen пишет:

Fileinstall, путь к файлу\file.wav, %a_temp%\file.wav
Soundpaly, %a_temp%\file.wav

Спасибо, но я уже разобрался

7

Re: AHK: Воспроизведение звука из исполняемого файла

Участник BashkaMen заблокирован за постоянные нарушения правил форума.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

8

Re: AHK: Воспроизведение звука из исполняемого файла

ypppu пишет:

Можно сначала извлечь файл .wav в папку %Temp%, а затем воспроизвести его.

Wav можно проиграть и без извлечения, прямо из ресурсов. Если кому нужно, могу написать.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

9

Re: AHK: Воспроизведение звука из исполняемого файла

Было бы неплохо.

Как сказал мой дед - Я твой дед

10 (изменено: Странникх, 2014-08-07 17:41:53)

Re: AHK: Воспроизведение звука из исполняемого файла

teadrinker пишет:
ypppu пишет:

Можно сначала извлечь файл .wav в папку %Temp%, а затем воспроизвести его.

Wav можно проиграть и без извлечения, прямо из ресурсов. Если кому нужно, могу написать.

Тоже может понадобиться, напишите, пожалуйста. Ваш способ ведь будет работать с другими файлами (картинками например для GUI) ?

11

Re: AHK: Воспроизведение звука из исполняемого файла

Странникх пишет:

Ваш способ ведь будет работать с другими файлами (картинками например для GUI) ?

Нет, это только для wav-ресурсов, с картинками по-другому.

С помощью FileInstall:

ResRead(Sound, "C:\Windows\Media\tada.wav") && PlaySound(Sound)
Return

FileInstall, C:\Windows\Media\tada.wav, tada.wav   ; эта команда сработает только для компилятора
Return

ResRead(ByRef Data, FilePath)
{
   if !A_IsCompiled
   {
      FileGetSize, nSize, %FilePath%
      FileRead, Data, *c %FilePath%
   }
   
   else if (hMod     := DllCall("GetModuleHandle", UInt, 0, Ptr))
        && (hRes     := DllCall("FindResource", Ptr, hMod, Str, FilePath, UInt, RT_RCDATA := 10, Ptr))
        && (hResData := DllCall("LoadResource", Ptr, hMod, Ptr, hRes, Ptr))
        && (pResData := DllCall("LockResource", Ptr, hResData, Ptr))
      VarSetCapacity(Data, nSize := DllCall("SizeofResource", Ptr, hMod, Ptr, hResData))
         , DllCall("RtlMoveMemory", Str, Data, Ptr, pResData, Ptr, nSize)
         
   Return nSize
}

PlaySound(ByRef Sound)
{
   Return DllCall("Winmm\PlaySound", Ptr, &Sound, UInt, 0, UInt, SND_MEMORY := 0x4 | SND_NODEFAULT := 0x2)
}

С помощью Ресторатора. Создать идентификатор ресурса WAVE, назвать ресурс числом (ResourceName := 123)

ResourceName := 123

SND_NODEFAULT := 2, SND_ASYNC := 0x1, SND_RESOURCE := 0x40004
DllCall("Winmm\PlaySound", UInt, ResourceName, Ptr, DllCall("GetModuleHandle", UInt, 0, Ptr), UInt, SND_NODEFAULT|SND_ASYNC|SND_RESOURCE)
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder