doom2d.org

Главная база плоских морпехов
It is currently 14 Oct 2019, 23:44

All times are UTC + 3 hours




Post new topic Reply to topic  [ 3 posts ] 
Author Message
PostPosted: 17 Jan 2016, 07:10 
Offline
User avatar

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

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

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

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


Attachments:
dmm.d.txt [12.15 KiB]
Downloaded 109 times
Top
 Profile  
 
PostPosted: 17 Jan 2016, 07:24 
Offline
Приколист
User avatar

Joined: 18 Oct 2009, 04:01
Posts: 5897
Location: Владивосток
Спасибо, поизучаю на досуге. Это и в самом деле интересно.

_________________
Чёрный Думер, Чёрный Думер
С монстрами сражается.
Чёрный Думер, Чёрный Думер
Рокетланчер плавится.


Top
 Profile  
 
PostPosted: 17 Jan 2016, 10:11 
Offline
User avatar

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

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

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

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

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


Top
 Profile  
 
Display posts from previous:  Sort by  
Post new topic Reply to topic  [ 3 posts ] 

All times are UTC + 3 hours


Who is online

Users browsing this forum: No registered users and 1 guest


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
doom2d.org, since 2007