Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Media";
Текущий архив: 2003.07.03;
Скачать: [xml.tar.bz2];

Вниз

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

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

Форум: "Media";
Текущий архив: 2003.07.03;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.009 c
1-7493
Иванов Сергей
2003-06-21 10:32
2003.07.03
путаница с формами


1-7408
АлеКо
2003-06-23 08:16
2003.07.03
QReport


3-7316
anton2v
2003-06-09 16:31
2003.07.03
Процесс не может получить доступ к файлу


1-7421
manumba
2003-06-23 11:23
2003.07.03
Профессиональное использование ООП в Delphi.....литература


1-7412
Tayfun
2003-06-20 12:44
2003.07.03
Окно произвольной формы?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский