|
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, компьютер - кампйутер.
Другие статьи номера:
Похожие статьи:
В этот день... 1 января
SibNews #08,
Woot! #01,
Spectrum Magazine #01,
ACNews #25,
Psychoz #14,
ACNews #14,
Last 128 #08,
Last 128 #06,
Last 128 #05,
Last 128 #04,
Last 128 #03,
Last 128 #02,
Last 128 #09,
Last 128 #3.5,
Last 128 #8.025,
Sinclair Club #05,
Last 128 #M!R 01,
Fantadrom #01,
Buzz #20,
Last 128 #01,
DonNews #13,
Nicron #120,
Promised Land #01,
Inferno #01,
Marazm #25,
Ultimathum #01,
Marazm #21,
Hooy Mag #02,
KrNews #11,
Marazm #22,
Marazm #23,
ZX Football 2000 #01,
Codemania #01,
Always #03,
Bugs #02,
IzhNews #08,
Virtual Worlds #01,
Listok #04,
Scenergy #02,
Flash Info #18,
Marazm #16,
Marazm #17,
Zed #01,
Balagan #02,
ZX Format #08,
ZX Power #03,
Shock #01,
Impulse #02,
Deja Vu #03,
ZX Club #08,
ZX Club #06,
Numberology #01,
Marazm #13,
Marazm #12,
Marazm #14,
Gorodok #02,
Zodiac #01,
Marazm #15,
Deja Vu #07,
Marazm #11,
Deja Vu #07,
Playboy #03,
Crazy News #2,
Crazy News #4,
ZX Light #01,
Crazy News #5,
Playboy #02,
ZX News #03,
ZX Review #1-2,
Read Me #02,
Crazy News #3,
Nicron #13,
Read Me #01,
Public Spirit #01,
Faultless #06,
Faultless #05,
ZX Software #01,
Stump #04,
Speccy #07,
Возраждение #0,
Speccy #03,
On-Line #17,
Scene+ #01,
Welcome Press #01,
ZX Konig #04,
Adventurer #01,
Faultless #05,
Faultless #04,
Di Halt #01,
Faultless #01,
Playboy #01,
Crazy News #1,
Faultless #03,
Pioneer #03,
Sinclair Town #02,
ZX Magazine #01,
Eldorado #01,
ZX Magazine #02,
Spectron #01,
ZX News #01,
ZX Konig #02,
200 #W,
Welcome Press #00,
Dune #07,
Subliminal Extacy #01,
Subliminal Extacy #02,
ZX Konig #01,
Subliminal Extacy #00,
Muchomor #01,
Spectrofon #01,
ZX Revija #02,
Outlet #01,
Outlet #1-3