Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.05.14;
Скачать: CL | DM;

Вниз

Драм-машина   Найти похожие ветки 

 
Фео   (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 вся ветка

Текущий архив: 2006.05.14;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.038 c
9-1129620790
greg123
2005-10-18 11:33
2006.05.14
Помогите создать алгоритм генерации случайных чисел


2-1145863414
De
2006-04-24 11:23
2006.05.14
Хочу в потомке реструкторировать предка, возможно ли?


2-1145702703
SamProf
2006-04-22 14:45
2006.05.14
Как можно перечислить все компы в группе и получить список файлов


15-1145388753
Strate
2006-04-18 23:32
2006.05.14
Очень прикольная игра - COLOBOT


2-1146129825
Wolferio
2006-04-27 13:23
2006.05.14
Печать файлов