Для того, чтобы перевести модуль из одной частотной таблицы в другую недостаточно просто сменить байт, отвечающий за её номер - так сменятся только частоты нот, которые берутся из таблицы. Период огибающей, который задаётся не нотой (хотя мог бы!), а прямой записью периода останется прежним, и зазвучит фальшиво. Кроме того, поломает басы, извлекаемые Тон+Огибающая (где период тона и огибающей в определённом соотношении).
Корректный способ - это пропорциональный перевод периода огибающей для модулей в частотных таблицах SoundTracker и ASM =)
из ASM в ST:
STenv = (ASMenv * (1773400/1750000)) * 2^(1/6) )
из ST в ASM
ASMenv = (STenv* 1750000 / 1773400 / 2^(1/6) )
где
1750000 - это частота сопроцессора, для которой рассчитана табличка ASM.
1773400 - это частота сопроцессора, для которой рассчитана табличка SoundTracker.
2^(1/6), это ни что иное как 2^(1/12)*2^(1/12) - то есть корень двенадцатой степени из двух, во второй степени (то есть как раз та самая разница в два полутона между этими двумя табличками).
(эта коррекция в два полутона нужна оттого, что табличка SoundTracker рассчитана со смещением в 2 полутона: то, что в ней выглядит как C4 на самом деле звучит как Bb3 (A#3).)
ну и, естественно, 1750000 / 1773400 / 2^(1/6) это ни что иное как 1/(1773400/1750000)) * 2^(1/6)) =)
то есть:
STenv = ASMenv * 1,13747096941248 или
ASMenv = STenv * 0,879143316085256.
#4E F(asm) фа = 78dec
78 * 1,13747096941248 = ~89dec = #59hex = F(st) фа
В нижеследующей таблице присутствуют следующие данные:
Нота -> (период огибающей Hex) период огибающей Dec из таблицы ST, затем период огибающей, рассчитанный по формуле из таблички ASM в ST и отклонение.
На самом большом значащем периоде огибающей - отклонения очень маленькие, на более коротких периодах, которые обычно и используются для извлечения нот, погрешность будет ещё меньше.Код:C-1 -> (F0) 240 ST = 238 (ASM to ST) отклонение = 0.009 C#1 -> (E1) 225 ST = 224 (ASM to ST) отклонение = 0.004 D-1 -> (D6) 214 ST = 212 (ASM to ST) отклонение = 0.011 D#1 -> (C8) 200 ST = 200 (ASM to ST) отклонение = -0.001 E-1 -> (BE) 190 ST = 189 (ASM to ST) отклонение = 0.006 F-1 -> (B2) 178 ST = 179 (ASM to ST) отклонение = -0.003 F#1 -> (A8) 168 ST = 168 (ASM to ST) отклонение = -0.002 G-1 -> (9F) 159 ST = 159 (ASM to ST) отклонение = -0.002 G#1 -> (96) 150 ST = 150 (ASM to ST) отклонение = -0.001 A-1 -> (8E) 142 ST = 141 (ASM to ST) отклонение = 0.007 A#1 -> (86) 134 ST = 133 (ASM to ST) отклонение = 0.007 B-1 -> (7E) 126 ST = 126 (ASM to ST) отклонение = -0.002
(Но, разумеется, самым корректным и простым способом перевода периода огибающей - будет построение таблицы соответствия из 256 значений для одной частотной таблицы и, соответствующих им 256 значениям другой частотной таблицы.
Период огибающей, для генератора огибающей, соответствующий ноте - это ни что иное, как период ноты для генератора тона, поделёный на 16, таким образом в частотной таблице нот уже есть 96 значений, соответствующим нотам. Недостающие 160 промежуточных значений можно получить интерполяцией.
Возьмём два соседних значения, для
Таким образом, за 12 шагов (209-197) нам надо попасть из значения 240 в 255.Код:C-1 D1hex 209 dec (ASM) - 240 (ST) C#1 C5hex 197 dec (ASM) - 225 (ST)
то есть: каждое последующее значение у нас будет отличаться пот предыдущего на (225/240)^(1/кол-во шагов).)Код:ASM ST C-1 209 209 240 C#1 197 208 239 207 237 206 236 205 235 204 234 203 232 202 231 201 230 200 229 199 227 198 226 197 225
Ну да ладно, это всё понятно, рассчитать не сложно.
Внимание, вопрос!
Для каких значений частоты сопроцессора расчитаны таблички Pro tracker (0), и Real Sound (3).
При каких значениях частоты сопроцессора они звучат нормально? (максимально не-фальшиво). Имеют ли они смещения в полутонах (как SoundTracker)?


Ответить с цитированием
Размещение рекламы на форуме способствует его дальнейшему развитию 
Например, таблица ASM в этом случае идеально подходит для 1.75МГц (делитель 3344).
.