ZX Forum
#04
19 ноября 1997 |
|
Мир звуков Спектрума - глава 4.8: Синтезирование речи.
4.8. Синтезирование речи Синтезировать речь можно просто записы- вая и воспроизводя ее как любой другой звук с помощью подпрограмм из главы 4.6, но обычно действуют иначе. Сначала в ком- пьютер вводятся все фонемы определенного языка, затем у пользователя запрашивается фраза, и наконец, компьютер последователь- но воспроизводит входящие в нее фонемы. Этот способ позволяет значительно эконо- мить память и воспроизводить абсолютно лю- бые фразы. Вот программа, позволяющая Cпе- ктруму разговаривать: 10 CLEAR 25343: LET L=3 20 PRINT "Wait please..." 30 FOR A=25344 TO 25433: READ D: POKE A,D: NEXT A 40 FOR A=0 TO 25: POKE 25437,A*L+100 50 CLS: PRINT "Press any key, then say '";CHR$ (A+65);"'": PAUSE 0 60 RANDOMIZE USR 25344: NEXT A 70 CLS: INPUT "Enter phrase:"; LINE A$: PRINT A$ 80 FOR A=1 TO LEN A$ 90 IF A$(A)=" " THEN POKE 25433+A,32:NEXT A 100 IF A$(A)>="a" THEN LET A$(A)=CHR$(CODE A$(A)-32) 110 POKE 25433+A,(CODE A$(A)-65)*L+100: NEXT A: POKE 25433+A,0 120 RANDOMIZE USR 25406: GOTO 70 130 DATA 243,33,0,0,17,0,L,6,8,203,38,219,254,203,119,40, 2,203,198,16,244,35,27,122,179,32,236,251,201 140 DATA 243,33,0,0,17,0,L,62,7,6,8,230,239,203,6,48,2,246, 16,211,254,16,244,35,27,79,122,179,121,32,234,251,201 150 DATA 33,90,99,126,183,200,254,32,32,7,6,5,118,16, 253,24,8,50,32,99,229,205,29,99,225,35,24,231 Поясню некоторые строки: 30 - считываются в память программы в ко- дах; 40...60 - записываются фонемы с микрофо- на; 70 - ввод фразы; 80...110 - фраза заносится в память в специальном формате; 120 - вызывается подпрограмма воспроизве- дения; 130...150 - подпрограммы в кодах. После запуска программа попросит немно- го подождать, считывая кодовую часть, за- тем Вы должны будете последовательно про- изнести в микрофон 26 фонем. После этого Вы можете вводить любые фразы и наслаж- даться их звучанием. При вводе этих фраз допустимы прописные и строчные латинские буквы и пробелы. Как будут звучать все ос- тальные символы, никому неизвестно. Ни в коем случае не стоит вводить знак "@", иначе программа просто "зависнет". Эта программа написана как пример, поэ- тому не содержит дополнительных сервисных возможностей (например, изменение отдель- ной фонемы), но Вы свободно можете их до- бавить. Для изменения длительности отдельной фонемы смените в десятой строке значение переменной L (в данном случае оно может быть от 1 до 6). Если Вам не удалось с первого раза произнести все фонемы с удовлетворительным качеством, то можете попытаться еще раз, остановив программу с помощью клавиши BREAK и выполнив команду GOTO 40. Когда фонемы будут записаны, Вы можете сохранить их на ленте, набрав команду SAVE "name" CODE 25600,6656*L (число 6656 получилось путем умножения количества фонем (26) на 256). Лучше всего, если перед этим блоком будет записана вышеприведенная программа со следующей строкой: 35 LOAD "name" CODE 25600: GOTO 70 Записать эту программу можно с помощью ко- манды SAVE "SPEAKER" LINE 10. К сожалению, 26 фонем - это маловато даже для английского языка, не говоря уже про русский. Их количество можно, конечно, увеличить, но при этом увеличится и объем занимаемой ими памяти. Тут уж ничего не сделаешь. Если Вы хотите, чтобы Ваш ZX-Spectrum говорил по-русски, то Вы должны подклю- чить русский шрифт (подробнее см. в [1]) и увеличить число фонем. А также сменить все сообщения, выводимые на экран. Количество русских фонем можно зна- чительно сократить, если не использовать мягкие согласные (в компьютерном исполне- нии их мягкость практически не слышна) и гласные "Е","Е","Ю" и "Я" (вместо них вво- дите "Й" и, соответственно, "Э","О","У" и "А"). Твердый знак также заменяйте буквой "Й". И в заключение один совет. Гораздо при- ятнее слышать нормальную человеческую речь, чем слова, выговариваемые в соответ- ствии с правилами грамматики. Поэтому вво- дите слова как слышите: sinclair - sink- ler, компьютер - кампйутер.
Другие статьи номера:
Похожие статьи:
В этот день... 21 ноября