Форум: "Media";
Текущий архив: 2006.05.14;
Скачать: [xml.tar.bz2];
ВнизДрам-машина Найти похожие ветки
← →
Фео (2005-12-17 12:44) [0]Можете сказать, по какоим принципам устроена драм машина? (Всмысле как генерируются звуки) да и вообще описать, что это есть такое
← →
Digitman © (2005-12-17 14:08) [1]
> как генерируются звуки
их генерирует синтезатор (встроенный в драм-машину либо внешний)
> что это есть такое
прежде всего это - секвенсор, т.е. программа генерирующая и воспроизводящая последовательность команд управления синтезатором
← →
Фео (2005-12-17 15:55) [2]можно немного поподробнее, или инфу чтоль почитать где нить
← →
programania © (2005-12-18 23:23) [3]Драм-машина: устройство для создания и редактирования повторяющихся
музыкальных перкуссионных последовательностей
Виртуальная Драм-машина - программа для этого
Вот пример, замените в нем random на trackBar.position
и двигайте их по вкусу получится Драм-машина
Но один барабан долго не выдержать поэтому добавлено
немного мелодических инструментов
program drum;
uses Forms,mmSystem,dialogs,windows;
const
qDr=9; //используемые ударные
dr:array[1..qDr] of byte=(0,5,6,8,10,11,12,13,14);
qm=10; //используемые мелодические
mi:array[1..qm] of byte=(1,18,19,30,38,40,62,87,73,95);
var
hMidi,i :integer;
midimsg :integer;
uTimerID :uint=0;
md :array[1..4,1..32] of integer; //громкость ударных
di :array[1..4] of integer; //инструменты ударных
qt: integer=8; //число нот в такте
ni: integer=0; //номер инструмента
nd: integer=32; //номер играемого такта
qo: integer=0; //число прошедших отсчетов
dt: integer=12; //темп в 0.01 сек
pt: integer=0; //проиграно тактов
na: integer=0; //играемая нота акорда
PROCEDURE drumCreate;
var i,j:integer;
begin
//Создание такта ударных
i:=qt; while qt=i do qt:=2+random(5);
for i:=1 to 4 do begin
if i=1 then di[i]:=1 else di[i]:=dr[random(qDr)+1];
for j:=1 to qt do begin
case i of
1: if j=1 then md[i,j]:=100 else
if random(10)>5 then md[i,j]:=random(80)+20 else md[i,j]:=0;
2,3,4: if random(10)>6 then md[i,j]:=random(10)+i*16+(qt-j)*2 else md[i,j]:=0;
end;
end;
end;
end;
procedure FNTimeCallBack(uTimerID, uMessage: UINT;dwUser, dw1, dw2: DWORD) stdcall;
var a,d,nt,nn:integer;
begin
inc(qo);
if qo>dt then begin
//Новая доля такта nd
inc(nd);
if nd>qt then begin
nd:=1;
//смена формы такта
if pt mod 12=0 then begin drumCreate; ni:=mi[random(qm)+1] end;
inc(pt);
if na<>0 then begin
midimsg := $80 + (na * $100);
midiOutShortMsg (hmidi, midimsg);
end;
//запуск мелодического инструмента в начале такта
nn:=na;
while nn=na do na:=55+random(12)+1;
midimsg := $C0 + (ni* $100);
midiOutShortMsg (hmidi, midimsg);
midimsg := $90 + (na * $100) + (60 * $10000) + 0;
midiOutShortMsg (hmidi, midimsg);
end;
qo:=0;
for i:=1 to 4 do begin
nn:=md[i,nd];
if nn<>0 then begin
//Запуск ударного инструмента
midimsg := $99 + ((35+dr[i]) * $100) + ((nn) * $10000) + 0;
midiOutShortMsg (hmidi, midimsg);
end;
end;
end;
end;
begin
Application.Initialize;
randomize;
midiOutOpen(@hmidi, 0, 0, 0, 0);
uTimerID:=timeSetEvent (10,0,@FNTimeCallBack,0,TIME_PERIODIC);
showMessage("надоела?");
midiOutClose(hmidi);
if uTimerID<>0 then timeKillEvent(uTimerID);
end.
Страницы: 1 вся ветка
Форум: "Media";
Текущий архив: 2006.05.14;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.009 c