Форум: "Система";
Текущий архив: 2002.03.11;
Скачать: [xml.tar.bz2];
ВнизSpeaker Найти похожие ветки
← →
wHammer (2001-11-30 13:05) [0]Можно ли с ним работать из под Windows?
← →
AlexKniga (2001-11-30 13:13) [1]Да. Добывай исходники CRT.
← →
wHammer (2001-11-30 13:20) [2]Имеется ввиду исходники модуля CRT в Turbo Pascal?
← →
Dimka Maslov (2001-11-30 15:27) [3]
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 15:53) [4]to Dimka Maslov ©
Огромнейшее спасибо, сейчас начну клепать DLL с этой функцией.
← →
Dimka Maslov (2001-11-30 16:20) [5]>wHammer
DLL для этой функции не нужен, он будет только мешать, поскольку в Dll желательно указывать формат вызова stdcall, а эта функция работает только при формате вызова register, по-этому просто вставь её в основную программу.
← →
wHammer (2001-12-03 08:52) [6]to Dimka Maslov ©
Да нет, дело в том что я в данный момент работаю с 1С: Предприятие, а там мне необходимо было подкорректировать процесс передачи сообщений меж пользователями. Программы на Delphi здесь были не актуальны. Были некоторые глюки, исправил, но загорелся снабдить полученное сообщение звуковыми сигналами, чтобы бухгалтер, экономист и т.п. при получении системного сообщения на закрытие 1С получали звуковой сигнал, и в установленное время (1 минута) корректно завершили свою работу и выходили из программы. Но DLL уже создал, подключил как внешнюю компоненту (терминология 1С), всё работает, поэтому еще раз БОЛЬШОЕ СПАСИБО!
← →
wHammer (2001-12-03 16:23) [7]Да, может кто-нибудь еще поможет и подкинет какую простую мелодию на спикере (частоты и длительность), как на мобильниках например.
← →
Adder (2001-12-03 17:00) [8]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
);
← →
Wizard_Ex (2001-12-04 08:12) [9]Только под NT ассемблер не пойдет
Так что будьте осторожны, грабли где-то рядом
← →
wHammer (2001-12-04 09:26) [10]На Win2000 работает, только частоты не совпадают, да выдает ошибку после сигнала "Privileged Instruction".
← →
wHammer (2001-12-04 09:44) [11]Исправил в dll формат вызова register, какие-либо ошибки пропали, под NTServer также протестировал - работает.
← →
wHammer (2001-12-04 09:48) [12]to Adder ©
Спасибо за мелодию, может быть есть еще какие-нибудь.
← →
Adder (2001-12-04 14:37) [13]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);
← →
Harlan (2001-12-06 08:45) [14]Помнится, когда-то видел функцию расчёта частоты по номеру ноты. Может кто-нибудь её знает? Киньте, пожалуйста.
Ля 1 октавы - 440Гц
Ля 2 октавы - 880Гц
Ля 3 октавы - 1760Гц
А вот как остальные ноты в октаве вычислить?
← →
Digitman (2001-12-06 09:38) [15]Звуковые частоты в полутоновом интервале равномерно темперированного строя находятся в отношении "корень двенадцатой степени из двух", интервалов в октаве - 12 . Вот и вся "формула". Отсюда и "пляши".
← →
Dimka Maslov (2001-12-06 11:23) [16]Функция, приведённая выше иногда вызывала Асс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;
← →
wHammer (2001-12-07 08:44) [17]to Dimka Maslov ©
Спасибо еще раз!
Страницы: 1 вся ветка
Форум: "Система";
Текущий архив: 2002.03.11;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.004 c