Функция _SoundPos

 ↑  ←  Описание функции


_SoundPos

Возвращает текущую позицию (по времени) звука.

#include <Sound.au3>
_SoundPos($aSnd_id [, $iMode = 1])

Параметры

$aSnd_id Sound ID массив, возвращённый функцией _SoundOpen() или путь к файлу
$iMode [необязательный] Этот флаг определяет, в каком формате возвращается позиция звука
1 = (по умолчанию) hh:mm:ss, где h = часы, m = минуты и s = секунды
2 = миллисекунды

Возвращаемое значение

Успех:Возвращает позицию звука.
Ошибка:Возвращает 0 и устанавливает @error
@error:1 = Недопустимое значение параметра $iMode
3 = Неверный Sound ID. Используйте массив, возвращённый функцией _SoundOpen() или существующий путь к файлу.

Примечания

Рекомендуется открыть звуковой файл с помощью функции _SoundOpen() и передать ID массив, а не использовать путь к файлу в этой функции. Маловероятно, что файл кодированный с переменным битрейтом (VBR) возвратит правильную позицию, если в эту функцию передается путь к файлу.

См. также

_SoundLength, _SoundOpen

Пример

#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

_SoundPlay($aSound, 0)
SplashTextOn("Текущая позиция", _SoundPos($aSound, 1), 300, 90, Default, Default, 18, Default, 55)

While 1
    Sleep(100)
    ControlSetText("Текущая позиция", "", "Static1", _SoundPos($aSound, 1))
    If _SoundPos($aSound, 2) >= _SoundLength($aSound, 2) Then ExitLoop
WEnd

_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