|
|
  |
Синтез звука. |
|
|
|
Oct 21 2011, 08:02
|
Знающий
   
Группа: Свой
Сообщений: 559
Регистрация: 6-09-06
Пользователь №: 20 131

|
Господа, кому-нибудь приходилось заниматься аппаратным синтезом звука? Имеется контроллер AVR хочется к его ШИМу присоединить динамик и использовать его в качестве некоего сигнализатора.
Однако прямоугольные импульсы, как известно звучат как жесткий циплячий писк.
Однако в жизни да и в тех же музыкальных инструментах одна нота - то есть постоянный, не меняющий частоты и интенсивности звук, звучит по разному, то есть имеет разный тембр, который к тому же куда приятнее чем прямоугольный импульс.
Погуглил я на предмет синтеза звука - нашел решения для персональных компьютеров - сложные навороченные программы, с алгоритмами которых АVR просто не справится, да и крутизна такая не нужна. Единственное, нужное, что я для себя извлек - что для синтеза необычного звука достаточно нарисовать кривую одного периода колебания, а потом бесконечно повторять эти колебания, меняя в зависимости от возможностей утсройства длительность этого колебания.
Другими словами - прямоугольные ипульсы - жесткий жестяной писк, синусоида - более мягкий звук, а вот синусоида с "рюшечками" - уже что-то более хитрое.
Может быть у кого есть какие-то наработки в аппаратном синтезе звука, точнее не звука, а отдельных его нот? ПРивитив в виде писка прямоугольных импульсов уже поднадоел. Хочу поиграться с ШИМ.
Заранее спасибо.
|
|
|
|
|
Oct 21 2011, 09:38
|
Частый гость
 
Группа: Свой
Сообщений: 197
Регистрация: 17-06-10
Из: Киев
Пользователь №: 57 986

|
Когда вот так это делали http://ru.wikipedia.org/wiki/CovoxАЦП на борту кристалла думаю найдете, схема очень проста- оцифровали - в память - воспроизводите.
|
|
|
|
|
Oct 21 2011, 15:32
|

Ally
     
Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050

|
Цитата(-=Женек=- @ Oct 21 2011, 11:02)  ... Однако прямоугольные импульсы, как известно звучат как жесткий циплячий писк. ... Красивый звук это когда главный синусоидальный тон складывается со своей 3-й гармоникой. Это будет гармонический консонирующий звук если не ошибаюсь. Точно генерировать синусоиду проще всего методом добавления фазы. Ниже даны процедуры для инициализации однотонального генератора с высокой точностью. Для двух тонального генератора нужно просто добавить еще один независимый накопитель фазы и складывать вместе выборки из таблицы (не забыть соответственно масштабировать амплитуду чтобы не было переполнения ЦАП или ШИМ или что там на выходе) Правда тип int здесь 32-х битный. На ARM-ы программка рассчитана ;) Код unsigned int phase; unsigned int dphase;
unsigned short sin_tbl[2048]= { 0x8000, 0x8064, 0x80C9, 0x812D, 0x8192, 0x81F6, 0x825B, 0x82BF, 0x8324, 0x8388, 0x83ED, 0x8451, 0x84B6, 0x851A, 0x857E, 0x85E3, 0x8647, 0x86AC, 0x8710, 0x8774, 0x87D9, 0x883D, 0x88A1, 0x8906, 0x896A, 0x89CE, 0x8A32, 0x8A97, 0x8AFB, 0x8B5F, 0x8BC3, 0x8C27, 0x8C8B, 0x8CEF, 0x8D53, 0x8DB7, 0x8E1B, 0x8E7F, 0x8EE3, 0x8F47, 0x8FAB, 0x900E, 0x9072, 0x90D6, 0x9139, 0x919D, 0x9201, 0x9264, 0x92C7, 0x932B, 0x938E, 0x93F2, 0x9455, 0x94B8, 0x951B, 0x957E, 0x95E1, 0x9645, 0x96A7, 0x970A, 0x976D, 0x97D0, 0x9833, 0x9895, 0x98F8, 0x995B, 0x99BD, 0x9A20, 0x9A82, 0x9AE4, 0x9B47, 0x9BA9, 0x9C0B, 0x9C6D, 0x9CCF, 0x9D31, 0x9D93, 0x9DF4, 0x9E56, 0x9EB8, 0x9F19, 0x9F7B, 0x9FDC, 0xA03E, 0xA09F, 0xA100, 0xA161, 0xA1C2, 0xA223, 0xA284, 0xA2E5, 0xA345, 0xA3A6, 0xA406, 0xA467, 0xA4C7, 0xA527, 0xA588, 0xA5E8, 0xA648, 0xA6A7, 0xA707, 0xA767, 0xA7C7, 0xA826, 0xA885, 0xA8E5, 0xA944, 0xA9A3, 0xAA02, 0xAA61, 0xAAC0, 0xAB1F, 0xAB7D, 0xABDC, 0xAC3A, 0xAC98, 0xACF6, 0xAD55, 0xADB3, 0xAE10, 0xAE6E, 0xAECC, 0xAF29, 0xAF87, 0xAFE4, 0xB041, 0xB09E, 0xB0FB, 0xB158, 0xB1B5, 0xB211, 0xB26E, 0xB2CA, 0xB326, 0xB382, 0xB3DE, 0xB43A, 0xB496, 0xB4F1, 0xB54D, 0xB5A8, 0xB603, 0xB65E, 0xB6B9, 0xB714, 0xB76F, 0xB7C9, 0xB824, 0xB87E, 0xB8D8, 0xB932, 0xB98C, 0xB9E6, 0xBA3F, 0xBA99, 0xBAF2, 0xBB4B, 0xBBA4, 0xBBFD, 0xBC56, 0xBCAF, 0xBD07, 0xBD5F, 0xBDB7, 0xBE0F, 0xBE67, 0xBEBF, 0xBF17, 0xBF6E, 0xBFC5, 0xC01C, 0xC073, 0xC0CA, 0xC121, 0xC177, 0xC1CD, 0xC224, 0xC279, 0xC2CF, 0xC325, 0xC37A, 0xC3D0, 0xC425, 0xC47A, 0xC4CF, 0xC524, 0xC578, 0xC5CC, 0xC621, 0xC675, 0xC6C8, 0xC71C, 0xC770, 0xC7C3, 0xC816, 0xC869, 0xC8BC, 0xC90F, 0xC961, 0xC9B3, 0xCA05, 0xCA57, 0xCAA9, 0xCAFB, 0xCB4C, 0xCB9D, 0xCBEE, 0xCC3F, 0xCC90, 0xCCE0, 0xCD30, 0xCD81, 0xCDD0, 0xCE20, 0xCE70, 0xCEBF, 0xCF0E, 0xCF5D, 0xCFAC, 0xCFFB, 0xD049, 0xD097, 0xD0E5, 0xD133, 0xD181, 0xD1CE, 0xD21B, 0xD268, 0xD2B5, 0xD302, 0xD34E, 0xD39A, 0xD3E6, 0xD432, 0xD47E, 0xD4C9, 0xD514, 0xD55F, 0xD5AA, 0xD5F5, 0xD63F, 0xD689, 0xD6D3, 0xD71D, 0xD767, 0xD7B0, 0xD7F9, 0xD842, 0xD88B, 0xD8D3, 0xD91B, 0xD964, 0xD9AB, 0xD9F3, 0xDA3A, 0xDA82, 0xDAC9, 0xDB0F, 0xDB56, 0xDB9C, 0xDBE2, 0xDC28, 0xDC6E, 0xDCB3, 0xDCF8, 0xDD3D, 0xDD82, 0xDDC7, 0xDE0B, 0xDE4F, 0xDE93, 0xDED7, 0xDF1A, 0xDF5D, 0xDFA0, 0xDFE3, 0xE025, 0xE068, 0xE0AA, 0xE0EB, 0xE12D, 0xE16E, 0xE1AF, 0xE1F0, 0xE231, 0xE271, 0xE2B1, 0xE2F1, 0xE331, 0xE370, 0xE3AF, 0xE3EE, 0xE42D, 0xE46B, 0xE4AA, 0xE4E8, 0xE525, 0xE563, 0xE5A0, 0xE5DD, 0xE61A, 0xE656, 0xE693, 0xE6CF, 0xE70A, 0xE746, 0xE781, 0xE7BC, 0xE7F7, 0xE831, 0xE86C, 0xE8A6, 0xE8DF, 0xE919, 0xE952, 0xE98B, 0xE9C4, 0xE9FC, 0xEA35, 0xEA6D, 0xEAA4, 0xEADC, 0xEB13, 0xEB4A, 0xEB81, 0xEBB7, 0xEBED, 0xEC23, 0xEC59, 0xEC8E, 0xECC3, 0xECF8, 0xED2D, 0xED61, 0xED95, 0xEDC9, 0xEDFD, 0xEE30, 0xEE63, 0xEE96, 0xEEC8, 0xEEFA, 0xEF2C, 0xEF5E, 0xEF8F, 0xEFC1, 0xEFF2, 0xF022, 0xF052, 0xF083, 0xF0B2, 0xF0E2, 0xF111, 0xF140, 0xF16F, 0xF19D, 0xF1CB, 0xF1F9, 0xF227, 0xF254, 0xF281, 0xF2AE, 0xF2DB, 0xF307, 0xF333, 0xF35E, 0xF38A, 0xF3B5, 0xF3E0, 0xF40A, 0xF435, 0xF45F, 0xF488, 0xF4B2, 0xF4DB, 0xF504, 0xF52C, 0xF555, 0xF57D, 0xF5A5, 0xF5CC, 0xF5F3, 0xF61A, 0xF641, 0xF667, 0xF68D, 0xF6B3, 0xF6D8, 0xF6FE, 0xF722, 0xF747, 0xF76B, 0xF78F, 0xF7B3, 0xF7D7, 0xF7FA, 0xF81D, 0xF83F, 0xF862, 0xF884, 0xF8A5, 0xF8C7, 0xF8E8, 0xF909, 0xF929, 0xF94A, 0xF969, 0xF989, 0xF9A9, 0xF9C8, 0xF9E6, 0xFA05, 0xFA23, 0xFA41, 0xFA5F, 0xFA7C, 0xFA99, 0xFAB6, 0xFAD2, 0xFAEE, 0xFB0A, 0xFB26, 0xFB41, 0xFB5C, 0xFB77, 0xFB91, 0xFBAB, 0xFBC5, 0xFBDE, 0xFBF8, 0xFC10, 0xFC29, 0xFC41, 0xFC59, 0xFC71, 0xFC88, 0xFC9F, 0xFCB6, 0xFCCD, 0xFCE3, 0xFCF9, 0xFD0E, 0xFD24, 0xFD39, 0xFD4D, 0xFD62, 0xFD76, 0xFD89, 0xFD9D, 0xFDB0, 0xFDC3, 0xFDD5, 0xFDE8, 0xFDFA, 0xFE0B, 0xFE1D, 0xFE2E, 0xFE3E, 0xFE4F, 0xFE5F, 0xFE6F, 0xFE7E, 0xFE8D, 0xFE9C, 0xFEAB, 0xFEB9, 0xFEC7, 0xFED5, 0xFEE2, 0xFEEF, 0xFEFC, 0xFF09, 0xFF15, 0xFF21, 0xFF2C, 0xFF37, 0xFF42, 0xFF4D, 0xFF57, 0xFF61, 0xFF6B, 0xFF74, 0xFF7D, 0xFF86, 0xFF8F, 0xFF97, 0xFF9F, 0xFFA6, 0xFFAD, 0xFFB4, 0xFFBB, 0xFFC1, 0xFFC7, 0xFFCD, 0xFFD2, 0xFFD8, 0xFFDC, 0xFFE1, 0xFFE5, 0xFFE9, 0xFFEC, 0xFFF0, 0xFFF3, 0xFFF5, 0xFFF7, 0xFFF9, 0xFFFB, 0xFFFD, 0xFFFE, 0xFFFE, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFE, 0xFFFE, 0xFFFD, 0xFFFB, 0xFFF9, 0xFFF7, 0xFFF5, 0xFFF3, 0xFFF0, 0xFFEC, 0xFFE9, 0xFFE5, 0xFFE1, 0xFFDC, 0xFFD8, 0xFFD2, 0xFFCD, 0xFFC7, 0xFFC1, 0xFFBB, 0xFFB4, 0xFFAD, 0xFFA6, 0xFF9F, 0xFF97, 0xFF8F, 0xFF86, 0xFF7D, 0xFF74, 0xFF6B, 0xFF61, 0xFF57, 0xFF4D, 0xFF42, 0xFF37, 0xFF2C, 0xFF21, 0xFF15, 0xFF09, 0xFEFC, 0xFEEF, 0xFEE2, 0xFED5, 0xFEC7, 0xFEB9, 0xFEAB, 0xFE9C, 0xFE8D, 0xFE7E, 0xFE6F, 0xFE5F, 0xFE4F, 0xFE3E, 0xFE2E, 0xFE1D, 0xFE0B, 0xFDFA, 0xFDE8, 0xFDD5, 0xFDC3, 0xFDB0, 0xFD9D, 0xFD89, 0xFD76, 0xFD62, 0xFD4D, 0xFD39, 0xFD24, 0xFD0E, 0xFCF9, 0xFCE3, 0xFCCD, 0xFCB6, 0xFC9F, 0xFC88, 0xFC71, 0xFC59, 0xFC41, 0xFC29, 0xFC10, 0xFBF8, 0xFBDE, 0xFBC5, 0xFBAB, 0xFB91, 0xFB77, 0xFB5C, 0xFB41, 0xFB26, 0xFB0A, 0xFAEE, 0xFAD2, 0xFAB6, 0xFA99, 0xFA7C, 0xFA5F, 0xFA41, 0xFA23, 0xFA05, 0xF9E6, 0xF9C8, 0xF9A9, 0xF989, 0xF969, 0xF94A, 0xF929, 0xF909, 0xF8E8, 0xF8C7, 0xF8A5, 0xF884, 0xF862, 0xF83F, 0xF81D, 0xF7FA, 0xF7D7, 0xF7B3, 0xF78F, 0xF76B, 0xF747, 0xF722, 0xF6FE, 0xF6D8, 0xF6B3, 0xF68D, 0xF667, 0xF641, 0xF61A, 0xF5F3, 0xF5CC, 0xF5A5, 0xF57D, 0xF555, 0xF52C, 0xF504, 0xF4DB, 0xF4B2, 0xF488, 0xF45F, 0xF435, 0xF40A, 0xF3E0, 0xF3B5, 0xF38A, 0xF35E, 0xF333, 0xF307, 0xF2DB, 0xF2AE, 0xF281, 0xF254, 0xF227, 0xF1F9, 0xF1CB, 0xF19D, 0xF16F, 0xF140, 0xF111, 0xF0E2, 0xF0B2, 0xF083, 0xF052, 0xF022, 0xEFF2, 0xEFC1, 0xEF8F, 0xEF5E, 0xEF2C, 0xEEFA, 0xEEC8, 0xEE96, 0xEE63, 0xEE30, 0xEDFD, 0xEDC9, 0xED95, 0xED61, 0xED2D, 0xECF8, 0xECC3, 0xEC8E, 0xEC59, 0xEC23, 0xEBED, 0xEBB7, 0xEB81, 0xEB4A, 0xEB13, 0xEADC, 0xEAA4, 0xEA6D, 0xEA35, 0xE9FC, 0xE9C4, 0xE98B, 0xE952, 0xE919, 0xE8DF, 0xE8A6, 0xE86C, 0xE831, 0xE7F7, 0xE7BC, 0xE781, 0xE746, 0xE70A, 0xE6CF, 0xE693, 0xE656, 0xE61A, 0xE5DD, 0xE5A0, 0xE563, 0xE525, 0xE4E8, 0xE4AA, 0xE46B, 0xE42D, 0xE3EE, 0xE3AF, 0xE370, 0xE331, 0xE2F1, 0xE2B1, 0xE271, 0xE231, 0xE1F0, 0xE1AF, 0xE16E, 0xE12D, 0xE0EB, 0xE0AA, 0xE068, 0xE025, 0xDFE3, 0xDFA0, 0xDF5D, 0xDF1A, 0xDED7, 0xDE93, 0xDE4F, 0xDE0B, 0xDDC7, 0xDD82, 0xDD3D, 0xDCF8, 0xDCB3, 0xDC6E, 0xDC28, 0xDBE2, 0xDB9C, 0xDB56, 0xDB0F, 0xDAC9, 0xDA82, 0xDA3A, 0xD9F3, 0xD9AB, 0xD964, 0xD91B, 0xD8D3, 0xD88B, 0xD842, 0xD7F9, 0xD7B0, 0xD767, 0xD71D, 0xD6D3, 0xD689, 0xD63F, 0xD5F5, 0xD5AA, 0xD55F, 0xD514, 0xD4C9, 0xD47E, 0xD432, 0xD3E6, 0xD39A, 0xD34E, 0xD302, 0xD2B5, 0xD268, 0xD21B, 0xD1CE, 0xD181, 0xD133, 0xD0E5, 0xD097, 0xD049, 0xCFFB, 0xCFAC, 0xCF5D, 0xCF0E, 0xCEBF, 0xCE70, 0xCE20, 0xCDD0, 0xCD81, 0xCD30, 0xCCE0, 0xCC90, 0xCC3F, 0xCBEE, 0xCB9D, 0xCB4C, 0xCAFB, 0xCAA9, 0xCA57, 0xCA05, 0xC9B3, 0xC961, 0xC90F, 0xC8BC, 0xC869, 0xC816, 0xC7C3, 0xC770, 0xC71C, 0xC6C8, 0xC675, 0xC621, 0xC5CC, 0xC578, 0xC524, 0xC4CF, 0xC47A, 0xC425, 0xC3D0, 0xC37A, 0xC325, 0xC2CF, 0xC279, 0xC224, 0xC1CD, 0xC177, 0xC121, 0xC0CA, 0xC073, 0xC01C, 0xBFC5, 0xBF6E, 0xBF17, 0xBEBF, 0xBE67, 0xBE0F, 0xBDB7, 0xBD5F, 0xBD07, 0xBCAF, 0xBC56, 0xBBFD, 0xBBA4, 0xBB4B, 0xBAF2, 0xBA99, 0xBA3F, 0xB9E6, 0xB98C, 0xB932, 0xB8D8, 0xB87E, 0xB824, 0xB7C9, 0xB76F, 0xB714, 0xB6B9, 0xB65E, 0xB603, 0xB5A8, 0xB54D, 0xB4F1, 0xB496, 0xB43A, 0xB3DE, 0xB382, 0xB326, 0xB2CA, 0xB26E, 0xB211, 0xB1B5, 0xB158, 0xB0FB, 0xB09E, 0xB041, 0xAFE4, 0xAF87, 0xAF29, 0xAECC, 0xAE6E, 0xAE10, 0xADB3, 0xAD55, 0xACF6, 0xAC98, 0xAC3A, 0xABDC, 0xAB7D, 0xAB1F, 0xAAC0, 0xAA61, 0xAA02, 0xA9A3, 0xA944, 0xA8E5, 0xA885, 0xA826, 0xA7C7, 0xA767, 0xA707, 0xA6A7, 0xA648, 0xA5E8, 0xA588, 0xA527, 0xA4C7, 0xA467, 0xA406, 0xA3A6, 0xA345, 0xA2E5, 0xA284, 0xA223, 0xA1C2, 0xA161, 0xA100, 0xA09F, 0xA03E, 0x9FDC, 0x9F7B, 0x9F19, 0x9EB8, 0x9E56, 0x9DF4, 0x9D93, 0x9D31, 0x9CCF, 0x9C6D, 0x9C0B, 0x9BA9, 0x9B47, 0x9AE4, 0x9A82, 0x9A20, 0x99BD, 0x995B, 0x98F8, 0x9895, 0x9833, 0x97D0, 0x976D, 0x970A, 0x96A7, 0x9645, 0x95E1, 0x957E, 0x951B, 0x94B8, 0x9455, 0x93F2, 0x938E, 0x932B, 0x92C7, 0x9264, 0x9201, 0x919D, 0x9139, 0x90D6, 0x9072, 0x900E, 0x8FAB, 0x8F47, 0x8EE3, 0x8E7F, 0x8E1B, 0x8DB7, 0x8D53, 0x8CEF, 0x8C8B, 0x8C27, 0x8BC3, 0x8B5F, 0x8AFB, 0x8A97, 0x8A32, 0x89CE, 0x896A, 0x8906, 0x88A1, 0x883D, 0x87D9, 0x8774, 0x8710, 0x86AC, 0x8647, 0x85E3, 0x857E, 0x851A, 0x84B6, 0x8451, 0x83ED, 0x8388, 0x8324, 0x82BF, 0x825B, 0x81F6, 0x8192, 0x812D, 0x80C9, 0x8064, 0x8000, 0x7F9B, 0x7F36, 0x7ED2, 0x7E6D, 0x7E09, 0x7DA4, 0x7D40, 0x7CDB, 0x7C77, 0x7C12, 0x7BAE, 0x7B49, 0x7AE5, 0x7A81, 0x7A1C, 0x79B8, 0x7953, 0x78EF, 0x788B, 0x7826, 0x77C2, 0x775E, 0x76F9, 0x7695, 0x7631, 0x75CD, 0x7568, 0x7504, 0x74A0, 0x743C, 0x73D8, 0x7374, 0x7310, 0x72AC, 0x7248, 0x71E4, 0x7180, 0x711C, 0x70B8, 0x7054, 0x6FF1, 0x6F8D, 0x6F29, 0x6EC6, 0x6E62, 0x6DFE, 0x6D9B, 0x6D38, 0x6CD4, 0x6C71, 0x6C0D, 0x6BAA, 0x6B47, 0x6AE4, 0x6A81, 0x6A1E, 0x69BA, 0x6958, 0x68F5, 0x6892, 0x682F, 0x67CC, 0x676A, 0x6707, 0x66A4, 0x6642, 0x65DF, 0x657D, 0x651B, 0x64B8, 0x6456, 0x63F4, 0x6392, 0x6330, 0x62CE, 0x626C, 0x620B, 0x61A9, 0x6147, 0x60E6, 0x6084, 0x6023, 0x5FC1, 0x5F60, 0x5EFF, 0x5E9E, 0x5E3D, 0x5DDC, 0x5D7B, 0x5D1A, 0x5CBA, 0x5C59, 0x5BF9, 0x5B98, 0x5B38, 0x5AD8, 0x5A77, 0x5A17, 0x59B7, 0x5958, 0x58F8, 0x5898, 0x5838, 0x57D9, 0x577A, 0x571A, 0x56BB, 0x565C, 0x55FD, 0x559E, 0x553F, 0x54E0, 0x5482, 0x5423, 0x53C5, 0x5367, 0x5309, 0x52AA, 0x524C, 0x51EF, 0x5191, 0x5133, 0x50D6, 0x5078, 0x501B, 0x4FBE, 0x4F61, 0x4F04, 0x4EA7, 0x4E4A, 0x4DEE, 0x4D91, 0x4D35, 0x4CD9, 0x4C7D, 0x4C21, 0x4BC5, 0x4B69, 0x4B0E, 0x4AB2, 0x4A57, 0x49FC, 0x49A1, 0x4946, 0x48EB, 0x4890, 0x4836, 0x47DB, 0x4781, 0x4727, 0x46CD, 0x4673, 0x4619, 0x45C0, 0x4566, 0x450D, 0x44B4, 0x445B, 0x4402, 0x43A9, 0x4350, 0x42F8, 0x42A0, 0x4248, 0x41F0, 0x4198, 0x4140, 0x40E8, 0x4091, 0x403A, 0x3FE3, 0x3F8C, 0x3F35, 0x3EDE, 0x3E88, 0x3E32, 0x3DDB, 0x3D86, 0x3D30, 0x3CDA, 0x3C85, 0x3C2F, 0x3BDA, 0x3B85, 0x3B30, 0x3ADB, 0x3A87, 0x3A33, 0x39DE, 0x398A, 0x3937, 0x38E3, 0x388F, 0x383C, 0x37E9, 0x3796, 0x3743, 0x36F0, 0x369E, 0x364C, 0x35FA, 0x35A8, 0x3556, 0x3504, 0x34B3, 0x3462, 0x3411, 0x33C0, 0x336F, 0x331F, 0x32CF, 0x327E, 0x322F, 0x31DF, 0x318F, 0x3140, 0x30F1, 0x30A2, 0x3053, 0x3004, 0x2FB6, 0x2F68, 0x2F1A, 0x2ECC, 0x2E7E, 0x2E31, 0x2DE4, 0x2D97, 0x2D4A, 0x2CFD, 0x2CB1, 0x2C65, 0x2C19, 0x2BCD, 0x2B81, 0x2B36, 0x2AEB, 0x2AA0, 0x2A55, 0x2A0A, 0x29C0, 0x2976, 0x292C, 0x28E2, 0x2898, 0x284F, 0x2806, 0x27BD, 0x2774, 0x272C, 0x26E4, 0x269B, 0x2654, 0x260C, 0x25C5, 0x257D, 0x2536, 0x24F0, 0x24A9, 0x2463, 0x241D, 0x23D7, 0x2391, 0x234C, 0x2307, 0x22C2, 0x227D, 0x2238, 0x21F4, 0x21B0, 0x216C, 0x2128, 0x20E5, 0x20A2, 0x205F, 0x201C, 0x1FDA, 0x1F97, 0x1F55, 0x1F14, 0x1ED2, 0x1E91, 0x1E50, 0x1E0F, 0x1DCE, 0x1D8E, 0x1D4E, 0x1D0E, 0x1CCE, 0x1C8F, 0x1C50, 0x1C11, 0x1BD2, 0x1B94, 0x1B55, 0x1B17, 0x1ADA, 0x1A9C, 0x1A5F, 0x1A22, 0x19E5, 0x19A9, 0x196C, 0x1930, 0x18F5, 0x18B9, 0x187E, 0x1843, 0x1808, 0x17CE, 0x1793, 0x1759, 0x1720, 0x16E6, 0x16AD, 0x1674, 0x163B, 0x1603, 0x15CA, 0x1592, 0x155B, 0x1523, 0x14EC, 0x14B5, 0x147E, 0x1448, 0x1412, 0x13DC, 0x13A6, 0x1371, 0x133C, 0x1307, 0x12D2, 0x129E, 0x126A, 0x1236, 0x1202, 0x11CF, 0x119C, 0x1169, 0x1137, 0x1105, 0x10D3, 0x10A1, 0x1070, 0x103E, 0x100D, 0x0FDD, 0x0FAD, 0x0F7C, 0x0F4D, 0x0F1D, 0x0EEE, 0x0EBF, 0x0E90, 0x0E62, 0x0E34, 0x0E06, 0x0DD8, 0x0DAB, 0x0D7E, 0x0D51, 0x0D24, 0x0CF8, 0x0CCC, 0x0CA1, 0x0C75, 0x0C4A, 0x0C1F, 0x0BF5, 0x0BCA, 0x0BA0, 0x0B77, 0x0B4D, 0x0B24, 0x0AFB, 0x0AD3, 0x0AAA, 0x0A82, 0x0A5A, 0x0A33, 0x0A0C, 0x09E5, 0x09BE, 0x0998, 0x0972, 0x094C, 0x0927, 0x0901, 0x08DD, 0x08B8, 0x0894, 0x0870, 0x084C, 0x0828, 0x0805, 0x07E2, 0x07C0, 0x079D, 0x077B, 0x075A, 0x0738, 0x0717, 0x06F6, 0x06D6, 0x06B5, 0x0696, 0x0676, 0x0656, 0x0637, 0x0619, 0x05FA, 0x05DC, 0x05BE, 0x05A0, 0x0583, 0x0566, 0x0549, 0x052D, 0x0511, 0x04F5, 0x04D9, 0x04BE, 0x04A3, 0x0488, 0x046E, 0x0454, 0x043A, 0x0421, 0x0407, 0x03EF, 0x03D6, 0x03BE, 0x03A6, 0x038E, 0x0377, 0x0360, 0x0349, 0x0332, 0x031C, 0x0306, 0x02F1, 0x02DB, 0x02C6, 0x02B2, 0x029D, 0x0289, 0x0276, 0x0262, 0x024F, 0x023C, 0x022A, 0x0217, 0x0205, 0x01F4, 0x01E2, 0x01D1, 0x01C1, 0x01B0, 0x01A0, 0x0190, 0x0181, 0x0172, 0x0163, 0x0154, 0x0146, 0x0138, 0x012A, 0x011D, 0x0110, 0x0103, 0x00F6, 0x00EA, 0x00DE, 0x00D3, 0x00C8, 0x00BD, 0x00B2, 0x00A8, 0x009E, 0x0094, 0x008B, 0x0082, 0x0079, 0x0070, 0x0068, 0x0060, 0x0059, 0x0052, 0x004B, 0x0044, 0x003E, 0x0038, 0x0032, 0x002D, 0x0027, 0x0023, 0x001E, 0x001A, 0x0016, 0x0013, 0x000F, 0x000C, 0x000A, 0x0008, 0x0006, 0x0004, 0x0002, 0x0001, 0x0001, 0x0000, 0x0000, 0x0000, 0x0001, 0x0001, 0x0002, 0x0004, 0x0006, 0x0008, 0x000A, 0x000C, 0x000F, 0x0013, 0x0016, 0x001A, 0x001E, 0x0023, 0x0027, 0x002D, 0x0032, 0x0038, 0x003E, 0x0044, 0x004B, 0x0052, 0x0059, 0x0060, 0x0068, 0x0070, 0x0079, 0x0082, 0x008B, 0x0094, 0x009E, 0x00A8, 0x00B2, 0x00BD, 0x00C8, 0x00D3, 0x00DE, 0x00EA, 0x00F6, 0x0103, 0x0110, 0x011D, 0x012A, 0x0138, 0x0146, 0x0154, 0x0163, 0x0172, 0x0181, 0x0190, 0x01A0, 0x01B0, 0x01C1, 0x01D1, 0x01E2, 0x01F4, 0x0205, 0x0217, 0x022A, 0x023C, 0x024F, 0x0262, 0x0276, 0x0289, 0x029D, 0x02B2, 0x02C6, 0x02DB, 0x02F1, 0x0306, 0x031C, 0x0332, 0x0349, 0x0360, 0x0377, 0x038E, 0x03A6, 0x03BE, 0x03D6, 0x03EF, 0x0407, 0x0421, 0x043A, 0x0454, 0x046E, 0x0488, 0x04A3, 0x04BE, 0x04D9, 0x04F5, 0x0511, 0x052D, 0x0549, 0x0566, 0x0583, 0x05A0, 0x05BE, 0x05DC, 0x05FA, 0x0619, 0x0637, 0x0656, 0x0676, 0x0696, 0x06B5, 0x06D6, 0x06F6, 0x0717, 0x0738, 0x075A, 0x077B, 0x079D, 0x07C0, 0x07E2, 0x0805, 0x0828, 0x084C, 0x0870, 0x0894, 0x08B8, 0x08DD, 0x0901, 0x0927, 0x094C, 0x0972, 0x0998, 0x09BE, 0x09E5, 0x0A0C, 0x0A33, 0x0A5A, 0x0A82, 0x0AAA, 0x0AD3, 0x0AFB, 0x0B24, 0x0B4D, 0x0B77, 0x0BA0, 0x0BCA, 0x0BF5, 0x0C1F, 0x0C4A, 0x0C75, 0x0CA1, 0x0CCC, 0x0CF8, 0x0D24, 0x0D51, 0x0D7E, 0x0DAB, 0x0DD8, 0x0E06, 0x0E34, 0x0E62, 0x0E90, 0x0EBF, 0x0EEE, 0x0F1D, 0x0F4D, 0x0F7C, 0x0FAD, 0x0FDD, 0x100D, 0x103E, 0x1070, 0x10A1, 0x10D3, 0x1105, 0x1137, 0x1169, 0x119C, 0x11CF, 0x1202, 0x1236, 0x126A, 0x129E, 0x12D2, 0x1307, 0x133C, 0x1371, 0x13A6, 0x13DC, 0x1412, 0x1448, 0x147E, 0x14B5, 0x14EC, 0x1523, 0x155B, 0x1592, 0x15CA, 0x1603, 0x163B, 0x1674, 0x16AD, 0x16E6, 0x1720, 0x1759, 0x1793, 0x17CE, 0x1808, 0x1843, 0x187E, 0x18B9, 0x18F5, 0x1930, 0x196C, 0x19A9, 0x19E5, 0x1A22, 0x1A5F, 0x1A9C, 0x1ADA, 0x1B17, 0x1B55, 0x1B94, 0x1BD2, 0x1C11, 0x1C50, 0x1C8F, 0x1CCE, 0x1D0E, 0x1D4E, 0x1D8E, 0x1DCE, 0x1E0F, 0x1E50, 0x1E91, 0x1ED2, 0x1F14, 0x1F55, 0x1F97, 0x1FDA, 0x201C, 0x205F, 0x20A2, 0x20E5, 0x2128, 0x216C, 0x21B0, 0x21F4, 0x2238, 0x227D, 0x22C2, 0x2307, 0x234C, 0x2391, 0x23D7, 0x241D, 0x2463, 0x24A9, 0x24F0, 0x2536, 0x257D, 0x25C5, 0x260C, 0x2654, 0x269B, 0x26E4, 0x272C, 0x2774, 0x27BD, 0x2806, 0x284F, 0x2898, 0x28E2, 0x292C, 0x2976, 0x29C0, 0x2A0A, 0x2A55, 0x2AA0, 0x2AEB, 0x2B36, 0x2B81, 0x2BCD, 0x2C19, 0x2C65, 0x2CB1, 0x2CFD, 0x2D4A, 0x2D97, 0x2DE4, 0x2E31, 0x2E7E, 0x2ECC, 0x2F1A, 0x2F68, 0x2FB6, 0x3004, 0x3053, 0x30A2, 0x30F1, 0x3140, 0x318F, 0x31DF, 0x322F, 0x327E, 0x32CF, 0x331F, 0x336F, 0x33C0, 0x3411, 0x3462, 0x34B3, 0x3504, 0x3556, 0x35A8, 0x35FA, 0x364C, 0x369E, 0x36F0, 0x3743, 0x3796, 0x37E9, 0x383C, 0x388F, 0x38E3, 0x3937, 0x398A, 0x39DE, 0x3A33, 0x3A87, 0x3ADB, 0x3B30, 0x3B85, 0x3BDA, 0x3C2F, 0x3C85, 0x3CDA, 0x3D30, 0x3D86, 0x3DDB, 0x3E32, 0x3E88, 0x3EDE, 0x3F35, 0x3F8C, 0x3FE3, 0x403A, 0x4091, 0x40E8, 0x4140, 0x4198, 0x41F0, 0x4248, 0x42A0, 0x42F8, 0x4350, 0x43A9, 0x4402, 0x445B, 0x44B4, 0x450D, 0x4566, 0x45C0, 0x4619, 0x4673, 0x46CD, 0x4727, 0x4781, 0x47DB, 0x4836, 0x4890, 0x48EB, 0x4946, 0x49A1, 0x49FC, 0x4A57, 0x4AB2, 0x4B0E, 0x4B69, 0x4BC5, 0x4C21, 0x4C7D, 0x4CD9, 0x4D35, 0x4D91, 0x4DEE, 0x4E4A, 0x4EA7, 0x4F04, 0x4F61, 0x4FBE, 0x501B, 0x5078, 0x50D6, 0x5133, 0x5191, 0x51EF, 0x524C, 0x52AA, 0x5309, 0x5367, 0x53C5, 0x5423, 0x5482, 0x54E0, 0x553F, 0x559E, 0x55FD, 0x565C, 0x56BB, 0x571A, 0x577A, 0x57D9, 0x5838, 0x5898, 0x58F8, 0x5958, 0x59B7, 0x5A17, 0x5A77, 0x5AD8, 0x5B38, 0x5B98, 0x5BF9, 0x5C59, 0x5CBA, 0x5D1A, 0x5D7B, 0x5DDC, 0x5E3D, 0x5E9E, 0x5EFF, 0x5F60, 0x5FC1, 0x6023, 0x6084, 0x60E6, 0x6147, 0x61A9, 0x620B, 0x626C, 0x62CE, 0x6330, 0x6392, 0x63F4, 0x6456, 0x64B8, 0x651B, 0x657D, 0x65DF, 0x6642, 0x66A4, 0x6707, 0x676A, 0x67CC, 0x682F, 0x6892, 0x68F5, 0x6958, 0x69BA, 0x6A1E, 0x6A81, 0x6AE4, 0x6B47, 0x6BAA, 0x6C0D, 0x6C71, 0x6CD4, 0x6D38, 0x6D9B, 0x6DFE, 0x6E62, 0x6EC6, 0x6F29, 0x6F8D, 0x6FF1, 0x7054, 0x70B8, 0x711C, 0x7180, 0x71E4, 0x7248, 0x72AC, 0x7310, 0x7374, 0x73D8, 0x743C, 0x74A0, 0x7504, 0x7568, 0x75CD, 0x7631, 0x7695, 0x76F9, 0x775E, 0x77C2, 0x7826, 0x788B, 0x78EF, 0x7953, 0x79B8, 0x7A1C, 0x7A81, 0x7AE5, 0x7B49, 0x7BAE, 0x7C12, 0x7C77, 0x7CDB, 0x7D40, 0x7DA4, 0x7E09, 0x7E6D, 0x7ED2, 0x7F36, 0x7F9B, }; void Tone_gen_start(unsigned int dph) { phase = 0; dphase = dph; }
__inline unsigned short Get_tone_sample(void) { phase += dphase; return sin_tbl[phase >> (32-11)]; // Сдвигает чтобы осталось 11 бит согласно размеру таблицы }
void Fill_sound_buf(INT16U *abuf, int sz) { int i; for (i=0;i<sz;i++) { *abuf = Get_tone_sample(); abuf++; }
}
|
|
|
|
|
Nov 29 2011, 07:13
|
Группа: Новичок
Сообщений: 1
Регистрация: 6-02-07
Пользователь №: 25 092

|
Цитата(-=Женек=- @ Oct 21 2011, 12:02)  Господа, кому-нибудь приходилось заниматься аппаратным синтезом звука? Имеется контроллер AVR хочется к его ШИМу присоединить динамик и использовать его в качестве некоего сигнализатора.
Другими словами - прямоугольные ипульсы - жесткий жестяной писк, синусоида - более мягкий звук, а вот синусоида с "рюшечками" - уже что-то более хитрое.
Может быть у кого есть какие-то наработки в аппаратном синтезе звука, точнее не звука, а отдельных его нот? ПРивитив в виде писка прямоугольных импульсов уже поднадоел. Хочу поиграться с ШИМ.
Заранее спасибо. Баловались пару-тройку лет назад. Заведите мегу128 с кварцем на 14...16 МГц, подключите лопух через транзистор на OC1A (вывод 15) и сыграйте эту программу. (пример для Codevision 1.25.8) http://www.youtube.com/watch?v=dtV1chilwxU - вот звучёк с пилообразным сэмплом  Программа навеяна даташитом на DDS-ки ))) В аттаче HEX готовый к прошивке. CODE #include <mega128.h> #include <delay.h> #include <math.h> char sin_samples[255]; enum{ SINE=0, TRIANGLE, SAW, RECTANGLE }; void generate_sample(char t) { char a; switch(t) { case SINE: for(a=0;a<255;a++) sin_samples[a]=127.0*(1+sin((2*PI/255.0)*a)); break; case TRIANGLE: for (a=0; a<127; a++) sin_samples[a]=a*2; for (;a<255;a++) sin_samples[a]=255-(a-127)*2; break; case SAW: for (a=0; a<255; a++) sin_samples[a]=a; break; case RECTANGLE: for (a=0; a<127; a++) sin_samples[a]=0; for (; a<255; a++) sin_samples[a]=0xff; break; } } /********************************************************/ #define SAMPLE_RATE (57600.0) #define SAMPLE_PERIOD (255) #define TICKS_ROW (2600) #define ROWS (64) int row=0; int ticks_row=0; #define C (261.6) //note freq #define D (293.7) // #define E (329.6) #define F (349.2) #define G (392.0) #define GD (415.0) #define A (440.0) #define B (494.0) flash float notes[64*4]={ E*12, A*3, 0, 100,//0 E*12, A*3, 0, 0, E*12, C*6, E*6, 0, E*12, 0, 0, 0, E*12, E*3, 0, 100,//4 E*12, E*3, 0, 0, C*12, C*6, E*6, 0, C*12, C*6, E*6, 0, D*12, GD*3, 0, 100,//8 0, GD*3, 0, 0, D*12, B*3, 0, 0, D*12, 0, E*6, 0, C*12, E*3, 000, 100,//12 C*12, E*3, 000, 0, B*6, B*3, E*6, 0, B*6, B*3, E*6, 0, A*6, A*3, E*6, 100,//16 A*6, A*3, E*6, 0, A*6, C*6, 0, 0, A*6, 0, E*6, 0, A*6, E*3, 0, 100,//20 A*6, E*3, 0, 0, C*12, C*6, E*6, 0, C*12, C*6, E*6, 0, E*12, A*3, E*6, 100,//24 E*12, A*3, 0, 0, E*12, 0, E*6, 0, E*12, C*6, 0, 0, D*12, E*3, 0, 100,//28 D*12, E*3, 0, 0, C*12, C*6, E*6, 0, C*12, C*6, E*6, 0, B*6, GD*3, 0, 100,//32 B*6, GD*3, 0, 0, B*6, B*3, 0, 0, B*6, 0, E*6, 0, B*6, E*3, 0, 100,//36 B*6, E*3, 0, 0, C*12, B*3, E*6, 0, C*12, B*3, E*6, 0, D*12, GD*3, 0, 100, //40 D*12, GD*3, 0, 0, D*12, B*3, 0, 0, D*12, 0, E*6, 0, E*12, E*3, 0, 100,//44 E*12, E*3, 0, 0, E*12, B*3, E*6, 0, E*12, B*3, E*6, 0, C*12, A*3, 0, 100,//48 C*12, A*3, 0, 0, C*12, C*6, 0, 0, C*12, 0, E*6, 0, A*6, E*3, E*6, 100,//52 A*6, E*3, 0, 0, A*6, C*6, E*6, 0, 0, C*6, E*6, 0, A*6, A*3, 0, 100,//56 A*6, A*3, 0, 0, A*6, 0, E*6, 0, A*6, C*6, 0, 0, A*6, E*3, 0, 100,//60 A*6, E*3, 0, 0, A*6, C*6, E*6, 0, A*6, C*6, E*6, 0 }; unsigned int phase_fix=0, phase_increment_fix=0, phase2_fix=0, phase_increment2_fix=0, phase3_fix=0, phase_increment3_fix=0; char load_notes=0; /// Timer 1 overflow interrupt service routine interrupt [TIM1_OVF] void timer1_ovf_isr(void) { //note loader if (ticks_row--); else { load_notes=1; //грузим ноты ticks_row=TICKS_ROW; } // месим три канала OCR1AL = (char)((int)((int)sin_samples[(char)(phase_fix>>8)]+ (int)sin_samples[(char)(phase2_fix>>8)]+ (int)sin_samples[(char)(phase3_fix>>8)])>>2); //DDS if ((phase_fix+=phase_increment_fix)>(SAMPLE_PERIOD-1)<<8) phase_fix-=(SAMPLE_PERIOD-1)<<8; if ((phase2_fix+=phase_increment2_fix)>(SAMPLE_PERIOD-1)<<8) phase2_fix-=(SAMPLE_PERIOD-1)<<8; if ((phase3_fix+=phase_increment3_fix)>(SAMPLE_PERIOD-1)<<8) phase3_fix-=(SAMPLE_PERIOD-1)<<8; } /********************************************************/ void main(void) { char current_sample=0; PORTB=0x00; DDRB=0x20; //OC1A // Timer/Counter 1 initialization // Clock source: System Clock // Mode: Ph. & fr. cor. PWM top=ICR1 // OC1A output: Non-Inv. // Timer 1 Overflow Interrupt: On TCCR1A=0x80; TCCR1B=0x11; TCNT1H=0x00; TCNT1L=0x00; ICR1H=0x01; ICR1L=0x90; OCR1AH=0x00; OCR1AL=0x7F; //medium OCR1BH=0x00; OCR1BL=0x00; OCR1CH=0x00; OCR1CL=0x00; // Timer(s)/Counter(s) Interrupt(s) initialization TIMSK=0x04; ETIMSK=0x00; generate_sample(SINE); #asm("sei"); while(1) { if (load_notes) { load_notes=0; phase_increment3_fix= phase_increment2_fix= phase_increment_fix=(unsigned int)(256*((float)SAMPLE_PERIOD/(float)SAMPLE_RATE)); #define multfixSlow(a,  ((unsigned int)((((long)(a))*((long)(  ))>>8)) //multiply two fixed # phase_increment_fix=multfixSlow(phase_increment_fix,((long)notes[row]*128)); phase_increment2_fix=multfixSlow(phase_increment2_fix,((long)notes[row+1]*128)); phase_increment3_fix=multfixSlow(phase_increment3_fix,((long)notes[row+2]*128)); if((row+=4)>ROWS*4-1) { row=0; if(++current_sample>RECTANGLE) current_sample=0; generate_sample(current_sample); } } }; }
|
|
|
|
|
Feb 13 2012, 09:53
|
Участник

Группа: Участник
Сообщений: 15
Регистрация: 24-12-05
Пользователь №: 12 627

|
Sytrus - хороший программый ситезатор (код закрытый) с понятным принципом работы и почти 500 предустановками для имитации реальных иструментов.
|
|
|
|
|
May 30 2012, 08:15
|
Участник

Группа: Участник
Сообщений: 55
Регистрация: 23-08-06
Пользователь №: 19 752

|
Древняя тема, но все-же отмечусь. Если нужен простой "пик", но меандр не устраивает своей незатейливостью и назойливостью, его можно разнообразить добавив к нему второй тон. Если оба тона будут в косонансе, то звук получится более благозвучный и "глубокий". Можно мешать не два тона, а больше. И в разных пропорциях. Простор для фантазии.
Сигналы надо именно складывать, а не умножать. Если звук надо выводить через один логический выход, наверно можно попробовать сделать "ИЛИ", хотя я не пробовал. Если сложить два меандра, то результат будет трехуровневый. Можно 0 и 2 представить, соответсвенно, 0 и 1 на логическом выходе, а 1 представить ШИМ-ом с меандром на высокой частоте, которая после зарежется простым RC-фильтром или самим динамиком. В общем извращаться можно массой способов.
За синусоидальностью тонов гнаться, ИМХО, смысла нет. Синус сам по себе достаточно тоскливый звук.
Традиционно косонансами считаются унисон, октава, квинта, кварта, терции и т. д. Ниже пример, как эти частоты посчитать.
// Частоты тонального сигнала #define note_re 293.66 #define note_mi 329.63 #define note_fa 349.23 #define note_sol 392.00 #define note_la 440.00 #define main_tone note_fa // Частота основного тона
#define unison *1/1 // 1:1 - унисон #define octave *1/2 // 1:2 - октава #define quint *2/3 // 2:3 - квинта #define quart *3/4 // 3:4 - кварта #define tierce *4/5 // 4:5 - терция
// Частоты первого и второго тона #define F_tone1 (main_tone unison ) #define F_tone2 (main_tone tierce )
Дальше генерация этих двух тонов, кому как удобно.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|