
В киноиндустрии обычно есть аудиофайлы WAV, содержащие метаданные в фрагменте iXML RIFF. Один из простых способов прочитать эти метаданные — открыть файл WAV в текстовом редакторе, например BBEdit или Notepad++, или даже TextEdit. Но с командной строкой cat
это tail
не работает, я вижу только мусорные символы. Я использую macOS 10.13, если это имеет значение. Чем cat
отличается от этих приложений для редактирования текста?
Вот пример файла, в котором iXML находится в самом низу:http://www.gallery.co.uk/ixml/examples/usesEntireiXMLSpec.WAV
решение1
Когда cat
выводит файл, он выводит его байт в байт как есть, без замены пробелов или точек или каких-либо других символов замены. Поэтому, когда он выводит двоичные данные аудиосэмпла ранее в файле .WAV, некоторые из этих байтов случайно совпадают со старыми кодами управления терминала и «escape-последовательностями» (последовательностями байтов, начинающимися с символа «ESC», которые можно использовать для таких действий, как изменение цвета текста или фона, очистка экрана терминала и перемещение курсора на экране терминала). Ваш эмулятор терминала (Terminal.app или iTerm2 или что-то еще) пытается соблюдать эти коды управления и escape-последовательности, что нарушает обычный способ отображения текста и делает это непредсказуемым образом.
Многие терминальные инструменты имеют опции, позволяющие вам работать с файлами, которые содержат двоичные данные, смешанные с чистым печатным текстом ASCII. Например, cat
есть -v
опция, позволяющая ему заменять печатные последовательности вместо управляющих символов ASCII. Также есть vis(1)
, od(1)
, hexdump(1)
, strings(1)
и другие. Вы также можете использовать такие инструменты, как sed(1)
, grep(1)
, и , awk(1)
чтобы попытаться извлечь данные ASCII XML из двоичных данных в файле.
Из этих вариантов, я думаю, strings(1)
это может быть наиболее многообещающим для вас. Он просматривает файл в поисках непрерывных серий (строк) средней и большой длины печатных символов ASCII и автоматически выводит любые такие строки, которые он находит. Так что, поскольку XML — это чисто печатный ASCII, strings(1)
следует вывести все, пропуская все двоичные аудиоданные.