Есть ли какая-нибудь программа преобразования текста в речь, которая будет работать на 8- или 16-битном процессоре?
Мне интересно, были ли какие-либо из древних алгоритмов преобразования текста в речь в стиле 1980-х годов были спасены от забвения и все еще доступны. Было бы неплохо услышать этот винтажный звук, похожий на то, что было в War Games.
Ответы
"Speech" от Superior Software был чисто программным синтезатором речи, работавшим на BBC Micro (который использовал процессор 6502A с тактовой частотой 2 МГц, поэтому имел немного большую вычислительную мощность, чем типичные 8-битные машины); он подробно описан на этой странице , где говорится, что он был вдохновлен аналогичными программами на C64 и Spectrum, которые достигают этого с использованием звуковых чипов (так что Spectrum должен был быть версией 128K, поскольку исходные версии 16 / 48K не имели звукового чипа) но эта система просто использует прямое управление встроенным динамиком для воспроизведения звука.
Во-первых, есть серьезный нюанс. Большинство знаковых ранних синтезаторов голоса не были чисто программными системами. Например, классическая система DECTalk , известная как голос покойного Стивена Хокинга, представляла собой дискретное устройство, подключенное через последовательный порт RS-232. По сути, это закрытый ящик, который отправляет текст ASCII и генерирует звук на уровне строки. Внутренне я смутно припоминаю, что читал, что это смесь универсального процессора с выделенными процессорами сигналов и аппаратным обеспечением для синтеза звука. В Ti LPC синтез речи чипов , как он используется в орфографии говорить и продукты, были сходными. Микросхемы могут синтезировать основные фонемы и слова, а микроконтроллер или микропроцессор должен выполнять анализ текста и управлять микросхемой синтеза.
Дело в том, что классическим 8/16-битным процессорам просто не хватает мощности, чтобы хорошо выполнять программный синтез речи, по крайней мере, в реальном времени. Тем не менее, было несколько достойных попыток. SAM (Software Automatic Mouth) был одним из первых и одним из самых популярных. Он работает на Commodore 64 и других машинах. Умный хакер недавно перенес алгоритм на Javascript, чтобы вы могли услышать его в своем браузере .
Существовала русская программа преобразования текста в речь, написанная для Elektronika BK-0010 в начале 1980-х годов, длина которой составляла 023500 байт == 10048, которая упоминалась в списке прикладных программ для BK-0010 под названием ГОВОРУН (" Болтун », по мотивам говорящей птицы из детской книги / мультфильма « Тайна третьей планеты » ).
Качество звука было едва различимо для неподготовленного уха, отчасти потому, что в компьютере был только 1-битный управляемый зуммер, но, как сообщается, он был написан по заказу Всесоюзного общества слепых, и для этого потребовались члены жертвы. у аудитории около 10-15 минут, чтобы привыкнуть к нему и начать продуктивно использовать.
Хитрость заключалась в том, чтобы записать фонемы с использованием как можно более узкой полосы частот, необходимой для маргинального распознавания, и кодировать каждую фонему, используя как можно более низкую частоту для этой конкретной фонемы. В результате этого процесса некоторые фонемы, такие как S и F, звучат примерно одинаково, что позволяет сэкономить больше памяти, складывая их.
Излишне говорить, что был режим правописания фонетического алфавита, переключаемый нажатием клавиши, а также клавиши «повторить последнее слово» и / или «повторить последнее предложение».
68000 - это 16-битный процессор? :) Для некоторых это так, и поэтому, скажем , с 1985 года для Commodore Amiga рассчитывает. Его можно найти на диске Workbench. Дополнительную информацию можно найти в интерфейсе narrator.device в вики AmigaOS:https://wiki.amigaos.net/wiki/Narrator_Device
А вот паровые окорока, воссозданные с помощью Say :https://www.youtube.com/watch?v=Rx6mJ4XY0oQ
видеть:
- CZ + SK ZX SW архив
Есть движки TTS для ZX Spectrum (1 бит цифровой звук, без ЦАП, без FPU, без инструкций mul / div, ~ 3,5 МГц 8-битный процессор Z80):
Кекал 1.0
очень простой asm (переносимый на C / C ++, см. ссылку ниже), очень низкие требования к процессору. Не очень хорошего качества
Кекал 2.3
значительно улучшенное качество
ZX Fone
немного хуже, чем Кекал 2.3
Хласова программа
этот очень хорошего качества (намного лучше, чем Kecal 2.3, слова легко узнаются). Это всего 801 байт ассемблерного кода.
также см:
- SE / SO: Может ли Arduino определить температуру в помещении с помощью голосового вызова с помощью sim900?
[Edit1] Порт C ++ программы Hlasový
Я с радостью сообщаю, что я успешно разобрал и портировал потрясающий древний движок TTS из Voicesoft на C ++. Для простоты я добавил звуковой заголовок API, void sound_out(bool on);
который необходимо реализовать, чтобы его можно было использовать. Он должен просто добавить сэмпл в звуковой буфер (или синхронизировать по времени и выводить на звуковой порт). Вот портированный код:
//---------------------------------------------------------------------------
//--- ZX Hlasovy program Voicesoft 1985 -----------------------------------
//--- ported to C++ by Spektre ver: 1.000 -----------------------------------
//---------------------------------------------------------------------------
#ifndef _speech_h
#define _speech_h
//---------------------------------------------------------------------------
// API:
void sound_out(bool on); // you need to code this function (should add a sample to sound output)
void say_text(char *txt); // say null terminated text, "a'c'" -> "áč"
//---------------------------------------------------------------------------
// internals:
void say_char(char chr); // internal function for single character (do not use it !!!)
void say_wait(WORD ws); // internal wait (do not use it !!!)
//---------------------------------------------------------------------------
// vars:
bool _sound_on=false; // global state of the reproductor/sound output
//---------------------------------------------------------------------------
// config: (recomputed for 44100 Hz samplerate)
const static BYTE t_speed=5; // [samples] speech speed (pitch)
const static WORD t_pause=183; // [samples] pause between chars
const static WORD t_space=2925; // [samples] pause ` `
const static WORD t_comma=5851; // [samples] pause `,`
//---------------------------------------------------------------------------
// tables:
const static BYTE tab_char0[52]= // 0..25 normal alphabet A..Z
{ // 26..51 diacritic alphabet A..Z
0x00,0x02,0x06,0x0a,0x0e,0x10,0x12,0x16,0x1a,0x1c,0x22,0x26,0x2a,0x2e,0x32,
0x34,0x38,0x42,0x48,0x4a,0x4e,0x50,0x50,0x56,0x1a,0x5c,0x64,0x66,0x70,0x74,
0x7a,0x7c,0xc2,0x84,0x86,0xc2,0xc2,0xc2,0x88,0x8c,0x92,0x94,0xc2,0x9e,0xa6,
0xa8,0xae,0xb0,0xc2,0xc2,0x86,0xbc
};
const static BYTE tab_char1[196]=
{
0x36,0x81,0x34,0x19,0x31,0xab,0x18,0x19,0x91,0xc3,0x34,0x19,0x31,0xe0,0x36,
0x84,0x92,0xe3,0x35,0x19,0x51,0x9c,0x31,0x31,0x34,0x96,0x36,0x87,0x33,0x3a,
0x32,0x3d,0x32,0xc0,0x18,0x19,0x51,0x9c,0x33,0x22,0x31,0xb1,0x31,0x31,0x36,
0xa5,0x31,0x31,0x36,0xa8,0x36,0x8a,0x18,0x19,0x31,0xab,0x18,0x19,0x51,0x1c,
0x34,0x31,0x32,0x34,0x32,0xb7,0x22,0x10,0x13,0x19,0x21,0xae,0x92,0xc3,0x18,
0x19,0x31,0xe0,0x36,0x8d,0x34,0x31,0x32,0x34,0x32,0xb7,0x18,0x19,0x71,0x1c,
0x92,0xc3,0x32,0x31,0x32,0x43,0x32,0x44,0x32,0xc5,0x3f,0x81,0x34,0x19,0x31,
0x2b,0x33,0x3a,0x32,0x3d,0x32,0xc0,0x18,0x19,0x91,0xd3,0x33,0x19,0x71,0x6d,
0x32,0x93,0x3e,0x84,0x92,0x63,0x33,0x3a,0x32,0x3d,0x32,0xc0,0x92,0xf3,0x3e,
0x87,0x31,0x31,0x36,0x25,0x31,0x31,0x35,0x25,0x32,0x93,0x3e,0x8a,0x18,0x19,
0x31,0x2b,0x33,0x3a,0x32,0x3d,0x32,0xc0,0x13,0x19,0x32,0x60,0x13,0x19,0x71,
0xdd,0x92,0xd3,0x18,0x19,0x71,0x6d,0x32,0x93,0x3e,0x8d,0x34,0x31,0x32,0x34,
0x32,0x37,0x33,0x3a,0x32,0x3d,0x32,0xc0,0x32,0x53,0x32,0x54,0x32,0xd5,0x1a,
0x99
};
const static BYTE tab_char2[262]=
{
0x1a,0x99,0xe1,0xc3,0xe1,0xc7,0x8f,0x0f,0xf8,0x03,0x0f,0x07,0xc1,0xe3,0xff,
0x40,0x17,0xff,0x00,0x03,0xf8,0x7c,0xc1,0xf1,0xf8,0x03,0xfe,0x00,0x7f,0xfc,
0x00,0x03,0xf8,0x0f,0x09,0xf1,0xfe,0x03,0xef,0x40,0x17,0xff,0x00,0x03,0xe1,
0x5c,0x35,0xc5,0xaa,0x35,0x00,0x00,0x00,0x00,0x00,0x00,0x3e,0x8e,0x38,0x73,
0xcf,0xf8,0x78,0xc3,0xdf,0x1c,0xf1,0xc7,0xfe,0x03,0xc0,0xff,0x00,0x00,0xff,
0xf8,0x00,0x7f,0xf8,0x03,0xff,0xf0,0x01,0xff,0xe0,0x03,0xaa,0xca,0x5a,0xd5,
0x21,0x3d,0xfe,0x1f,0xf8,0x00,0x00,0x1f,0xff,0xfc,0x20,0x00,0x00,0x03,0xff,
0xff,0x08,0x79,0x00,0x02,0xff,0xe1,0xc7,0x1f,0xe0,0x03,0xff,0xd0,0x01,0xff,
0xf0,0x03,0x7f,0x01,0xfa,0x5f,0xc0,0x07,0xf8,0x0f,0xc0,0xff,0x00,0x42,0xaa,
0xa5,0x55,0x5a,0xaa,0xaa,0x5a,0xa5,0x5a,0xaa,0x55,0x55,0xaa,0xaa,0xa5,0x55,
0xaa,0x5a,0xaa,0xa5,0x55,0xaa,0xaa,0xa5,0x55,0xaa,0xaa,0x55,0xa5,0xa5,0xaa,
0xa5,0xb7,0x66,0x6c,0xd8,0xf9,0xb3,0x6c,0xad,0x37,0x37,0x66,0xfc,0x9b,0x87,
0xf6,0xc0,0xd3,0xb6,0x60,0xf7,0xf7,0x3e,0x4d,0xfb,0xfe,0x5d,0xb7,0xde,0x46,
0xf6,0x96,0xb4,0x4f,0xaa,0xa9,0x55,0xaa,0xaa,0xa5,0x69,0x59,0x9a,0x6a,0x95,
0x55,0x95,0x55,0x6a,0xa5,0x55,0xa9,0x4d,0x66,0x6a,0x92,0xec,0xa5,0x55,0xd2,
0x96,0x55,0xa2,0xba,0xcd,0x00,0x66,0x99,0xcc,0x67,0x31,0x8e,0x66,0x39,0xa6,
0x6b,0x19,0x66,0x59,0xc6,0x71,0x09,0x67,0x19,0xcb,0x01,0x71,0xcc,0x73,0x19,
0x99,0xcc,0xc6,0x67,0x19,0x9a,0xc6,
};
const static BYTE tab_char3[5]={ 0x00,0x2e,0x5a,0x5e,0xfe };
//---------------------------------------------------------------------------
void say_text(char *txt)
{
WORD hl;
BYTE a,b,c;
for (b=0xBB,hl=0;;hl++) // process txt
{
a=b; // a,c char from last iteration
c=b;
if (!a) break; // end of txt
b=txt[hl]; // b actual char
if ((b>='a')&&(b<='z')) b=b+'A'-'a'; // must be uppercase
a=c;
if ((a>='A')&&(a<='Z'))
{
// handle diacritic
if (a!='C'){ a=b; if (a!='\'') a=c; else{ a=c; a+=0x1A; b=0xBB; }}
else{
a=b;
if (a=='H'){ a+=0x1A; b=0xBB; }
else{ if (a!='\'') a=c; else{ a=c; a+=0x1A; b=0xBB; }}
}
// syntetize sound
say_char(a);
continue;
}
if (a==',')say_wait(t_comma);
if (a==' ')say_wait(t_space);
}
}
//----------------------------------------------------------------------
void say_wait(WORD ws)
{
for (;ws;ws--) sound_out(_sound_on);
}
//----------------------------------------------------------------------
void say_char(char chr) // chr = < `A` , `Z`+26 >
{
WORD hl,hl0,cy,cy0;
BYTE a,b,c,ws;
hl=tab_char0[chr-'A'];
for (;;)
{
c =tab_char1[hl ]&0x0F;
c|=tab_char1[hl+1]&0x80;
for (;;)
{
a=tab_char1[hl];
a=(a>>5)&7;
cy=a&1;
hl0=hl;
if (a!=0)
{
b=tab_char3[a];
hl=hl0;
a=tab_char1[hl+1];
hl0=hl;
cy0=(a>>7)&1;
a=((a<<1)&254)|cy;
cy=cy0;
hl=a;
a=0x80;
for (;;)
{
_sound_on=(a&tab_char2[hl]);
for (ws=t_speed;ws;ws--) sound_out(_sound_on);
b--;
if (!b) break;
cy=a&1;
a=((a>>1)&127)|(cy<<7);
if (!cy) continue;
hl++;
}
}
a^=a;
say_wait(t_pause);
c--;
a=c&0x0F;
hl=hl0;
if (a==0) break;
}
cy0=(c>>7)&1;
a=((c<<1)&254)|cy;
cy=cy0;
if (cy) return;
hl+=2;
}
}
//---------------------------------------------------------------------------
#endif
//---------------------------------------------------------------------------
Он не использует никаких библиотек, файлов или чего-то еще ... Если в вашей среде их нет, BYTE,WORD
используйте unsigned int
вместо этого ... Я пробовал его с частотой дискретизации 44100 Гц на ПК, и звук превосходит любой другой TTS, который я пробовал на протяжении многих лет.
Звук неплохой даже на AVR32 (правда, нужен нормальный репродуктор вместо маленьких гудков).
Если вам интересно, как это работает, посмотрите это:
- Понять / изменить простой (но хорошего качества) движок TTS
Для этого можно найти гораздо больше углубленного анализа (до последнего бита данных) и гораздо больше дидактического кода и данных.
Вот небольшая демонстрация win32 / waveout для тестирования, просто не забудьте написать текст фонетически ... получайте удовольствие:
- win32 порт TTS
Он отвечает на эти клавиши:
[enter ]
отправит текст из поля редактирования в TTS[up arrow]
вернет последнюю строку в поле редактирования[escape ]
очищает поле редактирования
Конечно, была система речи Acorn для BBC Micro.
Для этого потребовалось установить два чипа Texas Instruments под клавиатурой, поэтому это не было чисто программным решением.

В отличие от большинства других ответов, он использовал ввод фонемы, а не чистый текст, но это означало, что он давал гораздо более четкий и понятный звук, чем многие из его конкурентов.
Когда-то я использовал его, чтобы подавать сигналы тревоги в настройках автоматизации процессов. Было сочтено, что гораздо безопаснее иметь такой сигнал, как « Crane A Descending» или «Crane B Ascending», чем иметь ряд различных сигналов, которые все забыли, какой из них был.
В нем широко использовался оцифрованный голос Кеннета Кендалла , ведущего новостей BBC в то время. Он также появился в фильме « 2001: Космическая одиссея» , сыграв программу чтения новостей BBC.
Еще одна такая программа начала 80-х - Software Automatic Mouth . Еще у меня были смутные воспоминания о демо-версии The Voice от Muse Software для Apple] [e. («С Рождеством Христовым от Санты и голос Музы…»)
Texas Instruments TI-99 / 4A может преобразовывать текст в речь, если у вас есть картридж Terminal Emulator II и твердотельный синтезатор речи. (Более подробную информацию о последнем можно найти в руководстве .)

Для Microbee (z80) 1980-х годов был аппаратный модуль под названием «Bee Talker», который подключался к параллельному порту. Он выглядит почти так же, как блок «Бетховен» на этом изображении (виден рядом с «клавиатурой»), за исключением того, что он был помечен как «Beetalker»:

Он имел простой программный интерфейс преобразования текста в речь, который поставлялся с модулем. Все, что вы набираете на консоли, каким-то странным образом преобразуется в речь. Я не помню точно, что сработало, но иногда приходилось делать фонетические ошибки в слове, чтобы получить желаемый результат.
Модуль был повторно выпущен, если вы захотите подключить его к Arduino или чему-то еще.
РЕДАКТИРОВАТЬ: Наконец-то нашел лучшее изображение:

Вы можете найти различные воплощения синтезатора формант, лежащего в основе DECTalk, здесь.
Сомневаюсь, что на 8-битном процессоре можно было бы получить удовлетворительные результаты. 16-битный, да (хотя вам может потребоваться переписать код с плавающей запятой как с фиксированной запятой). Я предполагаю, что оригинальный Macintalk использовал довольно похожий алгоритм, хотя я никогда не видел этого исходного кода. MacinTalk 3 («Фред» и родственные голоса), доступный на Mac более 30 лет, использует аналогичный метод.
Клатт также написал довольно читаемую книгу, описывающую несколько более раннюю систему.
В конечном итоге, вероятно, именно память является ограничивающим фактором для системы 1980-х годов. Вычислительная мощность 16-битных процессоров хороша для синтеза формант, но в английском вы никогда не получите очень точного произношения без большого словаря или огромного набора правил.
Вот онлайн-версия SAM для c64, вы можете ввести текст на веб-страницу и записать звук: https://discordier.github.io/sam/
Существуют музыкальные плагины, также основанные на mac и atari st, которые предназначены для улучшения музыки поверх исходного кода речевого движка: https://www.youtube.com/watch?v=FmaeI5eoeH0&ab_channel=PlogueArtetTechnologie%2CInc. где-то в сети есть его демо-версии.
IIgs имеет достаточно оборудования, чтобы осуществлять довольно хорошую программную речь с использованием SmoothTalker . Речевой движок от SmoothTalker использовался в ряде других программ IIgs, включая серию Talking для чтения и математики . Даже программа набора текста для IIgs использовала речь, моя дочь использовала ее, и речь довольно хорошая по нынешним стандартам.
Военные игры ... на самом деле не были созданы компьютером
Вы упомянули голос Военных игр. Это был не искусственный голос, а актерский. Он произнес предложения словами в обратном порядке, которые позже были отредактированы. Ссылка:
- https://www.imdb.com/title/tt0086567/trivia#tr5373943
- 8-битное видео парня, упомянутое @RCDAWebmaster, ссылка на соответствующий момент
То, о чем вы просили: «... спасены от забвения и все еще доступны»
Да! Спасибо парню из 8bit за информацию. Ты можешь:
- посещение https://www.simulationcorner.net/index.php?page=sam
- получить исходный код https://github.com/s-macke/SAM или же https://github.com/vidarh/SAM
Это компилируется и работает на современной машине.
Программные решения эпохи
Похоже, есть полноценное программное решение (не тестировал): https://cpcrulez.fr/applications_music-superior_software-speech__MANUEL__ENGLISH.htm
Распространенное решение в то время: 8-битные говорящие машины часто использовали специальные дополнительные микросхемы
Как упоминалось в одном из комментариев, во времена 8-битной эры в обычных решениях использовались выделенные микросхемы.
- Демонстрация General Instrument SP0256 на той же странице, например, на Roland in Space с синтезатором речи SSA-1 и GLEN HODDLE SOCCER с синтезатором речи SSA-1 . Каждый чип был более или менее специализированным, самый распространенный из них делал общий английский голос.
- MEA8000 был более гибким, позволяя использовать несколько языков.
Пример: SSA-1 для Amstrad CPC
Обычно это было многоуровневое решение.
Ниже приведен пример SSA-1 Amstrad CPC:
- ранняя (высокоуровневая) часть преобразования текста в речь выполнялась на центральном процессоре компьютера и преобразовывала обычный (английский) текст в серию аллофонов (обычно 64 разных) - это можно было обойти с помощью API это дает возможность напрямую запросить серию аллофонов. В Amstrad CPC были доступны оба варианта: пользователю предлагалось загрузить определенное программное обеспечение, дополнительные команды «RSX» делались доступными из Basic (и, следовательно, из кода сборки тоже, хотя производство сборки обычно напрямую нацелено на следующий шаг, потому что они не 'не нужно разбирать общее английское предложение, только произносимые заранее определенные высказывания).
- коды аллофонов передавались на чип, по одному байту на аллофон, через обычную межчиповую связь ввода / вывода
- на микросхеме микроконтроллер реального времени преобразовывал коды аллофона в параметры моделирования речевого тракта низкого уровня и настраивал в реальном времени аппаратные регистры для управления следующим шагом
- специальное оборудование выполняет цифровой расчет модели речевого тракта и выводит сигнал PCM
- Цифро-аналоговый шаг обеспечивает аналоговый выходной сигнал на линейном уровне
- усилитель доводит сигнал до уровня динамика.
Все эти шаги (включая динамики) интегрированы в решение SSA-1 для Amstrad CPC. На самом первом этапе решение - это программное обеспечение, работающее на главном компьютере, остальное - дополнительное оборудование.
Подробнее о SSA-1: синтезатор речи Amstrad SSA-1 - CPCWiki
Первые дни аудио на устройствах, совместимых с IBM PC, имеют несколько примеров синтеза речи. Они подходят для вашей 16-битной категории, поскольку 8088 и 80286 были 16-битными процессорами (хотя 8088 был ограничен 8-битной шиной данных).
Covox Speech Thing был ЦАП с параллельным портом, предназначенным для использования с программным синтезом речи. Я предполагаю, что такая программа пришла вместе с ним, учитывая, что, хотя было приличное количество программ, которые ее поддерживали, я никогда не встречал ничего, связанного с синтезом речи.
Creative Labs поставляла программу под названием Dr Sbaitso с оригинальными картами Sound Blaster. По сути, это был чат-бот ELIZA, соединенный с синтезатором речи (все было сделано программно). Поскольку это 8-битная карта ISA, которая работала в оригинальном 16-битном ПК IBM, это определенно соответствует требованиям.
Более поздние версии Sound Blaster 16 ASP и Sound Blaster AWE32 включали в себя чип Advanced Signal Processor, который обеспечивал возможности аппаратного ускорения синтеза речи, но не получил широкого использования, если таковое имелось, за пределами собственного программного обеспечения Creative. Вопрос о том, подходят ли эти две карты, является спорным, учитывая, что они 16-битные карты ISA, которые, вероятно, будут работать в 286, но которые вышли, когда все использовали 32-битные 386 или 486 CPU.
Чип синтезатора OPL2 FM, который питал музыкальные возможности Adlib и ранних карт Sound Blaster, включал режим композитного синусоидального моделирования, который можно было использовать для аппаратного синтеза речи, но, насколько мне известно, он никогда не использовался. В руководстве по программированию Adlib от 1987 года упоминается эта функция, а затем сразу же отказывается от нее, говоря, что доступны более качественные методы.
Конечно, было несколько программ, которые могли воспроизводить речь через динамик ПК, но я понятия не имею, синтезировали ли они ее или просто воспроизводили сэмплы, да и имен я не помню.
Конечно; например, Лаборатория военно-морских исследований опубликовала в 1976 году документ (NRL-7948), озаглавленный: «Автоматический перевод английского текста в фонетику с помощью правил письма-звука» (копия здесь)
Это было в пределах возможностей 8-битных машин. (Я сам несколько раз реализовывал алгоритм на микроконтроллерах - в этом случае правила занимали чуть более 8000 байт. Вам понадобится немного больше для кода, который их запускает.)
Это выполняет операцию преобразования текста в речь, преобразуя английский текст в последовательность фонем, которая затем будет загружена в устройство синтеза. Эта часть обычно была аппаратной.
Изменить: если вам интересны результаты использования этого набора правил, вот образец вывода текста в речь, переводящего текст песни The Doors 'Hello'. Есть несколько забавных неправильных произношений; например, «небо» произносится как «лыжи».
Если вам нужна приличная история синтеза речи, посмотрите это видео от 8-битного парня.
В оригинальном Macintosh 1984 года (который работал на Motorola 68000) был Macintalk. Он работал достаточно хорошо. Озвучивает один из персонажей фильма ВАЛЛ-И. Это проявляется во многих местах поп-культуры. Посетите раздел " В популярной культуре "https://en.m.wikipedia.org/wiki/PlainTalk
Бьюсь об заклад, если я вытащу свой Mac 1984 года из шкафа и найду подходящую дискету, я смогу убедить его говорить. В свое время это был довольно удивительный трюк на вечеринке