Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.117.9.186] |
|
Сообщ.
#1
,
|
|
|
В данное время в Питере проходит компьютерный фестиваль CHAOS CONSTRUCTIONS 2017.
Среди прочих, на нём есть номинация "32k EXE Music", то есть нужно предоставить исполняемый файл не более 32 Кб, который бы сыграл какую-то музыку. Миди, мягко говоря, не приветствуется. Я решил поучаствовать в этой номинации. Показ работы уже прошёл, теперь я могу сам её выложить. Вот моя демка на ЦЦ: https://yadi.sk/d/3iuA9uIh3MLzsa И MP3 вариант: https://yadi.sk/d/SxwDQaaB3MLzsV |
Сообщ.
#2
,
|
|
|
Если интересно, то есть очень крутая библиотека – uFMOD, которая воспроизводит XM-модули. Модули могут быть как в отдельном файле, так и в ресурсах или просто в виде данных. Причём, библиотеку можно перекомпилировать так, что в ней будут находиться только те функции (код поддержки эффектов и пр), которые используются в нужном XM-файле. Воспроизведение идёт через WinMM, DirectSound или OpenAL. Модули написаны для множества языков (C, С#, BCB, Delphi, разные Asm, разные Basic, BlitzMax). Есть документация на русском. В общем, там есть examples весом меньше 10 кб вместе с XM-модулем. Короче, вещь мощная!
|
Сообщ.
#3
,
|
|
|
Достаточно интересно. Только я делаю основной упор на синтез натуральных звуков, физ. моделирование. Хотя можно попробовать синтезировать звуки и подсовывать их в XM.
|
Сообщ.
#4
,
|
|
|
Mikle, было бы интересно глянуть на то, каким образом происходит синтез (теорию и конкретные формулы, цифры, обертоны, etc...).
По сути, это альтернатива Midi или AdLib получается, только программная |
Сообщ.
#5
,
|
|
|
Цитата Jin X @ было бы интересно глянуть на то, каким образом происходит синтез (теорию и конкретные формулы, цифры, обертоны, etc...). Тут есть исходник струны: http://www.gamedev.ru/projects/forum/?id=180947&page=67#m991 Это по сути имитация колебаний цепочки грузиков, связанных пружинками. Если вместо цепочки представить 2D сетку - получим модель, с помощью которой получается звук колокола или, к примеру, барабанных тарелок. Цитата Jin X @ По сути, это альтернатива Midi или AdLib получается, только программная Альтернатива AdLib, но не Midi. Midi - это формат записи партитуры, но не способ извлечения звуков. |
Сообщ.
#6
,
|
|
|
Функцию вижу, но там просто формулы без описаний. Код-то не проблема написать, главное - теорию иметь.
|
Сообщ.
#7
,
|
|
|
Цитата Jin X @ главное - теорию иметь. Основной смысл: Заводим массивы: Dim FdM() As Single 'сила натяжения, делённая на массу Dim P() As Single 'позиция Dim S() As Single 'скорость В ремарках указан физический смысл величин. Размер массивов stLen - это фактически длина струны. Процедура StStart выводит струну из равновесия, это можно сделать как угодно, что будет аналогично тому, что из реальной струны можно извлечь звук в разных местах, щипком, медиатором, ударом и т. д. Главное - эмуляция дальнейших колебаний струны: 'расчёт скоростей For i = 1 To stLen - 1 d = (P(i - 1) + P(i + 1)) * 0.5 - P(i) S(i) = S(i) + d * FdM(i) Next i Мы вычисляем силу, действующую на звено цепи, считая её пропорциональной смещению звена относительно соседей. Получив силу, вычисляем приращение скорости. Далее: 'вязкость For i = 1 To stLen - 1 S(i) = S(i) * k1 + (S(i - 1) + S(i + 1)) * k2 Next i Несколько уменьшаем скорость, как бы из-за трения, считая трение пропорциональным скорости звена относительно соседей. Наконец: 'расчёт позиций For i = 1 To stLen - 1 P(i) = P(i) + S(i) Next i Получаем новые значения позиций звеньев. Это всё по законам Ньютона, в формулах отсутствует время потому, что 1/44100 сек. мы принимаем за единицу, в результате формулы сильно упрощаются. Для 2D случая всё так же, только соседей не 2, а 4. Можно ещё упростить, считая все звенья абсолютно идентичными, избавясь от FdM, но звук получается слишком ровным, электронным, интереснее, когда струна имеет небольшие дефекты. |
Сообщ.
#8
,
|
|
|
|