Полное описание подготовки звуков для словаря (с базовым синтаксисом) находится в статье “Подготовка звуковых данных“. Данная статья при этом рассматривает все возможные атрибуты, особенности и рекомендации по разметке звуков в тексте статей.
Звуки (<sound>) – объекты в теле статей, на место которых подставляется специальная иконка, при нажатии на которую происходит проигрывание определенного звукового файла. Под звуковым файлом в данном случае подразумевается содержащий звуковой файл контейнер, внутри которого по факту может быть звук в одном из следующих форматов:
- spx (сжатый speex кодеком исходный звуковой файл)
- wav
- mp3
- ogg
Предполагается, что доступ ко всем необходимым декодерам у приложения есть (speex поставляется вместе со словарным ядром).
Иногда требуется анимировать иконку озвучки во время воспроизведения – эта логика готовится на стороне приложения
Примеры звуков в статье:
<sound url="EN0218.spx" lang="enUK"></sound>
<sound dictid="55FA" listidx="1" key="table" />
Возможные атрибуты:
- url – содержит имя файла со звуковым файлом в формате .spx (контейнер для звуковых данных разных форматов), который нужно будет воспроизвести при клике в данном месте перевода
- lang – содержит строку, которая описывает диалект языка озвучки. На текущий момент может иметь следующие значения: enUS (американский английский), enUK (британский английский), enWR (world english, заимствованные в английский язык слова других языков). Перечень значений отдельным enum-ом не типизируется.
- dictid – наличие данного атрибута означает, что звуковой файл нужно искать во внешней sdc-базе, id которой является значением атрибута (id в атрибуте – 4-символьный, без расширения “sdc”). В этом случае значение параметра url (если оно указано) следует игнорировать. Звук в данном случае будет прикреплен к одному из слов в одном из списков внешней базы (см. “listidx”, “key”).
- listidx – содержит номер списка слов во внешней sdc-базе, в котором нужно искать звуковой файл. Имеет смысл только при наличии атрибута dictid
- key – содержит текстовый ключ для поиска записи в списке слов с номером listidx во внешней базе с идентификатором dictid (имеет смысл только при наличии атрибутов dictid и listidx). Т.о. для получения звукового файла из внешней базы, нужно открыть указанную базу, перейти в требуемый список слов и поискать слово в списке по ключу (звук будет прикреплен к записи списка). При формировании внешних баз предполагается, что ключ в тексте основной базы точно совпадает с записью в списке слов внешней базы
Хорошей практикой можно считать зашивание иконки озвучки внутрь самой базы (это позволяет избежать дублирования одних и тех же иконок на разных платформах + позволяет более точно согласовать размеры иконки с окружающей вёрсткой). Синтаксически для этого достаточно помещения тега иконки внутрь тега звука:
<div style="display:inline-block; vertical-align:middle; margin-right:5px; min-height:30px; margin-left:5px;">
<sound key="a.spx" lang="enUK" dictid="5555" listidx="0">
<img url="icons\audio_gb.svg" show_width="20" show_height="20" />
</sound>
</div>
Информация для разработчиков приложений
/// Получает вектор индексов озвучек текущего слова в текущем списке слов
ESldError GetCurrentWordSoundIndex(CSldVector<Int32> & aSoundIndexes);
/// Получает вектор индексов озвучек текущего слова в указанном списке слов
ESldError GetCurrentWordSoundIndex(Int32 aListIndex, CSldVector<Int32> & aSoundIndexes);
/// Получает готовую для проигрывания озвучку по индексу озвучки
ESldError PlaySoundByIndex(Int32 aSoundIndex, UInt8 aIsLast, UInt32* aStartPos, UInt32 aExternFlag = 0);
/// Получает готовую для проигрывания озвучку по индексу озвучки с указанием с какого места проигрывать.
ESldError PlaySoundByIndexWithPosition(Int32 aSoundIndex, UInt8 aIsLast, UInt32* aStartPos,UInt8 aBeginPlay,UInt32 aExternFlag = 0);
/// Получает готовую для проигрывания озвучку по соответсвующему ей тексту из текущего листа
ESldError PlaySoundByText(const UInt16 *aText, UInt32 *aResultFlag);
/// Возвращает информацию об озвучке
ESldError GetSoundInfo(Int32 aSoundIndex, TSoundElement* aSoundInfo);
/// Индекс озвучки, обозначающий, что озвучки нет
#define SLD_INDEX_SOUND_NO