STM32 Синтезатор речи “Элиза”

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

Почему “Элиза”? Во-первых, потому что произносит слова женским голосом. Во-вторых, Элиза – это первое, что пришло в голову.

Итак, что же умеет делать Элиза.

Её словарный запас определяется библиотекой, которая располагается на карте памяти. Чем больше библиотека, тем больше словарный запас. На данный момент библиотека содержит более четырехсот слов, что на порядок превышает словарный запас Эллочки-Людоедки из произведения Ильфа и Петрова.

Эти четыреста слов занимают примерно 10 мегабайт памяти. Я применил карту памяти на 2 гигабайта, поэтому словарь можно значительно расширить.

Планирую в дальнейшем использовать это устройство в качестве “звукового сопроцессора”, который можно подключить к основному устройству через USART. На данный момент остановился на скорости обмена 9600 Бод. Используется следующий протокол связи с синтезатором:

  1. Проверка связи. Устройство посылает синтезатору символ ‘?’. Если синтезатор исправен,  то оно посылает в ответ символ ‘$’.
  2. Воспроизведение текста. Для этого устройство отсылает синтезатору воспроизводимую строку, которая начинается символом ‘{’, а заканчивается символом ‘}’. Фигурные скобки нужны для определения начала и конца строки. Приняв символ ‘}’, синтезатор ответит символом ‘#’, что указывает на начало воспроизведения. По окончанию воспроизведения синтезатор ответит символом ‘$’.

Слова в отправляемой строке нужно писать кириллицей, регистр значения не имеет. Буква “ё” синтезатором воспринимается как “е”.

Слова нужно разделять пробелами. Если поставить более одного пробела, то добавится пауза между словами, которая вычисляется по формуле: пауза = 100мс * (количество пробелов – 1).

Точка после слова добавит паузу 700мс, тире – 400мс.

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

Если перед цифрой стоит символ “-“ (минус) без пробелов, то он будет произнесён. Например, “-123” произнесётся “минус сто двадцать три”.

Если в строке встречается запись формата хх:хх (где х число 0..9), то она воспроизводится как время. Например, запись “Сейчас 12:34” будет воспроизведена так: “сейчас двенадцать часов тридцать четыре минуты”.

Программа написана в кокосе. Проект можно скачать по ссылке внизу.

Для воспроизведения строки используется функция ‘play’. При работе с синтезатором через усарт, эта функция воспроизводит строку, которую приемник помещает в буфер buff, в который можно принять до 127 символов.

Функцию ‘play’ можно использовать и без использования USARTa. Делается это так: play(“Добрый день”);

Чтобы знать, есть ли нужное слово в библиотеке, я написал программу “Elisa”. Она позволяет не только увидеть список слов, но и услышать их произношение. В папке с этой программой находится папка ‘lib’, которая содержит библиотеку слов. Содержимое это папки нужно скопировать на карту памяти, которая подключается к контроллеру. Обращаю внимание: скопировать нужно не папку, а её содержимое.

Теперь о “железе”. Программа написана для микроконтроллера STM32F100RB. Производительности этого контроллера вполне хватает для данной задачи. Тактовая частота 24MHz.

Для отладки я использовал отладочную плату STM32VL-DISCOVERY. Карту памяти подключил ко второму SPI. Для воспроизведения звука используется ЦАП. Схема подключения карты приведена ниже:

image

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

Параметры звуковых файлов: формат – WAVE; дискретизация — 44100, моно.

Скачать файлы можно здесь (обновлено 22.12.2012) :

Скачать файлы проекта

Скачать программу “Elisa”

Данную тему можно обсудить на форуме http://mycontroller.ru/forum/viewtopic.php?f=6&t=18

 

P.S.   Была у меня мечта – часы с боем. Может сделать электронную версию часов? Можно добавить тикание.

Комментарии (14) на “STM32 Синтезатор речи “Элиза””

  • Ant0n:

    Каким образом подключить динамик для воспроизведения звука?

    • kontroller:

      Через усилитель. Можно использовать для проверки компьютерные колонки.
      Планирую в дальнейшем использовать TDA7052A, чтобы можно было микроконтроллером громкость регулировать.
      Я для проверки подключил обычные наушники к выходу ЦАП через резистор в несколько сот Ом, чтобы не угрохать вывод. Для выхода ЦАПа по даташиту должна быть нагрузка 5 кОм

  • Юра:

    В Elisa есть выбор 8/16 бит аудиопотока, но при воспроизведении идут хрипы и время воспроизведения в 2 раза больше. Что не так?

    • kontroller:

      А какой у Вас аудиопоток — 8 или 16 ?
      Пока реализована возможность воспроизведения 8-ми разрядных данных.
      Я уже подготовил изменения для воспроизведения 16-ти разрядных данных.
      Оттестирую — тогда выложу пример для скачивания.

  • Sky:

    Простите, а под какую среду Ваши файлы проекта? Явно но Keil.

      • Sky:

        Уже качаю :) В который раз благодарю за сайт!
        Если в знак благодарности могу поделится своими скромными проектами на STM32(в основном с Глонасс) — дайте знать.

  • vrr:

    Хочу расширить, точнее добавить необходимые слова в библиотеку. Подскажи, пожалуйста, чем ты их генеришь. Спасибо.

  • vrr:

    Да, удалось вроде

  • vrr:

    Ага, спасибо. Поколупаюсь

  • vrr:

    Нашел еще одну говорилку http://aloys.narod.ru/demagog.htm, мож пригодиться.

Оставить комментарий

Spam Protection by WP-SpamFree