Медиаплеер для переводчиков — feci quod potui

в 13:04, , рубрики: mp3, Медиаплееры, Работа со звуком

Дисклеймер

Описание надстройки, приведенное ниже, уже сделано мною на нашем сайте, но там статья написана для пользователей. Здесь же мне хотелось бы передать идею кому-нибудь из разработчиков взрослого ПО, который на наш сайт в жизни не зайдет. И цель, и аудитория совсем другие, поэтому ну никак — по моему, конечно же, скромному мнению — не тянет это на тупой перепост. Вот. Кто думает так же — добро пожаловать под кат.

Зачем переводчику медиаплеер?

Не совсем затем же, зачем, скажем, среднему пользователю. Оный может слушать на нем а) музыку; б) подкасты; в) порнуху (не знаю точно, какой смысл ее слушать, но Rule 34 же); г) черт-те что еще, но все эти варианты использования требуют от программы определенного и в целом для всех одинакового набора функций (предыдущий / следующий трек, плейлист, эквалайзер и прочее) и соответствующих элементов управления и горячих клавиш. Переводчик же слушает — помимо пунктов (а)-(г) выше, для которых «спец» не надо — еще любимого себя, и не в целях самолюбования, а совсем даже наоборот, в целях критического осмысления собственной — или, если речь идет об аудите, чужой — работы.

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

1. Звуковые файлы, как правило, очень длинные: сессия переводимого мероприятия длится час-полтора, но бывает и часа по три без перерыва, длина файла соответствующая. Для режимов (а) и (б) это скорее исключение (даже концертные записи давно уже бьются на треки, у меня рекорд – Jethro Tull, Thick As A Brick, 20:08); для (в) — свойство весьма желательное, но — при сохранении качества материала – труднодостижимое; для материалов, прослушиваемых переводчиками — скорее правило. Использование функций «предыдущий / следующий трек» в данном случае не работает (и вообще не нужно), а путешествия взад-вперед по такому файлу каким-нибудь ползунком в пользовательском интерфейсе — ну очень мерзкое времяпрепровождение хотя бы потому, что при такой длине файла каждое дрожание руки на ползунке может «стоить» плюс-минус десяток секунд.

2. Файлов нужно прослушивать сразу два — оригинал и перевод. Заниматься оценкой качества перевода, не слыша оригинала, глупо; обратное вообще не имеет смысла. Открывать два плеера или постоянно перепрыгивать с одного файла на другой — см. выше. Открывать один плеер в случае 3(b) – см. ниже – можно, и даже какой-никакой анализ такого звукового потока провести тоже можно, но одновременно слушать и пытаться анализировать два текста на разных языках – это весьма серьезное напряжение памяти, проигрывать один и тот же кусок нужно будет ооочень часто – см. выше. Правильный способ – прослушивать сначала недлинный отрезок оригинала, затем – соответствующий отрезок перевода (то есть синхронный перевод в записи превращается практически в последовательный).

3. Оригинал и перевод могут прилететь в разных форма(та)х. Вообще, способов записи синхронного перевода на данном этапе революции три:

  • a. оригинал пишется отдельно, перевод отдельно (например, если звукорежиссер по заданию организатора мероприятия пишет только оригинал, а свою работу переводчик пишет сам на собственный ноутбук/рекордер/диктофон);
  • b. оригинал и перевод пишутся в один звуковой файл (например, тракты русского и английского каналов заводятся на левый и правый канал стереорекордера);
  • c. в один звуковой файл пишется один язык, в другой — другой (трансляция, например, буржуинских вебинаров на русскую аудиторию чаще всего ведется по принципу «только русский»: русскоязычные доклады в оригинале, англоязычные — в переводе; в этом случае для записи используется два рекордера, потом при монтаже звук перевода накладывается на видео доклада).

4. Только в случае 3(b) можно рассчитывать на то, что оба звуковых потока, которые отдадут переводчику для анализа, синхронизированы, то есть, проигрывая 1128-ю секунду перевода, мы слышим, как переводчик реагировал на 1128-ю секунду оригинала. В двух оставшихся случаях надеяться на синхронизацию можно, рассчитывать – нельзя. А при прослушивании хочется все-таки одновременности: ведьмы мы али не ведьмы? синхронисты али нет? тем более что одна из переменных оценки качества перевода – задержка между оригиналом и переводом, а считать ее имеет смысл только при синхронизации. При этом надо учитывать, что программами, позволяющими обрезать «хвосты» аудиофайлов, мало кто из переводчиков умеет и хочет пользоваться.

5. Довольно часто при прослушивании возникает чувство, что вот здесь ты что-то сделал не так, а что конкретно – сформулировать не можешь (вариант 2 – тебе очень понравился только что услышанный вариант перевода, и им обязательно надо поделиться с миром). Обычно это лечится (вариант 2 – усугубляется) повторным прослушиванием того же отрезка через некоторое время. Так вот, надо же записать, какой отрезок вызвал интерес, то есть поставить закладку. А если стоит задача разобрать перевод целой сессии, таких отрезков может быть не один десяток — плюс разбор может довольно далеко отстоять по времени от прослушивания, — поэтому хорошо бы сохранить все закладки, поставленные для этого файла, и впоследствии при его открытии загружать их, чтобы не делать два раза одну и ту же работу.

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

7. Поскольку границы отрезков могут приходиться на середину смысловой группы или вообще середину слова – и еще потому, что в зависимости от используемого софта и/или акустики первые полсекунды-секунду после молчания громкость может быть неполная, — проигрывание следующего отрезка следует начинать не с окончания предыдущего, а с перехлестом. Комфортный перехлест – три секунды, хотя это имхо.

Вот со всеми этими функциями и был сделан медиаплеер «Совесть переводчика». Сделан он был в виде надстройки MS Word, поскольку ничему другому в программировании его автор не научился. Весь звуковой функционал реализуется только через mciSendString, открывающую два разных плеера – mysound и mysound1 и производящую с ними стандартные манипуляции. Исходя из специфики Ворда, поломать голову заставила только реализация попеременной работы двух плееров. Решено было методом OnTime, через секунду запускающим ту же процедуру PlayAlternate, которая смотрит статусы обоих плееров и принимает решение, оставить их в покое и через секунду снова поглядеть, запустить первый с секунды такой-то по такую-то или второй с такой-то по такую-то. Строго говоря, реализация неидеальная: в Ворде таймеров OnTime может одновременно работать не больше одного, причем в случае конфликта в живых остается последний из запущенных, и если на компьютере через VBA запущены какие-то другие таймеры – ежесуточно выполняемые процедуры, к примеру, в шаблоне Normal, ¬- таймер PlayAlternate уничтожает их без объявления войны, а пользователь потом удивляется, почему курсы валют в Ворде не сегодняшние (писал я такую надстройку, когда в РИА «Новости» работал). Но других способов в Ворде я не обнаружил.

Все данные о закладках (и вообще все, что надо сохранить – например, последний проигрываемый файл) записываются в пользовательские свойства (CustomDocumentProperties) активного документа (это пустой документ, открываемый Вордом на основе шаблона; если написать весь проект в документе, а не шаблоне, активным всегда будет считаться именно этот документ) и сохраняются вместе с ним с именем формата “Interpretation_Analysis_Report”. Для верности вся информация, подлежащая сохранению, печатается в текст документа: вдруг разбор будет делаться на обычных плеерах, тогда хотя бы, глядя в бумажку, можно будет открывать сразу закладки, а не прослушивать «…. стоп-стоп-стоп, а где же это было?»

Отдельно пришлось побить Ворд ногами, чтобы через VBA реализовать горячие клавиши. Одному элементу управления – в данной случае кнопке Play/Pause – приписана частная процедура обработки нажатия всех клавиш, когда на ней фокус. Горячие клавиши захардкодены и выведены на пользовательскую форму – было страшно лень писать отдельную большую часть кода для каких-нибудь трех извращенцев, которые не захотят, как все нормальные люди, пользоваться нижней строкой QWERTY. А фокус передается этой кнопке в конце каждой – вообще каждой – процедуры: что бы мы ни делали, последний шаг – «да, кстати – и фокус передаем кнопке Play/Pause/Resume». Наверняка есть какой-то менее хирургический способ, но этот, во всяком случае, работает.

Список Step задает длительность проигрываемого отрезка. По умолчанию, 30 секунд речи нормальный переводчик может удержать в голове, не пользуясь заметками; в отрезке меньшей длительности может быть недостаточно контекста, a начало минутного отрезка к его концу можно и забыть (при «нормальном» темпе речи это примерно две трети страницы текста, все помнят школьные оценки по технике чтения, когда читающие медленнее 120 слов в минуту объявлялись госпреступниками? так вот, это комфортный темп речи – не чтения – профессионального оратора). Но возможность выбрать длину все равно должна быть: может, у оратора темп речи очень быстрый или, наоборот, очень медленный.

Список Sync дает возможность компенсировать разницу во времени начала двух файлов. Происходит она, например, оттого, что перед включением микрофона председателя и его словами «Доброе утро, уважаемые коллеги» переводчик у себя включил запись чуть заранее, чтобы во время дела не отвлекаться, а звукоинженер на пульте включил рекордер точь-в-точь перед тем, как отправить звук в колонки. Или наоборот. Бегать потом за организаторами и просить обрезанный файл – а) не дадут, б) сам забудешь, в) времени жалко. Один день конференции даже в MP3 – это под гигабайт, по инету не очень-то передашь. Про владение программами обрезки уже писал – нету его. А так методом научного тыка с двух-трех раз получается синхронизация; она потом сохраняется в соответствующем документе, естественно, и эта пара файлов в следующий раз загрузится именно с этой синхронизацией. Положительные значения соответствуют «запаздыванию» файла перевода. Как правило, разница составляет две-три секунды, но я на всякий случай ввел в список по 60 секунд в каждую сторону, что мне, жалко, что ли.

В остальном – стандарты из толстой книжки «Word 2000. Руководство разработчика», их описывать, наверное, нет большого смысла, поскольку реализация – как во всех других плеерах. Код задокументировал как смог, не кидайтесь камнями.

Теперь о глубинном смысле написания этого поста. Конечно, не похвастаться – не та аудитория. А попытаться вызвать интерес к написанию нормального, взрослого плеера для, например, планшетов и смартфонов. Вот я, например, много времени провожу за рулем, и это время мог бы тратить с пользой — на прослушивание переводов и расстановку закладок. В нынешнем виде надо открыть ноутбук, поставить его на пассажирское сиденье, закрепить, чтоб от тормозов не улетал под кресло, открыть Ворд и подключить к аудиосистеме автомобиля. В общем, целое дело. А если бы такой плеер стоял на смартфоне, который я в любом случае подключаю, ибо навигация и хандсфри, жизнь была бы значительно легче и продуктивнее. Мой файл можно взять отсюда.

Большой аудитории автору взрослой «Совести переводчика» обещать не могу: в России – сотни четыре человек, в мире – тысяч десять, наверное. Но зато, в отличие от 97, как я недавно услыхал аж от самого Боба Дорфа, процентов загрузок, от этой никто не будет требовать бесплатности. Она даже имеет право быть весьма дорогой: эти выдержат. Ну, я точно выдержу.

Автор: KirillEltsov

Источник


* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js