Advertisement
Ewgeniy

ынтер

Oct 29th, 2024 (edited)
102
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 3.32 KB | None | 0 0
  1. local component = require("component")
  2. local sound = component.sound
  3.  
  4. -- Форманты гласных (сочетание частот для разных формант)
  5. local vowelFormants = {
  6.   A = {F1 = 730, F2 = 1090, F3 = 2440},  
  7.   E = {F1 = 660, F2 = 1700, F3 = 2500},
  8.   I = {F1 = 440, F2 = 2200, F3 = 2700},
  9.   O = {F1 = 500, F2 = 1000, F3 = 2400},
  10.   U = {F1 = 320, F2 = 880, F3 = 2240},
  11. }
  12.  
  13. -- Настройки согласных
  14. local consonantSounds = {
  15.   B = {freq = 300, wave = sound.modes.sine, duration = 100},
  16.   C = {freq = 8000, wave = sound.modes.noise, duration = 80},
  17.   D = {freq = 700, wave = sound.modes.sine, duration = 100},
  18.   F = {freq = 7500, wave = sound.modes.noise, duration = 70},
  19.   G = {freq = 400, wave = sound.modes.sine, duration = 100},
  20.   H = {freq = 6000, wave = sound.modes.noise, duration = 80},
  21.   L = {freq = 300, wave = sound.modes.sine, duration = 100},
  22.   M = {freq = 300, wave = sound.modes.sine, duration = 120},
  23.   N = {freq = 400, wave = sound.modes.sine, duration = 120},
  24.   P = {freq = 4000, wave = sound.modes.sine, duration = 100},
  25.   S = {freq = 8000, wave = sound.modes.noise, duration = 80},
  26.   T = {freq = 7000, wave = sound.modes.noise, duration = 80},
  27. }
  28.  
  29. -- Функция для гласных звуков
  30. local function playVowel(vowel)
  31.   local formant = vowelFormants[vowel]
  32.   if formant then
  33.     -- F1
  34.     sound.setFrequency(1, formant.F1)
  35.     sound.setWave(1, sound.modes.sine)
  36.     sound.setADSR(1, 0, 100, 200, 50)
  37.     sound.open(1)
  38.    
  39.     -- F2
  40.     sound.setFrequency(2, formant.F2)
  41.     sound.setWave(2, sound.modes.triangle)
  42.     sound.setADSR(2, 0, 100, 200, 50)
  43.     sound.open(2)
  44.    
  45.     -- F3
  46.     sound.setFrequency(3, formant.F3)
  47.     sound.setWave(3, sound.modes.sine)
  48.     sound.setADSR(3, 0, 100, 200, 50)
  49.     sound.open(3)
  50.  
  51.     sound.delay(300) -- Гласные звучат дольше
  52.     sound.close(1)
  53.     sound.close(2)
  54.     sound.close(3)
  55.     sound.process()
  56.   end
  57. end
  58.  
  59. -- Функция для согласных звуков
  60. local function playConsonant(consonant)
  61.   local soundConfig = consonantSounds[consonant]
  62.   if soundConfig then
  63.     sound.setFrequency(1, soundConfig.freq)
  64.     sound.setWave(1, soundConfig.wave)
  65.     sound.setADSR(1, 0, 50, 100, 50)
  66.     sound.open(1)
  67.    
  68.     sound.delay(soundConfig.duration) -- Короче чем гласные
  69.     sound.close(1)
  70.     sound.process()
  71.   end
  72. end
  73.  
  74. -- Полный сброс каналов
  75. local function resetAllChannels()
  76.   for i = 1, 4 do
  77.     sound.close(i)
  78.   end
  79.   sound.process()
  80. end
  81.  
  82. -- Основная функция синтеза речи
  83. local function synthesizeSpeech()
  84.   while true do
  85.     resetAllChannels()  -- Полный сброс между словами
  86.  
  87.     print("Введите слово для синтеза (или 'exit' для выхода):")
  88.     local input = io.read()
  89.  
  90.     if input == "exit" then
  91.       break
  92.     end
  93.  
  94.     for i = 1, #input do
  95.       local letter = input:sub(i, i):upper()
  96.       if vowelFormants[letter] then
  97.         playVowel(letter)
  98.       elseif consonantSounds[letter] then
  99.         playConsonant(letter)
  100.       else
  101.         sound.delay(50)  -- Пауза для пробелов или неизвестных букв
  102.       end
  103.     end
  104.   end
  105. end
  106.  
  107. -- Запуск программы
  108. synthesizeSpeech()
  109.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement