doom2d.org
http://doom2d.org/forum/

загрузчик и микшер DMM, на языке D
http://doom2d.org/forum/viewtopic.php?f=31&t=2243
Page 1 of 1

Author:  ketmar [ 17 Jan 2016, 07:10 ]
Post subject:  загрузчик и микшер DMM, на языке D

ви‐таки будете смеяться, но… ну, помимо моего motto «проект не дохлый» я ещё хочу сказать, что периодически и реальные куски его пишу. ради него портанул Enet на D, например. или вот сделал звуковой движок Follin.

но речь сейчас не об этом, а о том, что один из синтезаторов для Follin'а являет собой рендерер DMM-музыки. краткая характеристика:
• умеет давать выхлоп в произвольной частоте оцифровки (наиболее юзабельны, понятно, 44100 и 48000);
• не требует внешних библиотек сэмплинга и микширования, выплёвывая просто моно‐канал в формате float;
• пытается делать Hermite-интерполяцию (наверное, у него получается, раз музыка играет);
• лицензирован под WTFPL (ну и что, что я забыл это написать в самом сырце?)

никто больше тут, конечно, на ди не пишет, но сам по себе движок простой как полено и вполне читабельно‐адаптабельный на другие языки. сделал я его за часик неспешного кодинга, оптимизировать даже не старался.

внутри есть помимо игралки и писалка в raw-файл, так что кому захочется — разберётся.

Attachments:
dmm.d.txt [12.15 KiB]
Downloaded 130 times

Author:  Черный Думер [ 17 Jan 2016, 07:24 ]
Post subject:  Re: загрузчик и микшер DMM, на языке D

Спасибо, поизучаю на досуге. Это и в самом деле интересно.

Author:  ketmar [ 17 Jan 2016, 10:11 ]
Post subject:  Re: загрузчик и микшер DMM, на языке D

да ничего там интересного, тащемта. формат простой, как палка, даже спецэффектов не умеет. весь рендер — это: «берём инструмент, вычисляем отношение его реальной частоты к желаемой, интерполируем. потом всё получившееся складываем и клипаем в район [-1..1]». всё, весь рендер. ну, ещё циклы в инструменте (которые, кажется, всё равно поломаны). я настолько ленив, что даже FIR-фильтры не делал, а тупую интерполяцию. вся работа идёт с float'ами, потому что я ленивый, и потому что Follin хочет на вход именно флоаты.

p.s. чуть поясню, что я за фигню про фильтры задвинул. то, что происходит в плеере — страхиужос, такделадьнинада. для того, чтобы получить более‐менее нормальное качество при ресамплинге, следует делать сначала upsample, потом downsample. на примере 44100 -> 48000: это у нас дробь (после упрощения) 147/160. а дальше нам надо исходную частоту 44100 апсэмплануть в 160 раз, а потом сделать даунсэмпл в 147 раз. ощущаешь прелесть и скорость? но и это ещё не всё: в процессе всенепременно появятся паразитные шумы, которые следует отфильтровать cutoff-фильтрами, нежно массируя данные. два раза: для апсэмплинга и для даунсэмплинга. и вот тогда получится более‐менее приличный звук.

так вот, всей этой ерундой я даже не заморачивался (хотя у меня есть FIR-фильтр с приличной полосой, Follin так и рэсэмплит свои каналы; но он такой медленный, что восемь каналов запаришься гонять).

с другой стороны, исходные сэмплы настолько хреновые, что особо над ними колдовать смысла и нет: качество улучшится незначительно, а скорость упадёт сильно, и код раздуется.

всё, на этом урок «digital signal processing для чайников от чайника» заканчиваю.

Page 1 of 1 All times are UTC + 3 hours
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/