ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Среда
10 июля
348549 Топик полностью
zeleny (22.08.2012 14:39, просмотров: 90) ответил Vladimir Ljaschko на Вопрос по С, торможу. Генерация мелодий.
Когда делал генератор мелодий, частота и длительность поместились в 2 байта. 10 бит на частоту, 6 бит на длительность. Ноты для проигрывания кидались в кольцевой буфер. Два старших бита длительности определяли диапазон - единицы, десятки, сотни, тысячи миллисекунд, четыре младших - количество. То есть 6ю битами перекрывался диапазон единиц мс .. единиц секунд. Частота - герцы, сдвинутые на 3 разряда вправо, то есть диапазон 8..8192Гц с дискретностью 8Гц. Частота 0 Гц - пауза. Макросы прямого задания частоты и длительности: #define SND_FREQ(freq1) (freq1 >> 3) #define SND_1MS(freq, len) ( 0x0000 | ((len & 0xF) << 10) | SND_FREQ(freq) ) #define SND_10MS(freq, len) ( 0x4000 | ((len & 0xF) << 10) | SND_FREQ(freq) ) #define SND_100MS(freq, len) ( 0x8000 | ((len & 0xF) << 10) | SND_FREQ(freq) ) #define SND_1S(freq, len) ( 0xC000 | ((len & 0xF) << 10) | SND_FREQ(freq) ) Частоты нот: //notes frequencies #define SC4 262 #define SD4 294 #define SE4 330 #define SF4 349 #define SG4 392 #define SA4 440 #define SB4 494 #define SC4D 277 #define SD4D 311 #define SF4D 370 #define SG4D 415 #define SA4D 466 #define SC5 523 #define SD5 587 #define SE5 659 #define SF5 699 #define SG5 784 #define SA5 880 #define SB5 988 #define SC5D 554 #define SD5D 622 #define SF5D 740 #define SG5D 831 #define SA5D 932 #define SC6 1047 #define SD6 1175 #define SE6 1319 #define SF6 1397 #define SG6 1568 #define SA6 1760 #define SB6 1976 #define SC6D 1109 #define SD6D 1245 #define SF6D 1480 #define SG6D 1661 #define SA6D 1865 #define SC7 2093 #define SD7 2349 #define SE7 2637 #define SF7 2794 #define SG7 3136 #define SA7 3520 #define SB7 3951 #define SC7D 2217 #define SD7D 2489 #define SF7D 2960 #define SG7D 3322 #define SA7D 3729 Ноты от целой до шестнадцатой: #define SL1(freq) SND_1S(freq, 2) #define SL2(freq) SND_1S(freq, 1) #define SL4(freq) SND_100MS(freq, 5) #define SL8(freq) SND_100MS(freq, 3) #define SL16(freq) SND_10MS(freq, 12)