Программное Создание Мультисессии Adobe Audition С Аудиозаписями Телефонных Разговоров

В предыдущей статье я писал о создании векторной графики SVG с помощью диаграммы телефонных звонков, напоминающей диаграмму Ганта.

Информацию о телефонных звонках я взял из реквизитов, которые скачал через личный кабинет на сайте мобильного оператора.

Это произошло почти четыре года назад. В настоящее время у меня есть идея сделать более сложный проект: построить мультисессию в аудиоредакторе Adobe Audition 1.5 из аудиозаписей телефонных разговоров.

При этом располагайте эти аудиозаписи в мультисессии строго в соответствии со временем, а также датами, которым будут соответствовать треки.

При этом визуально такая мультисессия будет напоминать ту же диаграмму, которая была построена в предыдущей статье.

Кроме того, можно будет быстро масштабировать и прослушивать записи телефонных разговоров как в режиме «микс», так и в режиме «соло» ежедневно.

Я решил построить мультисессию из аудиозаписей, накопленных за один календарный месяц, чтобы избежать ненужной загроможденности Adobe Audition. Конечно, можно построить такую сессию вручную, но это долгая и кропотливая работа.

Основной интерес данной задачи заключается в автоматизации построения мультисессии с помощью программного обеспечения.

Точнее, написать программу, которая на основе списка файлов аудиозаписей будет генерировать SES-файл для мультисессии Adobe Audition. Для тех, кто не в курсе: мультисессия, если коротко, — это проект, состоящий из множества различных аудиозаписей, распределенных во времени и по трекам (трекам) и предназначенных для создания их микса.

Прежде всего стоит упомянуть, как я получаю аудиофайлы телефонных разговоров.

Ни для кого не секрет, что современные смартфоны имеют возможность записи телефонных разговоров с помощью различных инструментов, как встроенных в систему, так и сторонних.

Лично я использую планшет Lenovo TAB3 (на базе процессора MT8735P).

Устройство позволяет делать аудиозаписи вручную в сжатом формате, создавая выходные файлы с расширением 3gpp. Записи производятся в стереофоническом режиме с разделенными каналами: в один канал записывается голос абонента, а в другой — ваш собственный.

Сжатый формат аудиозаписей влияет на их искажение при воспроизведении.

Из-за этого я использую сторонние приложения для записи звука, которых бесчисленное множество.

Одно из приложений, которое мне понравилось больше всего, — «Записать мой звонок».

Это приложение записывает звонки автоматически и имеет множество настроек, связанных, в частности, с выбором формата и качества записи звука.

А еще, в качестве бонуса, в приложении есть красивый, очень удобный встроенный журнал звонков, который сохраняется в файл базы данных db (рис.

1).



Программное создание мультисессии Adobe Audition с аудиозаписями телефонных разговоров

Рис.

1. Журнал вызовов в приложении «Запись моего звонка».

Лучшими параметрами аудиозаписи по качеству звука являются WAV 8000Гц 16бит Стерео.

При таких настройках запись не имеет искажений и звучит чисто, хотя и занимает больше места в памяти.

Приложение настроено таким образом, что запись звука начинается автоматически еще до начала телефонного разговора: при поступлении входящего звонка до того, как трубку сняли, или когда вы начинаете набирать номер во время звонка телефона.

То есть также фиксируются пропущенные и неотвеченные вызовы.

Вы можете настроить его так, чтобы записывался только разговор.

Формат имени аудиофайла также настраивается.

В моем случае я настроил его, как показано на рисунке 2.

Программное создание мультисессии Adobe Audition с аудиозаписями телефонных разговоров

Рис.

2. Установка формата имени файла в «Записать мой звонок».

При разработке программы для создания мультисессии необходимо будет взять информацию о дате и времени аудиозаписи телефонного разговора.

Эта информация будет взята из имени файла в фиксированных позициях.

Прежде чем приступить к созданию мультисессионного файла SES, необходимо понять, как структурирован такой файл.

Документации по этому формату, конечно, нигде нет, поэтому пришлось разбираться самостоятельно, опираясь на личный опыт и знания.

Этот файл не является текстовым, поэтому открывать его в Блокноте бесполезно.

На помощь приходит WinHex, шестнадцатеричный редактор.

Я уже написал ряд статей по работе с двоичными данными и декодированию информации, в частности, статью о написании программы перепаковки видео 264-avi. Там я более-менее подробно писал о структуре файла формата avi. Сначала я создал в Adobe Audition 1.5 простую пользовательскую мультисессию, состоящую из одной дорожки и одного аудиофайла (рис.

3), сохранив ее в файл с расширением ses. Размер файла оказался 2422 байта.

Затем я открыл этот файл в WinHex (рис.

4).



Программное создание мультисессии Adobe Audition с аудиозаписями телефонных разговоров

Рис.

3. Просмотр мультисессии в Adobe Audition 1.5 — Пример 1.

Программное создание мультисессии Adobe Audition с аудиозаписями телефонных разговоров

Рис.

4. Мультисессионный файл открыт в WinHex. На первый взгляд вообще ничего не понятно.

В символической части окна можно увидеть смысловые слова «ХОЛОДНОСТЬ», «hdr», «Мастер».

Если просмотреть документ ниже, то можно увидеть текст, содержащий полный путь к файлу (в двух вариантах), который используется в мультисессии.

Это показано на рисунке 5 и обведено зеленым цветом.

Сразу бросаются в глаза короткие смысловые слова, обведенные на той же картинке красной рамкой.



Программное создание мультисессии Adobe Audition с аудиозаписями телефонных разговоров

Рис.

5. Байты пути к мультисессионным аудиофайлам.

Внимательнее просматривая этот документ от начала до конца, я заметил еще несколько коротких осмысленных слов.

Еще я заметил, что длина любого смыслового слова кратна четырем.

Судя по всему, эти слова являются заголовками блоков, составляющих весь мультисессионный файл.

Это напомнило мне структуру RIFF файла avi или wav, состоящую из блоков, которые также имеют заголовки одинакового размера.

После таких заголовков шло 32-битное число (4 байта), указывающее размер текущего блока.

Принимая во внимание этот факт, я решил проверить, работает ли этот принцип для файла ses? Оказалось, что и в случае формата ses это тоже работает (рис.

6).



Программное создание мультисессии Adobe Audition с аудиозаписями телефонных разговоров

Рис.

6. Сходство со структурой RIFF (на примере блока «WLST»).

Первое слово «COOLNESS» в файле ses, видимо, служит основным заголовком и указанием типа этого файла.

Следующие 4 байта — это размер содержимого, которое находится дальше, вплоть до конца файла.

То есть, если внимательно посчитать, то это значение на 12 байт меньше размера всего файла.

А дальше контент состоит из набора разных блоков.

Блок имеет заголовок из четырех или восьми байтов, за которым следуют 4 байта, указывающие размер этого блока, а после них следует содержимое этого блока.

Я выявил наличие подблоков в некоторых блоках, но об этом речь пойдет в ходе более детального описания каждого блока.

В этом файле, как и в примере, я насчитал 17 блоков, они указаны в таблице на рисунке 7.

Программное создание мультисессии Adobe Audition с аудиозаписями телефонных разговоров

Рис.

7. Список блоков, входящих в мультисессию.

Как видно из таблицы, часть одной и той же информации представлена в разных вариантах в разных блоках.

Вероятно это сделано для совместимости между разными версиями программы.

Забегая вперед, зеленым выделены те блоки, без которых мультисессия, представленная в примере, не может существовать.

Серым цветом выделены два блока размером 4 байта, фиктивно присутствующие в данной сессии.

Действительно, у меня вопрос: что будет, если я выкину из файла часть блоков? Ведь мне, например, информация о метрономе и темпе не нужна, а огибающих на клипах (точнее, на одном клипе) в моем простом примере нет. Конверты — это кривые поверх аудиоклипа, которые определяют динамику параметров звука (громкость, баланс) с течением времени.

Я последовательно начал вырезать блоки из этого файла, не забывая пересчитывать и корректировать значение после слова «ХОЛОДНОСТЬ».

В результате мультисессия успешно открывалась, если было хотя бы пять блоков, выделенных зеленым цветом.

Сеанс содержит два блока списка аудиофайлов.

Ты мог оставить любого из них.

Я предпочитаю второй вариант (блок LISTFILE), так как в первом варианте (блок WLST) описание пути к файлу имеет два байта на символ.

Это может быть расширенный алфавит символов, но мне достаточно стандартного алфавита ASCII. Тем более, что русские символы, судя по всему, прекрасно поддерживаются.

Описания аудиоклипов представлены в трёх вариантах.

Я выбрал первый вариант (блок «бк20»), потому что его описание я понял быстрее всего.

Мультисессия из аудиозаписей телефонных разговоров по сложности будет аналогична мультисессии, представленной в этом примере.

Разница лишь в том, что он будет больше: количество аудиофайлов будет довольно большим, а количество треков будет равно количеству дней в месяце.

Для такой многосессии никаких других наворотов не нужно.

Размеры блоков «hdr» и «stat» статичны и всегда составляют 936 и 40 байт соответственно, независимо от размера мультисессии.

Размеры блоков «trks» и «bk20» зависят от количества дорожек и аудиоклипов в мультисессии соответственно.

А вот размер блока «LISTFILE» самый непредсказуемый: он зависит не только от количества аудиофайлов в мультисессии, но и от длины их имен и путей их расположения.

Расшифровка и составление полного описания блоков многосессионного файла – достаточно трудоемкая задача.

Поэтому я расшифровал информацию частично, обратив внимание только на те байтовые участки, которые необходимо учитывать при формировании мультисессии с упрощенным содержимым.

В этой статье я приведу описание содержимого каждого блока, которое мне удалось расшифровать.

В содержимом блока заголовка мультисессии «hdr» (в конце есть пробел) ключевыми байтами являются первые 12 байт, то есть 3 слова по 4 байта (рис.

8).

Первое слово — это частота дискретизации выборок в мультисессии.

Для моей мультисессии это значение равно 8000 Гц (0x1F40).

На рисунке 8 он выделен зеленой заливкой.

Напомню, что байты в словах для числовых значений читаются задом наперед. Второе слово — продолжительность (длина) мультисессии, выраженная в количестве сэмплов (оранжевая заливка на рисунке).

В этом примере это значение — 0x1A365E (1717854).

Если перевести в минуты, то получится 1717854/8000/60, что составляет примерно три с половиной минуты.

Так оно и есть: в минимальном масштабе мультисессия имеет именно такую продолжительность.

А для мультисессии записей телефонных разговоров длительность должна составлять сутки или 24*3600*8000 = 691200000 = 0x2932E000 выборок.

В этой ситуации, кстати, текущее время воспроизведения мультисессии на панели ниже, являющееся относительным временем, будет точно совпадать с абсолютным значением времени текущего телефонного звонка (или группы звонков по дням).

Следующее слово, выделенное желтым цветом, указывает количество аудиоклипов в мультисессии.

В примере это значение равно единице, но в случае телефонных звонков количество таких роликов будет равно количеству аудиофайлов.

Забегая вперед, последнее сказанное не совсем верно.

Фактически количество аудиоклипов может быть немного больше, чем количество аудиофайлов.

В одном файле может быть два клипа, если во время телефонного разговора наступил новый день.

В этом случае вам придется «переносить» запись на новый трек, и обойтись одним клипом не получится.

Но на практике такие случаи редки, поскольку переход к новому дню происходит ночью, когда активность телефонных звонков минимальна.

Кстати, я не учел этот момент при создании SVG-диаграммы в предыдущей статье.

После слова-значения количества блоков, скорее всего, следует «полуслово» из двух байтов 0x0020, или 32 в десятичном виде.

Его также можно было бы выделить цветной заливкой, так как скорее всего это означает разрядность микширования.

В Adobe Audition в строке состояния внизу написано: 8000 Гц, 32-битное микширование.

Помимо трех самых необходимых слов контента «hdr», есть и другие непонятные байты.

Я, например, даже не знаю, что означает слово «Мастер».

Видимо это название основной шины микширования.

Но самые интересные группы байт я обвел серой рамкой.

Дело в том, что именно эта последовательность часто встречается и в других блоках мультисессионного файла.

Я не случайно объединил в группу именно 8 байт, так как, скорее всего, это реальный тип данных.

В частности, это «00 00 00 00 00 00 F0 3F» HEX-редактором в типе Double интерпретируется как 1.0e+0, то есть как единица.

Скорее всего это значения уровней громкости и прочих «наворотов», но приведенные не в децибелах, а в виде коэффициента.

Скажу сразу, что все байты любого блока, которые мне не удалось распознать (или в этом не было необходимости), будут записаны в сгенерированный мультисессионный файл без изменений, как в

Программное создание мультисессии Adobe Audition с аудиозаписями телефонных разговоров

Рис.

8. Часть байтов блока заголовка «hdr».

Блок «стат» текущего состояния мультисессии (самой короткой) я решил не изучать.

Я создал еще один образец мультисессии из одного аудиофайла, растянул его на 24 часа и сделал полный вид (масштабированный) по горизонтали.

И вертикально масштабировал вид треков, чтобы при развернутом окне Adobe Audition на экране FullHD умещался 31 трек.

Это максимальное количество дней в одном месяце.

Курсор мультисессии находится в самом начале.

Потом я сохранил эту мультисессию в другой файл, после чего вытащил блок «stat» со всеми его заголовками.

Эти байты я сохранил в файл «stat_31_full.BLK» для дальнейшего использования при разработке программы.

Содержимое такого файла показано на рисунке 9. Размер этого файла составил 48 байт (40 байт содержимого блока + 4 байта заголовка + 4 байта описания размера контента).



Программное создание мультисессии Adobe Audition с аудиозаписями телефонных разговоров

Рис.

9. Байты блока состояния для моей мультисессии.

Для более наглядного описания следующих трёх блоков при написании этой статьи я решил создать более сложную мультисессию, состоящую из двух треков, двух файлов и трёх клипов (рис.

10).

Первый файл «Incoming_Call — 20200622_124844 — +74999545237.wav» имеет продолжительность 281280 сэмплов.

Второй файл «Outgoing_Call — 20200621_231753 — +79536170218.wav» имеет продолжительность 63360 сэмплов.

Первый трек, получивший название «Первый» (переименованный), содержит два клипа.

Первый клип смещен от начала сеанса на 10 секунд (на 80 000 семплов).

Клип представлен всем содержимым первого аудиофайла, то есть длительность клипа совпадает с длительностью файла.

Второй клип сдвинут на 50 секунд от начала сеанса (на 50*8000=400000 сэмплов).

Клип представлен неполным содержимым второго аудиофайла.

В этом клипе звук начинается с начала файла, но длится всего 5 секунд (40 000 семплов).

То есть длина ролика 5 секунд. Второй трек под названием «Второй» содержит один клип.

Сдвинуто от начала сеанса на одну секунду (на 8000 отсчетов).

Этот клип представляет собой неполное содержимое первого аудиофайла.

Внутри этого клипа звук начинается не с начала, а через 3 секунды, а содержит его до самого конца.

Таким образом, смещение звука в этом клипе составляет 3 секунды (24 000 семплов).

А длина данного клипа рассчитывается как разница между длительностью соответствующего аудио и смещением аудиоданных внутри клипа.

В данном случае длина клипа составляет 281280-24000 = 257280 сэмплов.



Программное создание мультисессии Adobe Audition с аудиозаписями телефонных разговоров

Рис.

10. Просмотр мультисессии в Adobe Audition 1.5 – Пример 2. На рисунке 11 показано содержимое блока описания трека «trks».

4 байта заголовка блока выделены красной рамкой, а размер содержимого блока — зеленой рамкой.

Это уже обсуждалось выше.

Далее идет содержимое блока, байты которого выделены в редакторе WinHex характерной синеватой заливкой.

Размер выделения, значение которого отображается в правом нижнем углу редактора (также обведено зеленой рамкой), совпадает со значением из байт после заголовка и в данном примере составляет уже 308 байт. Если в первом (предыдущем) примере с одного трека размер блока составлял 156 байт, а в текущем — 308 байт, то можно сделать следующий вывод. В силу предположения об однородности и эквивалентности треков, области описания каждого трека должны иметь одинаковый размер.

Эти районы, так сказать, являются подблоками блока «тркс».

На картинке они обведены синей рамкой.

Оказалось, что размер одного такого подблока составляет 152 байта.

А в самом начале последовательных подблоков находится подзаголовок из четырех байт, отмеченный на рисунке желтой заливкой.

Эти четыре байта — не что иное, как количество дорожек в мультисессии или количество подблоков.

И так, размер S содержимого блока «trks» можно рассчитать по формуле S=4+152*n, где n — количество треков в сессии.

Так и есть: 4+152*1=156 и 4+152*2=308.

Программное создание мультисессии Adobe Audition с аудиозаписями телефонных разговоров

Рис.

11. Байты блока описания трека «trks».

Теперь перейдем к описанию содержимого подблока.

Там много чего есть, но я разобрался только в самом главном.

Это всего лишь три параметра: 4 байта двоичных флагов (обведены красным), имя трека (обведено коричневым) и идентификатор трека (обведен синим).

Идентификатором трека является его серийный номер.

В описании аудиоклипов необходимо указывать ссылку на трек (об этом будет сказано позже).

Название трека занимает область 36 байт. Это максимальное количество символов в названии трека, но оно может быть и меньше, как в текущем примере.

Неиспользованные байты равны нулю.

В мультисессии с аудиозаписями телефонных разговоров названия треков будут соответствовать записи соответствующих дат. Рядом с датой можно написать соответствующий день недели двумя заглавными буквами в сокращенном виде.

Четыре байта двоичных флагов (всего 32 флага) предназначены для описания двоичных параметров, специфичных для трека.

На самом деле их может быть меньше 32. Я расшифровал лишь часть флагов.

Из них как минимум три флага указывают, активирован ли на треке параметр R (Запись), S (Соло) или M (Mute).

В приведенном выше примере ни одна из этих трех кнопок трека не нажата, а значение двоичных флагов равно нулю (0x00000000).

Но если нажать кнопку «R» на треке (то есть поставить трек на запись) и снова сохранить сессию, то значение бинарных флагов станет 0x00000004, то есть третий бит справа (бит2 ) станет одним.

Именно этот бит отвечает за свойство «запись» трека.

В моем проекте это свойство не имеет никакого значения, так как моя мультисессия предназначена для визуального просмотра и воспроизведения.

Однако у меня возникла идея, чтобы кнопка «R» нажималась на тех треках, которые соответствуют выходным дням.

Этот прием позволит вам более удобно визуализировать мультисессию.

Блок списка мультисессионных аудиофайлов «LISTFILE» (рис.

12) состоит из следующих частей.

Как и в случае с блоком описания трека, его также можно разделить на подблоки по количеству файлов в сессии.

По аналогии с рисунком 11 я также выделил красной рамкой заголовок восьмибайтового блока, а зеленой — размер его содержимого.

В этом конкретном примере это значение составляет 188 байт. Содержимое выделено по аналогии с рис.

11. Оно разделено на две зоны, выделенные синей линией.

Это подблоки блока списка файлов.



Программное создание мультисессии Adobe Audition с аудиозаписями телефонных разговоров

Рис.

12. Байты блока описания аудиофайла «LISTFILE».

Каждый подблок соответствует одному аудиофайлу.

В примере используются два аудиофайла, поэтому количество подблоков соответствующее.

В отличие от предыдущего случая с описанием треков, здесь нет подзаголовка о количестве подблоков.

Подблок включает в себя 4 байта своего заголовка «wav» (выделены черной рамкой) и 4 байта, обозначающие размер дальнейшего содержимого (выделены фиолетовой рамкой).

Для обоих подблоков это значение в данном примере одинаково и составляет 0x56 (86) байт. Это связано с тем, что файлы расположены по одному пути и имеют имена одинаковой длины.

Точнее, полные имена файлов имеют одинаковое количество символов.

В противном случае подблоки будут иметь разные размеры.

Область содержимого подблока (дальнейшие байты) содержит следующую информацию.

В синей рамке выделен номер, который является идентификатором аудиофайла.

В отличие от идентификатора трека, этот номер не является серийным номером файла.

Насколько я понимаю, при сохранении мультисессии она назначается случайным или псевдослучайным образом для каждого файла.

Главное, чтобы между этими ценностями не было совпадений.

В этом я убедился, когда дважды сохранил мультисессию и сравнил ses-файлы по содержимому.

В результате оказалось, что файлы отличаются как раз этими самыми байтами.

И не только эти.

Случайное число также присваивается идентификатору слоя конверта в блоке «ep20».

Но в этом блоке, как говорилось выше, совершенно нет необходимости, и его описание в данной статье рассматриваться не будет. Идентификаторы аудиофайлов необходимы для связи их с клипами.

Эта ссылка встречается в блоке с описанием клипов.

В моем случае для мультисессии с записями телефонных разговоров идентификаторами аудиофайлов будет последовательность натуральных чисел, но начиная не с нуля, а, например, с 1000. Следующие 4 байта, которые я не выделял , имеют значение 0x13 в обоих подблоках.

Скорее всего, это значение указывает тип формата аудиофайла.

Эту величину условно можно считать константой, так как все мои аудиофайлы однотипные.

Следующая строка байтов описывает полное имя аудиофайла, заканчивающееся нулевым байтом (например, признаком конца строки).

Размер этой строки на один больше, чем количество символов в полном имени аудиофайла.

Далее идет константа 0xFFFFFFFF. После него идет значение, указывающее количество сэмплов в данном аудиофайле (на рис.

12 оно выделено желтой рамкой).

Для первого файла это значение — 0x44AC0, а для второго — 0xF780. Они в точности соответствуют десятичным значениям 281280 и 63360 соответственно, которые уже появлялись выше в описании второго примера мультисессии.

Наконец, осталось рассмотреть описание самого сложного блока – блока описания аудиоклипа «bk20» (рис.

13).

По аналогии с двумя предыдущими рисунками выделен заголовок и размер содержимого блока.



Программное создание мультисессии Adobe Audition с аудиозаписями телефонных разговоров

Рис.

13. Байты блока описания аудиоклипа «bk20».

Содержимое блока преимущественно содержит два подзаголовка по 4 байта каждый.

Они выделены фиолетовой и голубой штриховкой.

Первый подзаголовок — количество клипов в сеансе.

В примере их три.

Второй подзаголовок — константа 0x48 (72).

Видимо там указан размер каждого подблока, и они просто идут дальше.

Их количество совпадает с количеством клипов в сеансе.

Каждый такой подблок описывает параметры одного клипа.

Кстати, размер D содержимого блока «bk20» можно рассчитать по формуле D=8+72*b, где b — количество аудиоклипов в мультисессии.

Пояснительные выделения байтов внутри подблоков на рисунке отсутствуют, так как необходимых параметров довольно много.

Они перечислены в отдельной таблице (рис.

14).

Параметры, которые нужны в моем проекте, выделены синим цветом, а неопознанные константы — серым.

В этой таблице также показаны значения параметров для каждого из трёх мультисессионных клипов из последнего примера.



Программное создание мультисессии Adobe Audition с аудиозаписями телефонных разговоров

Рис.

14. Список параметров подблока описания аудиоклипа.

Первое слово (группа из 4 байт) — это ссылка на конверт, которая нам не нужна.

Второй параметр — ссылка на аудиофайл.

Значение этого параметра равно значению идентификатора аудиофайла, которому соответствует данный аудиоклип.

Затем есть две реальные константы, которые уже появлялись ранее.

После них идут три координирующих параметра, выраженные в количестве семплов: смещение клипа от начала сеанса, длина (длительность) клипа в сеансе и смещение звука внутри клипа.

Все должно быть понятно из названий этих параметров.

Чуть раньше, подробно описывая второй пример мультисессии, я указал числовые значения всех смещений и длительностей.

На рисунке 14 в таблице показаны параметры каждого клипа в шестнадцатеричной форме.

Эти значения я ввел в таблицу, скопировав их прямо с рисунка 13. Но если преобразовать их в десятичную форму, они совпадут с соответствующими значениями из описания второго примера (проверено отдельно).

Стоит отметить, что ссылки на аудиофайл для первого и третьего клипа имеют одинаковое значение 0x3F5B050, поскольку оба клипа ссылаются на один и тот же аудиофайл с соответствующим идентификатором.

Далее следует блок байтов двоичных параметров (4 байта).

Как и в описаниях треков, я записал только некоторые биты.

Значение по умолчанию — 0x00080000, то есть при преобразовании в двоичный формат только один бит19 «повышается» до единицы, а остальные 31 бит равны нулю.

Без этого единственного бита, как показала практика, мультисессия отказывается загружаться.

В текущем примере это значение характерно для первого и второго клипа, но третий почему-то имеет значение флагов, равное 0x000A0000. Если посчитать, то в этом значении «подняты» два бита: еще бит19 и еще бит17. Я не знаю, почему это произошло.

Я попробовал сбросить бит17 в ноль, изменив весь параметр на 0x00080000, как и соседние клипы.

В результате сессия в Adobe Audition открылась без видимых изменений.

Работая в Adobe Audition, я заметил такие свойства клипа, как «Заморозка во времени» и «Заморозка только для воспроизведения».

Логично предположить, что за сохранение этих свойств отвечают определенные биты в блоке двоичных параметров.

Есть и другие бинарные свойства клипов, но они нам не нужны.

И два перечисленных свойства будут очень полезны.

Свойство «Зафиксировать по времени» полезно тем, что клип будет защищен от возможности случайного перемещения указателя мыши в горизонтальном направлении.

Но на таком ролике в левом нижнем углу будет визуально нарисован символ в виде замка в круге, а это ненужная для просмотра графическая информация.

Второе свойство клипа Freeze for Playback Only полезно тем, что при установке соответствующего параметра дорожки «R» (Запись) клип не приобретет вынужденный красный цвет. Почему я решил использовать на некоторых треках параметр «R» написано выше.

Опытным путем я выяснил, что бит1 отвечает за первое свойство клипа, а бит3 — за второе.

Из всего сказанного следует следующее.

Чтобы присвоить клипу свойство «Фиксировать по времени», нужно в двоичных параметрах прописать значение 0x00080002. Для свойства «Исправить только для воспроизведения» — 0x00080008. Для обоих свойств их логическая сумма равна 0x0008000A. С двоичными параметрами мы разобрались.

После этих байтов идет ссылка на трек, на котором находится клип.

Фактически прописан идентификатор трека, который совпадает с его серийным номером.

Adobe Audition 1.5, кстати, поддерживает не более 128 треков, поэтому этот идентификатор умещается в один байт, хотя он указан как 32-битное значение.

Далее идут нерасшифрованные нулевые константы (4 константы по 4 байта каждая).

Наконец, последний важный параметр — это цвет клипа.

Редактор Adobe Audition 1.5 позволяет установить значение цвета для клипа от 239 в соответствующем диалоговом окне или выбрать его из палитры (рис.

15).

Цветовая палитра не особо радует, но других вариантов не дано.

Цвет клипа по умолчанию — 102 (0x66) (0x66).



Программное создание мультисессии Adobe Audition с аудиозаписями телефонных разговоров

Рис.

15. Диалог выбора цвета аудиоклипа в Adobe Audition 1.5. Параметр цвета в файле ses 32-битный, но на самом деле цветов всего 240, что умещается в один байт. Остальные три старших байта равны нулю.

У меня была идея, что если я попытаюсь отредактировать эти байты на другие значения, то при открытии мультисессии на клипе появятся новые цвета.

Но этот трюк не сработал.

Как обсуждалось в предыдущей статье, цвета на диаграмме полезны для визуального выделения определенной особенности телефонного звонка.

Мультисессия аудиозаписей телефонных разговоров будет напоминать подобную схему, поэтому цвет роликов будет очень кстати.

После параметра цвета клипа идут два слова из нулей.

На этом описание подблока закончено.

Восемь байтов нулей являются последними в подблоке последнего блока.

Следовательно, они будут последними во всем файле ses. В процессе обдумывания проекта мне пришла в голову еще одна идея: добавить в мультисессию маркеры (cue point), размещая их каждый час и маркируя их соответствующим образом.

Если сравнить эту идею с предыдущей статьей, то это полная аналогия вертикальных линий на диаграмме, рисующихся каждый час.

Для того чтобы в мультисессии присутствовали ключевые точки, необходимо учитывать шестой блок, который называется «cues».

Я не удосужился разобраться в байтах этого блока.

По аналогии с блоком «стат», в созданной мультисессии на 24 часа я каждый час вручную размещал по 23 ключевые точки и давал им соответствующие названия.

Затем я сохранил мультисессию в отдельный файл ses, вырезал содержимое блока «cues» и сохранил его в файл «cues_24h.BLK».

Этот файл будет учтен при разработке программы.

Байты этого файла показаны на рисунке 16. Не знаю почему, но я сохранил именно содержимое, без заголовка и поля размера контента (в отличие от «stat_31_full.BLK»).

Эти два слова будут добавлены в код программы.

А размер контента составляет 556 байт. Из них 4 байта занимают подзаголовок (количество ключевых точек) и 23 подблока по 24 байта каждый.

На рисунке 16 байты содержимого первого подблока показаны штриховкой.

Названия ключевых точек (меток) я решил сделать следующие: 01h, 02h,…, 23h.

Программное создание мультисессии Adobe Audition с аудиозаписями телефонных разговоров

Рис.

16. Байты содержимого блока ключевых точек «cues» для моей мультисессии.

На этом описание мультисессионного формата завершается.

Теперь у вас есть необходимые знания, чтобы приступить к написанию программы для создания мультисессии.

Написание программы — более простая задача по сравнению с изучением и расшифровкой формата ses. Я прошел программу за два вечера и потратил как минимум неделю на изучение формата.

Более того, я написал программу, прибегнув к ранее использованным функциям, в частности, работе с файлами и котом.

Теги: #Разработка Windows #Звук #C++ #Визуализация данных #Инфографика #adobe Audition #winhex #riff

Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.