Имя пользователя:
Пароль:
 

Показать сообщение отдельно

Забанен


Сообщения: 793
Благодарности: 260

Профиль | Цитировать


DJ Mogarych, уже дал ответ как решается задача, через системный шелл. Давайте до кучи рассмотрим как вычислить продолжительность математически (Iska вроде бы сетовал, что ему не шибко хочется заморачиваться с расчётами). Для примера возьмём RIFF Wave (это те самые WAV, что можно отыскать в %systemroot%\Media). Формат такого WAV беспрецедентно прост: первые 12 байт - т.н. RIFF описатель, следующий 24 байта - описатели формата, далее два блока по четыре байта - пролог данных, а там и сами данные.

Как видим всё просто, бутылка, дабы разобраться, нам не потребуется.
Обобщённый алгоритм вычисления длительности в миллисекундах:
Код: Выделить весь код
using namespace System.IO

$br = [BinaryReader]::new(($fs = [File]::OpenRead(<# наш wav файл #>))
$fs.Position = 0x1C
$byterate = $br.ReadUInt32() # см. в таблицу касательно последовательности байт
$ms = (($fs.Length - 0x2C) * 1000) / $byterate # искомое значение
$br.Dispose()
Перевести в секунды, минуты, часы (нужное подчеркнуть) полученное значение, полагаю, уже не составит труда.

Последний раз редактировалось greg zakharov, 09-06-2021 в 17:18.

Это сообщение посчитали полезным следующие участники:

Отправлено: 17:02, 09-06-2021 | #16