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

Вниз

Как проиграть ноту   Найти похожие ветки 

 
Oxy ©   (2003-03-18 10:00) [0]

Короче мне надо проиграть какую либо ноту. У меня есть таблица нот и требуется ф-ция (не знаю есть ли такая стандартная) для воспроизведения звука с частотой X герц.
Или подскажите как работать с MIDI, непосредственно с нотами.


 
Digitman ©   (2003-03-18 11:24) [1]

какое отношение MIDI имеет к "короче" частоте ? MIDI-нота - это команда управления синтезатором, и частота твоя ему (синтезатору) не требуется вовсе, синтезатор сам знает, как ее сгенерировать


 
AlexKniga ©   (2003-03-18 11:43) [2]


Unit Music;
{--------------------------}Interface
Var Duration: Word;
{Type TNote=(Pause,
C1, Cs1, D1, Ds1, E1, F1, Fs1, G1, Gs1, A1, As1, B1,
C2, Cs2, D2, Ds2, E2, F2, Fs2, G2, Gs2, A2, As2, B2);}
Type TNote=(Pause,
Do1, DoD1, Re1, ReD1, Mi1, Fa1, FaD1, Sol1,SolD1,La1, LaD1, Si1,
Do2, DoD2, Re2, ReD2, Mi2, Fa2, FaD2, Sol2,SolD2,La2, LaD2, Si2);
{перечисление нот
*1, *2 - первая, вторая октавы
??D? (?s?) - диез (sharp)}
TDuration = Single;
TFullNote = Record
N: TNote; {Нота}
D: TDuration {Длительность}
End;

{Пример вся 1ая октава + До второй}
{Const Melody0: Array [1..8] of TFullNote =
( (N: Do1; D: 1), (N: Re1; D: 1), (N: Mi1; D: 1), (N: Fa1; D: 1),
(N: Sol1;D: 1), (N: La1; D: 1), (N: Si1; D: 1), (N: Do2; D: 1) );}

Procedure PlayNote (FullNote: TFullNote);
Procedure Play (Melody: Array of TFullNote);

{--------------------------}Implementation
Uses {CRT,} Utility;
Var Base, Trans: Double;

Procedure Sound(Frequency: Word);
Asm
push ebx
mov bx, ax
mov ax, 34DDh
mov dx, 0012h
cmp dx, bx
jnc @@2
div bx
mov bx, ax
in al, 61h
test al, 3
jnz @@1
or al, 3
out 61h, al
mov al, 0B6h
out 43h, al
@@1:
mov al, bl
out 42h, al
mov al, bh
out 42h, al
@@2:
pop ebx
End;

Procedure NoSound;
Asm
push ebx
in al, 61h
and al, 0FCh
out 61h, al
pop ebx
End;

Procedure Beep(Frequency, Duration: Integer);
Asm
push edx
push eax
mov eax, Win32Platform
cmp eax, VER_PLATFORM_WIN32_NT
jne @@9X
call Windows.Beep
ret
@@9X:
pop eax
pop edx
push ebx
push edx
mov bx, ax
mov ax, 34DDh
mov dx, 0012h
cmp dx, bx
jnc @@2
div bx
mov bx, ax
in al, 61h
test al, 3
jnz @@1
or al, 3
out 61h, al
mov al, 0B6h
out 43h, al
@@1:
mov al, bl
out 42h, al
mov al, bh
out 42h, al
call Windows.Sleep
in al, 61h
and al, 0FCh
out 61h, al
jmp @@3
@@2:
pop edx
@@3:
pop ebx
End;


Procedure PlayNote (FullNote: TFullNote);
Begin
With FullNote do
Begin
If N=Pause
Then NoSound
Else Sound( Round( Base * Stp(Trans, Ord(N)) ) );
Delay( Duration / D )
End
End;

Procedure Play (Melody: Array of TFullNote);
Var i: Word;
Begin
For i:=Low(Melody) to High(Melody) do
PlayNote(Melody[i]);
NoSound
End;

Begin
Trans:=Exp(Ln(2)/12);
Base:=440*Stp(Trans, -10);
Duration:= 400;
End.


 
Oxy ©   (2003-03-18 16:04) [3]

2 Digitman ©
Мне надо вспроизводить именно ноты.Но я могу генерировать ноты сам используя ф-ю для воспроизведения звука частотой X герц. Но можно использовать и MIDI. Тогда емуляция не будет нужна. Весь вопрос в том как? Что для этого использовать, какие ф-ции и т.д.

2 AlexKniga
Спасибо, но это своими силами. А через стандартные виндовые API никак нельзя? Просто у меня есть опасения, что этот низкоуровневый код не обязательно будет работать под всеми виндами и на всех машинах.


 
Oxy ©   (2003-03-18 16:55) [4]

2 AexKniga

А что за модуль Utility?


 
Digitman ©   (2003-03-19 08:49) [5]


> Oxy


на то есть готовая технология DXi... и готовые DXi-синтезаторы а-ля DreamStation от TTS ... DXi-синтезатор сам все сделает, достаточно управлять им по MIDI-интерфейсу


 
[Baradoo]   (2003-03-19 21:38) [6]

Че за модуль UTILITY?



Страницы: 1 вся ветка

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

Наверх




Память: 0.48 MB
Время: 0.019 c
3-7358
Alexsus
2003-06-10 13:54
2003.07.03
Подскажите пожалуйста, как настроить DBGrid так


1-7377
Johny B.
2003-06-20 07:05
2003.07.03
ActiveX


3-7295
Rem
2003-06-08 20:16
2003.07.03
Конкатенация строк в SQL-запросе, если одна из них NULL


7-7739
sashak
2003-04-23 18:22
2003.07.03
считать данные ссom-порта


3-7329
grifon_nn
2003-06-09 18:36
2003.07.03
Отчет в Excel