Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Speaker [D4, D5, Win95/98, NT4]


wHammer ©   (2001-11-30 13:05:00) 

Можно ли с ним работать из под Windows?


wHammer   (2001-12-07 08:44:00) [1]

to Dimka Maslov ©
Спасибо еще раз!


Dimka Maslov   (2001-12-06 11:23:00) [2]

Функция, приведённая выше иногда вызывала Ассess Violation, из-за непрвильной работы со стеком. Здесь этот дефект исправлен.

procedure Sound(Frequency, Duration: Integer);
asm
cmp Win32Platform, VER_PLATFORM_WIN32_NT
jne @@9X
push edx
push eax
call Windows.Beep
ret
@@9X:
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;


Digitman   (2001-12-06 09:38:00) [3]

Звуковые частоты в полутоновом интервале равномерно темперированного строя находятся в отношении "корень двенадцатой степени из двух", интервалов в октаве - 12 . Вот и вся "формула". Отсюда и "пляши".


Harlan   (2001-12-06 08:45:00) [4]

Помнится, когда-то видел функцию расчёта частоты по номеру ноты. Может кто-нибудь её знает? Киньте, пожалуйста.
Ля 1 октавы - 440Гц
Ля 2 октавы - 880Гц
Ля 3 октавы - 1760Гц
А вот как остальные ноты в октаве вычислить?


Adder   (2001-12-04 14:37:00) [5]

h=88;
hz:array[1..h] of word=(294,262,233,233,262,233,175,147,156,
156,196,175,147,175,233,262,294,294,294,262,233,262,
294,262,262,294,262,233,233,262,233,175,147,156,
175,196,175,147,175,233,262,294,349,349,294,233,262,
294,262,233,294,349,294,349,349,
294,349,294,349,311,392,311,392,392,
311,392,311,392,466,466,349,349,
294,294,262,233,262,294,349,392,
349,294,233,262,294,262,233,0);
dt:array[1..h] of word=(125,125,250,125,125,125,125,125,125,
125,125,125,125,250,125,125,250,250,125,125,125,125,
250,250,250,125,125,250,125,125,125,125,125,125,
125,125,125,125,250,125,125,250,250,125,125,125,125,
250,250,500,125,250,125,250,250,
125,250,125,500,125,250,125,250,250,
125,250,125,500,250,250,250,250,
250,250,250,125,125,125,250,125,
125,125,125,125,250,250,250,250);


wHammer   (2001-12-04 09:48:00) [6]

to Adder ©
Спасибо за мелодию, может быть есть еще какие-нибудь.


wHammer   (2001-12-04 09:44:00) [7]

Исправил в dll формат вызова register, какие-либо ошибки пропали, под NTServer также протестировал - работает.


wHammer   (2001-12-04 09:26:00) [8]

На Win2000 работает, только частоты не совпадают, да выдает ошибку после сигнала "Privileged Instruction".


Wizard_Ex   (2001-12-04 08:12:00) [9]

Только под NT ассемблер не пойдет
Так что будьте осторожны, грабли где-то рядом


Adder   (2001-12-03 17:00:00) [10]

hm=66;
//частоты
hzm:array[1..hm] of word=(
82,82,78,82,
87,82,73,65,
62,65,62,55,
110,104,110,124,
110,104,110,124,0,
131,124,110,104,
124,110,110,98,
93,82,98,87,
82,98,87,82,
73,65,62,55,
55,0,
131,124,110,104,
124,110,110,98,
87,82,98,87,
82,98,87,82,
73,0,
65,62,55,55,0
);
//длительности
dtm:array[1..hm] of word=(
240,240,250,250,
250,750,250,250,
250,250,250,750,
500,250,250,250,
250,250,250,750,250,
250,250,250,250,
250,750,250,250,
250,250,250,750,
500,250,250,250,
250,250,250,250,
500,250,
250,250,250,250,
250,750,250,250,
250,250,250,750,
500,250,250,250,
250,10,
250,250,250,500,250
);


wHammer   (2001-12-03 16:23:00) [11]

Да, может кто-нибудь еще поможет и подкинет какую простую мелодию на спикере (частоты и длительность), как на мобильниках например.


wHammer   (2001-12-03 08:52:00) [12]

to Dimka Maslov ©
Да нет, дело в том что я в данный момент работаю с 1С: Предприятие, а там мне необходимо было подкорректировать процесс передачи сообщений меж пользователями. Программы на Delphi здесь были не актуальны. Были некоторые глюки, исправил, но загорелся снабдить полученное сообщение звуковыми сигналами, чтобы бухгалтер, экономист и т.п. при получении системного сообщения на закрытие 1С получали звуковой сигнал, и в установленное время (1 минута) корректно завершили свою работу и выходили из программы. Но DLL уже создал, подключил как внешнюю компоненту (терминология 1С), всё работает, поэтому еще раз БОЛЬШОЕ СПАСИБО!


Dimka Maslov   (2001-11-30 16:20:00) [13]

>wHammer
DLL для этой функции не нужен, он будет только мешать, поскольку в Dll желательно указывать формат вызова stdcall, а эта функция работает только при формате вызова register, по-этому просто вставь её в основную программу.


wHammer   (2001-11-30 15:53:00) [14]

to Dimka Maslov ©
Огромнейшее спасибо, сейчас начну клепать DLL с этой функцией.


Dimka Maslov   (2001-11-30 15:27:00) [15]

procedure Sound(Frequency, Duration: Integer);
asm
cmp Win32Platform, VER_PLATFORM_WIN32_NT
jne @@9X
push edx
push eax
call Windows.Beep
ret
@@9X:
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
@@2:
pop ebx
end;


wHammer   (2001-11-30 13:20:00) [16]

Имеется ввиду исходники модуля CRT в Turbo Pascal?


AlexKniga   (2001-11-30 13:13:00) [17]

Да. Добывай исходники CRT.


Наверх

Титульная страница Поиск, карта сайта Написать письмо