Автоматический рот программного обеспечения - крошечный синтезатор речи
Это порт Go Great Sam Shightesizer. Это в основном полуавтоматическое переписывание от C до того, что, в свою очередь, полуавтоматическое переписывание от сборки в C :). Следовательно, это не предназначено для чтения.
Оригинальный репо: https://github.com/vidarh/sam. На основе этого коммита.
Как вызов и просто для развлечения.
SAM-очень маленькая программа текста в речь (TTS), написанная на C, которая работает на самых популярных платформах. Это адаптация к C речевого программного обеспечения SAM (Software Automatic Port) для Commodore C64, опубликованного в 1982 году, не спрашивает программное обеспечение (теперь SoftVoice, Inc.). Он включает в себя конвертер текста в фонем, называемый Reciter и процедура фонемы к рече для окончательного вывода. Он настолько мал, что будет работать также на встроенных компьютерах. На моем компьютере требуется менее 39 КБ (гораздо меньше на встроенных устройствах, поскольку исполняемое обход не требуется) дискового пространства и является полностью отдельной программой. Для немедленного вывода он использует SDL-библиотеку, в противном случае он может сохранить файлы .wav.
Онлайн -версию и исполняемые файлы для Windows можно найти на веб -сайте: http://simulationcorner.net/index.php?page=sam
Просто введите «Сделать» в своей командной строке. Чтобы компилировать без SDL удалить операторы SDL из переменных CFLAGS и LFLAGS в файле «MakeFile».
Он должен компилироваться на каждой Unix-подобной операционной системе. Для Windows вам нужен Cygwin или Mingw ( + libsdl).
тип
./sam I am Sam
Для первого вывода.
Если у вас отключил SDL, попробуйте
./sam -wav i_am_sam.wav I am Sam
Чтобы получить файл WAV. Этот файл может сыграть многие медиаплееры, доступные для ПК.
Вы можете попробовать другие варианты, такие как номером -Пит -номером -спид.
Некоторые типичные значения, написанные в оригинальном руководстве:
DESCRIPTION SPEED PITCH THROAT MOUTH
Elf 72 64 110 160
Little Robot 92 60 190 190
Stuffy Guy 82 72 110 105
Little Old Lady 82 32 145 145
Extra-Terrestrial 100 64 150 200
SAM 72 64 128 128
Это может даже петь взглянуть на файл «Sing» для небольшого примера.
Для таблицы ввода фонемы смотрите в вики.
Описание дополнительных функций можно найти в оригинальном руководстве по адресу http://www.retrobits.net/atari/sam.shtml или в руководстве эквивалентной программы Apple II http://www.apple-iigs.info/newdoc/sam.pdf
Эта программа была преобразована полуавтоматическим в C путем преобразования каждого оплота ассемблера. например
lda 56 => A = mem[56];
jmp 38018 => goto pos38018;
inc 38 => mem[38]++;
. .
. .
Затем было переписано вручную, чтобы удалить большинство прыжков и зарегистрировать переменные в коде и переименовать переменные до правильных имен. Большая часть описания ниже является результатом этого процесса переписывания.
К сожалению, это все еще не очень хороший читаемый. Но ты должен увидеть, где я начал :)
Прежде всего я буду ограничивать себя здесь очень грубым описанием. Есть очень много исключений, определенных в исходном коде, которые я не объясню. Также для меня неизвестно много кода, например Code47503. Для полного понимания кода мне нужно больше времени, и особенно больше глаз смотрят на код.
Это изменяет английский текст на фонемы на сне с правилами, показанный в вики.
Правило «Ant (i)», «ay», означает, что если он найдет «я» с предыдущими буквами «муравей», обменивается я фонемой «ай».
В этих правилах есть несколько особых признаков, таких как # & @ ^ +: %, что может означать, например, что должен быть вокал, согласный или что -то еще.
С опцией -debug вы получите соответствующие правила и полученные фонемы.
Вот полное дерево подпрограммы:
Sammain () parser1 () parser2 () insert () copyrestra () setphoneemelength () code48619 () code41240 () insert () code48431 () insert ()
Code48547
Code47574
Special1
Code47503
Code48227
Sammain () - это входная процедура и вызывает все дальнейшие процедуры. Parser1 преобразует вход фонем и преобразует его в три таблицы Phonemeindex [] напряжение [] phonemelength [] (нулевое на данный момент)
Эти таблицы теперь изменены:
Parser2 обменивается некоторыми фонемами другими и вставляет новые. Copyrestra добавляет 1 к напряжению при некоторых обстоятельствах Setphonemelength Sets Foneme длины. Code48619 Изменения Фонемные длины Code41240 добавляет некоторые дополнительные фонема Code48431 имеют несколько дополнительных правил
Вики показывает все возможные фонемы и некоторые поля флага.
Окончательное содержание этих таблиц можно увидеть с помощью команды -debug.
В функции PrepareOutput () Эти таблицы частично скопированы в небольшие таблицы: phonemeindexoutput [] pressutput [] phonemeLengthOutput [] для выхода.
За исключением некоторых специальных фонем, выход из строительства на линейной комбинации:
A = A1 * sin ( f1 * t ) +
A2 * sin ( f2 * t ) +
A3 * rect( f3 * t )
где прямоугольник является прямоугольной функцией с той же периодичностью, как грех. Это кажется действительно странным, но этого действительно достаточно для большинства типов фонем.
Следовательно, вышеуказанные фонемы преобразуются с помощью некоторых таблиц в шаг [] частота1 [] = f1 частота2 [] = частота F2 [] = F3 амплитуда1 [] = A1 -амплитуда2 [] = A2 Amplitude3 [] = A3
Приведенная выше формула рассчитывается в одной очень хорошей рутине омптимизированной. Он состоит только из 26 команд:
48087: LDX 43 ; get phase
CLC
LDA 42240,x ; load sine value (high 4 bits)
ORA TabAmpl1,y ; get amplitude (in low 4 bits)
TAX
LDA 42752,x ; multiplication table
STA 56 ; store
LDX 42 ; get phase
LDA 42240,x ; load sine value (high 4 bits)
ORA TabAmpl2,y ; get amplitude (in low 4 bits)
TAX
LDA 42752,x ; multiplication table
ADC Var56 ; add with previous values
STA 56 ; and store
LDX 41 ; get phase
LDA 42496,x ; load rect value (high 4 bits)
ORA TabAmpl3,y ; get amplitude (in low 4 bits)
TAX
LDA 42752,x ; multiplication table
ADC 56 ; add with previous values
ADC #136
LSR A ; get highest 4 bits
LSR A
LSR A
LSR A
STA 54296 ;SID main output command
Остальное обрабатывается особым образом. На данный момент я не могу понять, каким образом. Но кажется, что он использует какой -то шум (например, для «S»), используя таблицу со случайными значениями.
Программное обеспечение представляет собой версию коммерческого программного обеспечения, опубликованного более 30 лет назад. Текущий держатель авторского права - SoftVoice, Inc. (www.text2speech.com)
Любая попытка связаться с компанией не удалась. В последний раз этот сайт был обновлен в 2009 году. Поэтому статус оригинального программного обеспечения может быть лучше всего описать как Abandonware (http://en.wikipedia.org/wiki/abandonware)
Пока это так, я не могу поместить свой код по какой -либо конкретной лицензии на программное обеспечение с открытым исходным кодом, используя его на свой страх и риск.
Если у вас есть вопросы, не решайтесь спрашивать меня. Если вы обнаружили некоторые новые знания о коде, пожалуйста, напишите мне.
Электронная почта Себастьяна Макка: [email protected]