Advertisement
Asioron

Справка по soundCart CX

Apr 6th, 2017
147
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.11 KB | None | 0 0
  1. sound.modes — это таблица, которая содержит пары "имя формы волны её код" и наоборот.
  2. sound.setTotalVolume(volume: number) выставляет общую громкость для всех каналов (от 0 до 1).
  3. sound.setVolume(channel: number, volume: number) выставить громкость для отдельного канала
  4. sound.process() запускает в фоне обработку этой "очереди". То есть, будут устанавливаться параметры, играться звук и прочее.
  5. sound.clear() почистить очередь.
  6. sound.open(channel: number) Открыть канал.
  7. sound.close(channel: number) закрыть канал.
  8. sound.setWave(channel: number, type: number) установить форму волны на отдельном канале: вторым аргументом код, полученный через sound.modes.
  9. sound.setFerquency(channel: number, frequency: number) установить частоту
  10. sound.delay(duration: number) задержку с данной длительностью в миллисекундах
  11.  
  12. sound.setFrequency(channel: number, frequency: number) Установить указанную частоту
  13. sound.setLFSR(channel: number, initial: number, mask: number) регистр сдвига с линейной обратной связью, в общем, LFSR/РСЛОС
  14. sound.setFM(channel: number, modIndex: number, intensity: number) sound.resetFM(channel: number) поставить/убрать частотную модуляцию
  15. sound.setAM(channel: number, modIndex: number) и sound.resetAM(channel: number) поставить/убрать амплитудную модуляцию
  16. sound.setADSR(channel: number, attack: number, decay: number, attenuation: number, release: number); sound.resetEnvelope(channel: number) выставить/убрать ADSR-огибающую. Второй, третий и пятый аргументы указываются в миллисекундах, четвёртый — в виде числа от 0 до 1.
  17.  
  18.  
  19. local sound = require("component").sound
  20.  
  21. sound.open(1)
  22. sound.setWave(1, sound.modes.sine)
  23. sound.setFrequency(1, 404)
  24. sound.setADSR(1, 400, 500, 0, 1)
  25. sound.setVolume(1, 1)
  26. sound.setTotalVolume(1)
  27. sound.delay(5000)
  28. while not sound.process() do
  29. os.sleep(.05)
  30. end
  31.  
  32.  
  33.  
  34. setADSR(channel, attack, decay, attenuation, release)
  35. вот что там
  36. attenuation, если что, — это типа затухание
  37. > attack, decay, release — всё целые числа, это миллисекунды
  38. > а вот attenuation — нормализованное число
  39. > в смысле, от 0 до 1
  40. > ща смотрю в сырцах, что за хрень это
  41. > attenuation ставит скорость затухания, что ли
  42. > 0 — это самая высокая громкость звука
  43. > которая заявлена официально
  44. > 1 — это отсутствие звука вообще
  45. > к этим значением будет стремиться громковть в фазе Decay
  46. > и от этого значения будет затухать звук в фазе Release
  47. > есть у нас будет setADSR(1, 500, 500, 0.5, 500)
  48. > то тогда 500 мс звук будет от 0 до заданной громкости идти
  49. > потом за ещё 500 мс громкость уменьшится наполовину
  50. > и 500 мс от полгромкости до нуля идти будет
  51. > если будет setADSR(1, 500, 500, 1, 500)
  52. > то 500 секунд будет от 0 до заданной громкости идти звук
  53. > и потом мгновенно пропадёт
  54. > вот что у тебя и происходит
  55. > у тебя значение 410 вносится в границы [0; 1]
  56. > получаем единицу
  57. > и потому звук сразу после Attack глохнет
  58. > у тебя delay меньше длины ADSR итоговой
  59. > delay меньше ADSR
  60. > максимальное затухание означает ЗАТУХАЙ БЫСТРО
  61. > чем это чревато
  62. > после конца delay сразу же переходит в фазу Release
  63. > даже не достигнув Attack
  64. > у тебя 660 мс должна увеличиваться громкость
  65. > но на точке 90 мс сразу начнёт затухать
  66. > с заданной скоростью
  67. > если 1 — мгновенно потухнет
  68. > если 0 — потухнет через 900 мс
  69. > вот так это работает
  70. > так что увеличивай Delay на период Attack + Decay
  71. > минимум
  72. > т.е., 1300
  73. > и будет полная нота
  74. > в программе скорость идет как 8 нот в секунду, а мелодии затухания ноты хватает только на ~6 надо пересчитывать
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement