Функция _SoundSeek

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


_SoundSeek

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

#include <Sound.au3>
_SoundSeek(ByRef $aSnd_id, $iHour, $iMin, $iSec)

Параметры

$aSnd_id Sound ID массив, возвращённый функцией _SoundOpen()
$iHour Час
$iMin Минута
$iSec Секунда

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

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

Примечания

После использования _SoundSeek() для установки позиции звука, необходимо использовать _SoundPlay(), чтобы возобновить воспроизведение.
Использование ID массива, возвращаемый функцией _SoundOpen() является обязательным для этой функции, чтобы гарантировать воспроизведение файла от правильной позиции независимо от типа кодирования. ID массив должен быть обновлён функцией, поскольку синхронизирующий поправочный коэффициент VBR может быть изменён.

См. также

_SoundPlay

Пример

#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
    $iExtended = @extended ; сохраняет значение, потому что @extended может измениться после DllCall
    $tText = DllStructCreate("char[128]")
    $errorstring = 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)

; Воспроизводит звук 1 секунду
Sleep(1000)

; Устанавливает позицию звука на 2-й секунде
_SoundSeek($aSound, 0, 0, 2)
ConsoleWrite("После _SoundSeek: " & _SoundPos($aSound, 2) & " _SoundStatus: " &_SoundStatus($aSound)& @CRLF)

_SoundSeek($aSound, 0, 0, 1)
ConsoleWrite("После _SoundSeek1: " & _SoundPos($aSound, 2) & " _SoundStatus: " &_SoundStatus($aSound)& @CRLF)

_SoundPlay($aSound, 0)

While 1
    Sleep(100)
    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