Fingercomp 4 379 Опубликовано: 18 июня, 2016 Взываем на помощь богов и богинь звука! В общем, в CX в 1.6.1 заезжает крутейшая, звуковая карточка. Я сейчас вкратце опишу её функции, взятые из исходников мода. sound.modes — это таблица, которая содержит пары "имя формы волны ⟷ её код" и наоборот. Например, sound.modes.sine вернёт код для синусоиды. Вроде 0, лень вверх по сырцам бежать. Имеются следующие формы волн: square (ква... меандр), sine (синусоида), triangle (треугольная), sawtooth (пилообразная). А ещё есть noise — это белый шум. Есть функция sound.setTotalVolume(volume: number), которая моментально для всех каналов выставляет общую громкость (от 0 до 1). Каналы? Их, как и у предшественников — шумовых и пищащих карт, — 8 штук. Они нумеруются от 1 до 8 включительно, и на каждый из них можно поместить... Инструкции, которыми управляется звуковая карта. Есть некая "очередь" у звуковой карточки, в которую помещаются определённые инструкции, и затем... sound.process() запускает в фоне обработку этой "очереди". То есть, будут устанавливаться параметры, играться звук и прочее. Обращу внимание, что это всё в фоне, да. То есть, нам нужны циклы типа таких: while not sound.process() do os.sleep(.05) end. Очередь можно почистить через sound.clear(). И снова про каналы. Каждый из них может быть закрыт или открыт. Соответственно, закрытый канал в большинстве случаев играть звук не будет, а открытый — с превеликим удовольствием. Открыть можно с помощью sound.open(channel: number), закрыть — sound.close(channel: number). И да, это уже инструкции. Вот вам ещё инструкций. Можно установить форму волны на отдельном канале: sound.setWave(channel: number, type: number), вторым аргументом надо скормить код, полученный через sound.modes. Можно установить частоту этой самой волны с помощью sound.setFerquency(channel: number, frequency: number). Инструкция, а как же. Если вы любители... ээ, регистра сдвига с линейной обратной связью, в общем, LFSR/РСЛОС, можно даже на канал ответственную задачу генерирования этого шума возложить. Функция: sound.setLFSR(channel: number, initial: number, mask: number). Чёрт знает, как она работает. Функция sound.delay(duration: number), должна, вообще, выставить какую-то задержку с данной длительностью в миллисекундах. Но что-то я совершенно не понимаю, как её использовать. А использовать надо! Иначе звука не будет. И сразу же можно поставить частотную модуляцию с помощью sound.setFM(channel: number, modIndex: number, intensity: number). Или убрать её: sound.resetFM(channel: number). Тем же образом можно выставить и амплитудную модуляцию. sound.setAM(channel: number, modIndex: number) и sound.resetAM(channel: number). С помощью sound.setADSR(channel: number, attack: number, decay: number, attenuation: number, release: number) имеется возможность выставить ADSR-огибающую. Второй, третий и пятый аргументы указываются в миллисекундах, четвёртый — в виде числа от 0 до 1. Или убрать её: sound.resetEnvelope(channel: number). Для отдельного канала возможно выставить громкость, для этого нужна команда sound.setVolume(channel: number, volume: number). Громкость, как обычно, от 0 до 1. Собственно, это все функции. Теперь осталась мааааленькая запинка, с которой после несколько часов тыканья я не особо справился. Как заставить эту карту сгенерировать мне звук? Потому предлагаю поиграться с этой штукой всем форумом 1.7.10: качаем OC, CX и Asielib. 1.8: OC тут, Asielib не нужен. 1.9: OC тут, Asielib тоже не нужен. И если вы-таки поняли, как заставить её генерировать звук разных уровней крутости, отпишитесь об этом здесь. 5 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Doob 2 746 Опубликовано: 18 июня, 2016 Ну вот, хоть что-то нормальное будет в этом моде. Генерировать музыку на кассетах, была та еще пытка. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
qwertyMAN 1 722 Опубликовано: 19 июня, 2016 Походу мод ещё не доделан. У шумящей карты нет функции для открытия канала. Я так и не понял как её тестить не открывая канал. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Fingercomp Автор темы 4 379 Опубликовано: 19 июня, 2016 Всё там доделано и работает прекрасно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
qwertyMAN 1 722 Опубликовано: 19 июня, 2016 Всё там доделано и работает прекрасно. Если разобрался, может напишешь гайд? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Fingercomp Автор темы 4 379 Опубликовано: 19 июня, 2016 Если разобрался, может напишешь гайд? Напишу. После релиза CX. Сейчас главное — разобраться с звуковой картой. Но, как я вижу, как-то не особо люди хотят помочь. Пока рекомендую хотя бы почитать описания функций карты шумовой. И, к слову, там нет ничего интересного. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
qwertyMAN 1 722 Опубликовано: 19 июня, 2016 Напишу. После релиза CX.Сейчас главное — разобраться с звуковой картой. Но, как я вижу, как-то не особо люди хотят помочь. Пока рекомендую хотя бы почитать описания функций карты шумовой. И, к слову, там нет ничего интересного. Тестил я вчера новые версии ОС и СХ. Ничего не понял как работает в этих картах СХ. Тут без 100 грамм костной пыли не разобраться. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
TC1061 14 Опубликовано: 26 января, 2018 (изменено) Вообщем повозился с вашей карточкой и вышло вот что: component.sound.open(1) -- Создаем очередь из частот и сразу обрабатываем for n=1,1000 do component.sound.setWave(1,component.sound.modes.sine) component.sound.setFrequency(1,n) component.sound.delay(1) component.sound.process() end -- Слушаем получившийся бульк и радуемся что все работает Изменено 26 января, 2018 пользователем TC1061 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Fingercomp Автор темы 4 379 Опубликовано: 26 января, 2018 Спустя этой просьбы прошёл почти год, когда я написал свой гайд по этой штуке в трёх частях с подробным объяснением. Больше мне не нужно ничего в этом топике, естественно. Ну и по коду: указание волны и процессинг нужно вынести из цикла, а ещё лучше будет заюзать треугольный FM-модулятор. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
TC1061 14 Опубликовано: 26 января, 2018 (изменено) Спустя этой просьбы прошёл почти год, когда я написал свой гайд по этой штуке в трёх частях с подробным объяснением. Больше мне не нужно ничего в этом топике, естественно. Ну и по коду: указание волны и процессинг нужно вынести из цикла, а ещё лучше будет заюзать треугольный FM-модулятор. Ой простите. Но, если вынести из цикла указание волны и процессинг, звук ведь совсем не такой выйдет? Изменено 26 января, 2018 пользователем TC1061 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Fingercomp Автор темы 4 379 Опубликовано: 26 января, 2018 (изменено) звук ведь совсем не такой выйдет? Гм, разве? Настройки же кумулятивны... в смысле, не сбрасываются сами по себе. Как минимум, когда я писал synth (2017-05), они такими были. Изменено 26 января, 2018 пользователем Fingercomp Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах