Сообщение от
newart
C моей стороны это как будет выглядеть?
как-то так:
Код:
hMixer = create_mixer(44100, 100000 /* размер буфера в семплах */);
hBeeper = create_render(hMixer, 3500000 /* тактовая частота, в которой меряется beeper_tick */ );
beeper_tick = 0;
hAY = create_ay(hMixer, 3500000);
ay_tick = 0;
// зададим какой-нибудь тон и пусть играет. больше регистры трогать не будем
set_reg(hAY, 1, 10);
set_reg(hAY, 8, 15);
set_reg(hAY, 7, 254);
begin:
// на бипере будем играть прерывистые гудки
// пошёл гудок
x=0
for i=0 to 1000000 step 500
update(hBeeper, beeper_tick);
set_volume(hBeeper, x, x); // ставим x в левый и правый канал
x = 5000-x; // инвертируем бит на бипере
beeper_tick = beeper_tick + 500; // 500 тактов между фронтами = 3.5khz
next i
// пошла пауза
beeper_tick = beeper_tick + 1000000
update(hBeeper, beeper_tick);
play(hMixer); // здесь play ничего не проиграет, потому что к миксеру привязано два устройства, а вывод прошёл только в одно (play играет семплы до минимального из update-тиков всех устройств на миксере)
// теперь играем AY
// поскольку мы договорились, что он будет играть ровный тон,
// пусть всё делает сам - регистры не трогаем
ay_tick = ay_tick + 2000000; // важно: со времененм не должно сильно отставать или убегать от beeper_tick
update(hAY, ay_tick);
play(hMixer); // выводим, сколько накопилось. в принципе, можно вызывать вообще после любого update() - хуже не будет
goto begin; // зацикливаем
beeper_tick и ay_tick - это 64-битные переменные. бейсик это поддерживает?
для использования в трекере тебе всё-таки придётся писать BASS-оподобный движок )) чтобы он сам крутился в цикле и делал нужные update() на девайсах, анализируя, какие семплы в каких каналах сейчас играют. всё это ещё должно быть интерактивным, играть от кнопок юзера. не пугает?