Радио-86РК/Радио 12-87/Программный синтезатор речи
Данный материал защищён авторскими правами!
Использование материала заявлено как добросовестное, исключительно для образовательных некоммерческих целей. Автор: А. АНДРЕЕВ |
Наши постоянные читатели, видимо, помнят цикл статей «Музыка нулей и единиц», в которых рассказывалось о цифровой звукозаписи. В этом номере мы предлагаем владельцам «Радио-86РК» на практике убедиться в способностях компьютеров к обработке звуковых сигналов. А о том, как "тому «научить» компьютер, будет рассказано в другой раз.
Вопрос расширения возможностей радиолюбительских микро-ЭВМ, наверное, никогда не перестанет интересовать их создателей. Проведение расчетов, помощь в обучении детей основам математики, игры с домашним компьютером — все это стало уже обычным. А что еще могут микро-ЭВМ?
3000 F5 16 09 3А 02 8В 0F 0F 0F 0F E6 01 0F 5F CD 45 3010 30 3А 02 80 0F 0F 0F 0F E6 01 C2 25 30 7В 17 15 3020 C2 0D 30 F1 C9 57 C3 1D 30 16 08 7B 17 CD 45 30 3030 DA 3F 30 F5 3E 00 32 02 80 F1 15 C2 2C 30 C9 F5 3040 3E FF C3 36 30 C5 F5 E5 2A 91 30 01 04 00 7E 23 3050 7E 23 0В 79 B0 C2 4E 30 22 91 30 E1 F1 С1 C9 21 3060 00 10 01 00 10 3E 80 32 08 E0 CD 00 30 73 23 0В 3070 79 B0 C2 6A 30 C3 00 F8 21 00 10 01 00 10 3E 80 3080 32 08 E0 5E CD 29 30 23 0В 79 B0 C2 83 30 C3 00 3090 F8 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
Вниманию читателей предлагается один из способов «научить» машину запоминать, а потом воспроизводить фрагменты человеческой речи с помощью чисто программных средств. Речевые сигналы обрабатываются в «синтезаторе» программой, размещаемой в ОЗУ компьютера. Их ввод и вывод осуществляются через интерфейс связи с магнитофоном, усилитель записи которого используется для усиления, а встроенный громкоговоритель — для воспроизведения синтезируемых сигналов.
Для работы с программным «синтезатором» речи коды программы обслуживания, приведенные в таблице, необходимо занести в ОЗУ микро-ЭВМ.
Программа позволяет запомнить, а потом воспроизвести произвольное число раз речевое сообщение длительностью около 4 с. Для размещения массива закодированной речи в ОЗУ компьютера отведена область объемом 4 Кбайт, расположенная по адресам 1000—1FFF. Массив речи заносят в ОЗУ с noмощью микрофона, подключенного к работающему в режиме записи магнитофону, линейный выход которого соединен с входом чтения интерфейса микро-ЭВМ. Для этого, запустив программу ввода речи директивой МОНИТОРА G305F, произносят перед микрофоном любую фразу длительностью около 4 с (время вполне достаточное, чтобы поздравить компьютер с Новым годом).
Воспроизводят записанную речь, запустив программу вывода директивой МОНИТОРА G3078. Для усиления речевых сигналов, поступающих с выхода интерфейса микро-ЭВМ, также используется усилитель записи магнитофона, а для их воспроизведения — его встроенный громкоговоритель (оказывается, компьютеру не чужда «этика» — на поздравление он отвечает поздравлением).
«Синтезированная» программой речь, конечно, сильно искажена, однако подбором уровня усиления сигнала с микрофона при записи и «завала» высших частот регулятором тембра магнитофона при воспроизведении можно добиться вполне приемлемых результатов.
Что компьютеры способны синтезировать речь — известно, вероятно, многим читателям журнала, но далеко не все из них могут похвастаться тем, что слышали эту речь собственными ушами. В канун Нового года число таких «счастливчиков» существенно увеличилось — к ним присоединились владельцы компьютера «Радио-86РК», думаем, что эксперимент по синтезу речи, предложенный в последнем номере прошлого года, вызвал у наших читателей желание его продолжить. Поэтому, как и было обещано, в этом номере будет рассказано, как «РК» приобрел дар речи. Тем же, кто решит более глубоко изучить этот вопрос, рекомендуем прочесть книгу Джона Кейтера «Компьютеры — синтезаторы речи», выпущенную издательством «Мир» в 1985 году.
Рассмотрим несколько подробнее использованный в программном «синтезаторе» метод кодирования речи с использованием частотно-импульсной модуляции (ЧИМ). Он сходен с кодированием по методу дельта модуляции и заключается в запоминании одного бита данных при каждой выборке сигнала.
Для этого речевой сигнал дискретизируется по уровню с частотой около 8000 выборок в секунду. Каждая выборка является бинарной величиной: если входной сигнал больше порога срабатывания компаратора D21, то ей присваивается единичное значение, если меньше — нулевое. Получающийся при этом поток прямоугольных импульсов компонуется в байты и заносится в ОЗУ компьютера.
При воспроизведении прямоугольный сигнал усиливается и одновременно интегрируется элементами усилителя воспроизведения, после чего воспроизводится громкоговорителем магнитофона.
Основное достоинство такого способа «синтеза» речи — минимальный объем необходимых для его реализации аппаратных средств, однако за это достоинство приходится расплачиваться невысоким качеством «синтезируемой» речи.
Рассмотрим модули, из которых состоит программа «синтезатора» (см. таблицу).
; подпрограмма INBYT возвращает в регистре Е микропроцессора ; восемь последовательных выборок речевого сигнала. Младший ; бит соответствует более ранней по вpемeни выборке. PORT$C SET 8002Н ; Адрес парта ввода сигнала в РК INBYT: PUSH PSW ; Сохранение содержимого (А) в стеке MVI D,9 ; Число бит в байте +1 в счетчик бит LDA PORT$C ; Ввод из порта чтения (компаратор RRC ; в компьмтере подключен к разряду D4 RRC ; порта ввода). RRC RRC ; Теперь бит отсчета - в разряде D0 ANI 1 ; Выделить только информационный бит. RRC ; Подготовка следующего бита IM1: MOV Е,А CALL TIME ; Задержка между выборками сигнала LDA PORT$C ; ввод из порта очередной выборки RRC RRC RRC RRC ; Информационный бит ANI 1 ; Выделить только информационный бит,СУ=0 JNZ IМЗ ; Установить CY, если он не равен нулю. IM2: MOV А,Е ; Информационный бит - в аккумулятор RAL ; Сдвинуть CY (информ. бит!) в аккумулятор DCR D ; Скорректировать счетчик бит JNZ IМ1 ; Если не все 8 бит считаны, продолжить POP PSW RET IM3: STC JMP IM2 ; Переход на сдвиг бита =1. ; Подпрограмма OUTBYTE выводит из микроЭВМ восемь выборок ; речевого сигнала, записанных в регистре Е микропроцессора. ; Более ранней по времени выборке соответствует младший бит ; информации. OUTBYT: PUSH PSM MVI D,8 ; регистр D используете я как счётчик бит MOV А,Е OM2: RAL ; Сдвинуть текущий бит в CY CALL TIME ДС ОМ1 PUSH PSU ; Сохранить текущий информационный бит XRA А ; Обнулить аккумулятор, в частности, D0 ОМ4: БТА РОРТ$С ; Выдать данный бит в выходной порт OM3: POP PSM ; Восстановить текущий информациооный байт DCR D ; Все в бит выданы? JNZ ОМ2 ; Нет, продолжить выдачу бит. POP PSW ; RET ; Конец вывода байта OM1: PUSH PSH MVI А,0FFН ; Установить все выдаваемые биты в "1" JMP ОМ4 ; Подпрограмма TIME обеспечивает задержку между отдельными выборками ; сигнала при вводе и выводе. Одновременно служит для регенерации ; ОЗУ компьмтера, так как при работе INBYT и OUTBYT видеоконтроллер ; остановлен! В скобках указано число машинных тактов, ; необходимых для выполнения каждой команды. TIME: PUSH PSM ; (11 T) Сохранить регистры проиесора PUSH I ; (11 T) PUSH H ; (11 T) LHLD REF ; (16 T) Загруаить указатель адреса регенерации LXl B,CONST ; (10 T) регистр В - счетчик задержки MT1: MOV A,M ; (7 T) Произвести одно обращение по адресу INX H ; (5 T) регенерации MOV A,M ; (7 Т) и по следующему адресу INX Н ; (5 T) DCR В ; (5 T) Декрементировать счетчик задержки MOV А,В ; (5 T) ORA С ; (4 T) Содержимое счетчика равно нулю ? JNZ MT1 ; (17 T/11 T) Hет, продолжить цикл SHLD REF ; (16 T) Запомнить указатель адреса регенерации POP Н ; (11 Т) Восстановить содержимое регистров POP В ; (11 Т) процессора POP PSW ; (11 Т) RET ; (10 Т) Выход из подпрограммы задержки ; Праграмма INRAM ввoдит в указанную область ОЗУ ; компьютера массива отсчетов сигнала заданной длины (запись речи) DМА SET 0F808Н ; Адрес контроллера ПДП INRAM: LXI H,NATCH ; НАЧАЛЬНЫЙ адрес записываемого МАССИВА LXI D,DEL ; ДЛИНА записываемого МАССИВА в байтах. MVI А,80Н ; Выключение контроллера дисплея 8ТА DMA ; НА время ЗАПИСИ звука INM1: CALL INBYT ; Прием восьми выборок СИГНАЛА MOV М,Е ; ЗАПИСЬ подготовленного БАЙТА в ОЗУ и INX Н ; указателя на элемент МАССИВА DCX В ; коррекция СЧЁТЧИКА байт MOV А,B ; МАССИВ ЗАПОЛНЕН ? ORA С JNZ INM1 ; Нет, продолжим запись JMP MONITOR ; Выход в монитор с ЗАПУСКОМ видеоконтроллера ; ПРОГРАММА OUTRAM выводит массив, записанный программой INRAM ; в виде последовательности отсчётов речевого СИГНАЛА ; ("воспроизведение речи") OUTRAM: LXI Н, MATCH ;НАЧАЛЬНЫЙ адрес МАССИВА отсчетов LXI В, DEL ; ДЛИНА выводимого массива в байтах MVI А,80Н STA DMA OUTM1: MOV Е,М ; Текущий байт выборок в аккумулятор CALL OUTBYT ; ВЫДАЧА 8 выборок СИГНАЛА НА выход INX Н DCX B ; уменьшить счетчик байт MOV A,B ORA С ; МАССИВ выдан полностью? JNZ OUTM1 ; Нет, продолжить выдачу JMP MONITOR END
Требующийся для синтеза речевого сообщения объем ОЗУ (при темпе 8000 выб./с) равен 1 Кбайт на секунду звучания.
В заключение хотелось бы остановиться на возможностях повышения качества «синтезируемой» речи.
Компаратор D21 компьютера «Радио-86РК» не имеет гистерезиса и настроен достаточно близко к нулевому уровню — отсюда дополнительные призвуки в «синтезированной» речи, появляющиеся, а результате переключения компаратора шумовыми и фоновыми сигналами при вводе. Повышение порога срабатывания компаратора и введение положительной обратной связи для создания гистерезиса улучшают условия процесса квантования и очищают речевой сигнал от значительной доли шумов.
Дополнительного улучшения качества «синтезируемой» речи можно добиться включением ФНЧ с частотой среза около 4кГц в тракт усиления сигнала, как при вводе, так и при выводе. Возможна также и чисто программная обработка «массива речи», однако этот метод требует развитых программных средств обработки такой информации и в настоящее время еще проработан не полностью.
А. АНДРЕЕВ, г. Москва