_SoundOpen
Открывает звуковой файл для использования с другими функциями _Sound.
#include <Sound.au3>
_SoundOpen($sFile)
Параметры
$sFile | Путь к звуковому файлу |
Возвращаемое значение
Успех: | Возвращает 4-х элементный массив, содержащий следующую информацию: |
$array[0] = Строка ID звукового файла | |
$array[1] = поправочный коэффициент продолжительности VBR | |
$array[2] = синхронизирующий поправочный коэффициент VBR | |
$array[3] = Маркер Sound ID | |
Ошибка: | Возвращает 0 и устанавливает @error |
@error: | 1 = MCI open error |
2 = Файл не существует | |
@extended: | 0 = Нет ошибки |
Целое, отличное от 0 = Ошибка MCI |
Примечания
Несмотря на то, что многие функции _Sound принимают имя файла в качестве параметра, если предполагается открытия файла, кодированного с переменным битрейтом (VBR) настоятельно рекомендуется использовать первоначально _SoundOpen(), а затем использовать возвращенный массив в качестве идентифицирующего параметра в других функциях _Sound...(). Это потому, что MCI DLL предполагает, что все файлы являются CBR (постоянный битрейт) кодированными и выдаёт неверные результаты функций _Sound...() работающих с продолжительностью и позицией, когда звуковой файл был кодирован как VBR (переменный битрейт). Если используется массив в качестве ID параметра с функциями _Sound...(), которые изменяют поправочные коэффициенты VBR (_SoundStop()) ID массив будет обновляться по мере необходимости.См. также
_SoundClose, _SoundLength, _SoundPause, _SoundPlay, _SoundPos, _SoundResume, _SoundStatus, _SoundStopПример
#include <Sound.au3>
Local $sPath = _GetMaxFile(@WindowsDir & '\media', '*.wav')
If @error Then Exit
; Открывает звуковой файл
Local $aSound = _SoundOpen($sPath)
If @error = 2 Then
MsgBox(4096, "Error", "Файл не существует")
Exit
ElseIf @extended Then
Local $iExtended = @extended ; сохраняет значение, потому что @extended может измениться после DllCall
Local $tText = DllStructCreate("char[128]")
DllCall("winmm.dll", "short", "mciGetErrorStringA", "str", $iExtended, "ptr", DllStructGetPtr($tText), "int", 128)
MsgBox(4096, "Ошибка", "Не удалось открыть." & @CRLF & _
"Номер ошибки: " & $iExtended & @CRLF & _
"Описание ошибки: " & DllStructGetData($tText, 1) & @CRLF & _
"Обратите внимание: звук еще может быть корректно воспроизведён.")
Else
MsgBox(4096, "Успешно", "Файл открыт успешно")
EndIf
_SoundClose($aSound)
Func _GetMaxFile($sPath, $sMask)
Local $aFileList = _FileListToArray($sPath, $sMask, 1)
If @error Then SetError(1)
Local $iSize = 0, $sFile = '', $iSizeTmp
For $i = 1 To $aFileList[0]
$iSizeTmp = FileGetSize($sPath & '\' & $aFileList[$i])
If $iSizeTmp > $iSize Then
$sFile = $aFileList[$i]
$iSize = $iSizeTmp
EndIf
Next
Return $sPath & '\' & $sFile
EndFunc ;==>_GetMaxFile