Полное описание подготовки звуков для словаря (с базовым синтаксисом) находится в статье “Подготовка звуковых данных“. Данная статья при этом рассматривает все возможные атрибуты, особенности и рекомендации по разметке звуков в тексте статей.

Звуки (<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

If you have found a spelling error, please, notify us by selecting that text and pressing Ctrl+Enter.