Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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
15-1145456846
geserx
2006-04-19 18:27
2006.05.14
Снесла курочка...


15-1145346910
Layner
2006-04-18 11:55
2006.05.14
Если из комп. ActiveX на веб странице реализовать POST посылку


3-1142515092
Aleksandr.
2006-03-16 16:18
2006.05.14
Как отскроллировать DBGrid на несколько записей?


2-1145784517
Mark86
2006-04-23 13:28
2006.05.14
как забить массив значений в Combobox?


2-1146066746
chai
2006-04-26 19:52
2006.05.14
Аналог IntToStr в Win API





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский