Ник, я с тобой согласен - эти функции не задекларированы в CW, но посмотри libmaker-ом библиотеку CXXrunx.dll - Cla$IN, Cla$OUT присутствуют. Кроме того в 16 бит-модели прекрасно работают, если применять прототипы как в CFD2.1. Жаль, что не работают в 32-бит.

(
Какую-нибудь нехитрую сиренку уже в проге на Кларе не сваяешь - запускай муз.редактор и создавай .WAW, потом засовывай его в Звук.схему Винды и цепляй к BEEPу - Обидно

(((.
С уважением,
Александр Полонский
Зачем цеплять? Музыку проиграть и так можно. Неупакованный (не RIFF) Wav можно исполнить через sndPlaySound, другие звуки, при наличии кодека - через mciSendString. Или через OCX ActiveMovie ...
---------------------------------------
C уважением,
Юрий Философов,
Главный программист
Корпорация "Диполь", Саратов
E-mail
yufil@tacis-dipol.ru (служ)
yufil@mail.ru (дом)
ICQ#75924439
Согласен, но звуковой файл все-равно нужно в чем-то создавать.
Александр
Для проигрывания звуков есть соответствующая функция WindowsAPI sndPlaySound. Так, что засовывать в Звук. схему WAV совсем не обязательно.
Удачи!
__________________________________
Владимир Якимченко (ICQ: 16993194)
Как я уже ответил в предыдущем письме, для sndPlaySound нужен звуковой файл, который надо создавать в спец.редакторе, а этого не хочется.
Собственно, предыстория была такая. Пока писал в ДОС (CPD2.1, CDD3) пользовался BEEP(freq, durat) для создания последовательности нескольких звуков различной частоты и длительности. Когда перешел на CW, сначала проектировал в 16-бит модели.
В силу привычки к ДОСовскому BEEP написал библиотечку функций для работы со звуком, эмулирующую (по сути) оператор BEEP и использующую ф-ции IN и OUT.
Все прекрасно работало и никаких проблем.
С полпинка создавай любые звук.последовательности.
А вот при переходе на 32-разр.модель получил облом: IN и OUT не работают.
А конкретно хочется вот чего (для 32-бит модели):
1. В программе на Кларе легко создавать простейшие звуковые последовательности из звуков заданной частоты и длительности (без использования других сторонних инструментов (редакторов)
2.Чтобы звуки выводились только на динамик системного блока, а не на колонки (телефоны) независимо от того, есть ли звуковая карта в РС или нет.
Увы, пока ответов на эти вопросы я не получил, хотя флейм поднимался неоднократно.
С уважением,
Александр Полонский
(Добавление)
Может с прототипами что то не то?
ClaIN(UNSIGNED Port,UNSIGNED *Input,UNSIGNED Bytes),RAW,NAME('Cla$IN')
ClaOUT(UNSIGNED Port,*? Output,UNSIGNED Bytes),RAW,NAME('Cla$OUT')
Andrew Myalin
andrew@arsis.ru
http://mavcla.arsis.ru (MAV Direct ODBC)
ICQ: 10659412
Yahoo group:
clarion@yahoogroups.com
Hello Andrew,
Можно попробовать MessageBeep(-1) По доке написано что производиться простой бип через звуковую карту, ежели отсутствует через спикер.
Проверить не могу так как имею звуковую... Пробуйте прототип:
!BOOL MessageBeep(
! UINT uType // sound type
!);
MessageBeep(Ulong SoundType), Bool, Name('MessageBeep')
Best regards,
Andrew Listiev
Work mailto:
andrewl@inbox.lv
Home mailto:
gidravlic@mhm.lv
ICQ UID: 169357390
MS Messenger:
werdna_werdna@hotmail.com
В проге на CW5 эти функции не прототипировал,
а в коде программы вызывал как в CPD2.1, т.е.
IN(port,S), где S - переменная типа BYTE для приема из порта,
OUT(port,D), где D - переменная типа BYTE для вывода в порт.
В 16-разр. модели эти функции прекрасно отрабатывали.
В 32-разр. - компиляция проходит успешно, при запуске функции не отрабатывают, GPFа нет, но зависания бывали.
Александр
(Добавление)
Привет.
Я не спец в этом вопросе, но все же есть предположение... А нельзя ли на асме вызвать какой-нить INT в бивисе, чтоб котяра замурлыкала?
Сергей.
...и получишь в тыкву от системы, если это NT и выше.
Драйверок, видимо, писать придется...
--
Best regards,
Maxim Yemelyanov,
Enigma Soft Company
phone: +380 572 177977
WEB:
http://enigmasoft.com.ua
e-mail:
clalist@enigmasoft.com.ua
ICQ: 12253836
Теоретически, наверно, можно. Не пробовал, но думаю, что Winda все-равно отлуп даст на 32-бит модели.
Александр
(Добавление)
Режим 32-бита не работает ни в какой из версий Клариона:
( проверял для CLARION-5 и CLARION-5.5h )
Библиотечку звуковую ты юзал мою, но она работает только для 16-бит приложений, т.к.
использует процедуры IN и OUT прямого доступа к портам.
В 32-бит приложениях это не работает, хотя и компилится без ошибок. Видимо, это связано с тем, что 32-бит ОС запрещают прямой доступ к портам. Во всяком случае, мне так и не удалось напрямую (через порты) вывести звук на динамик РС.
На этот вопрос в рассылке никто толково так и не ответил.
Помнится, Олег Руденко, кажется высылал WinAPI функции для доступа к портам. Я их пробовал юзать в 32-бит режиме, но снова - облом. Так что - остается только 16-бит. Да и тут есть проблемы - звук выводится на динамик РС только в том случае, когда нет звук.карты, если она есть - то вывод идет не на динамик, а через карту - на колонки (телефоны).
Но на сайте я не обнаружил: а кто же автор этого замечательного сайта?
Подскажите, кто автор этого сайта?
Автор сайта -
Евгений Стефаненко
С уважением,
Александр Полонский
(Добавление)
Увы, пока ответов на эти вопросы я не получил, хотя флейм поднимался неоднократно.
Может это поможет:
Какие есть api-функции для работы со звуком, кроме sndplay?
waveIn*() / waveOut*() ну и DirectX.
RV> Чеpез поpты... Вот, завалялось
Код: Выделить всё
RV> --== Cut: [Windows Clipboard] ===
RV> Procedure Sound(Duration: Integer; Freq: Word);
RV> var
RV> Ver: TOsVersionInfo;
RV> begin
RV> Ver.dwOSVersionInfoSize := SizeOf(Ver);
RV> GetVersionEx(Ver);
RV> if ver.dwPlatformId = VER_PLATFORM_WIN32_NT then
RV> Windows.Beep(Duration, Freq)
RV> else begin
RV> asm
RV> mov al,0b6H
RV> out 43H,al
RV> mov ax,Freq
В AX надо класть (1193180 div Freq), AX - это _делитель_ частоты 1193180 Гц для получения нужной...
Код: Выделить всё
RV> out 42h,al
RV> ror ax,8
RV> out 42h,al
RV> in al,61H
RV> or al,03H
RV> out 61H,al
RV> end;
RV> Sleep(Duration);
RV> asm
RV> in al,61H
RV> and al,0fcH
RV> out 61H,al
RV> end;
RV> end;
RV> end;
Всякие midiOutы со странными buffерами работают, содержимое которых нихрена в msdn не описано.
Лирическое вступление:
Я - человек пещерный, самое могучее, что у меня стоит на 486 - Борланд4.5, еще есть ВижуалС какой-то вообще без номера, но 16-битный - так вот, для этого ВижуалаС я неоднократно писал мидизвукоизвлекатели используя функции описанные в отдельном файле WIN31MWH.HLP - хелп по мультимедиа 3-их виндов
Теперь конкретно:
Открываем миди девайс (в данном случае MIDI_MAPPER):
#include <mmsystem.h>
HMIDIOUT hMidiOut;
midiOutOpen(&hMidiOut,MIDI_MAPPER,0,0,0);//returns 0 if successful
//или (UINT)MIDI_MAPPER - как повезет... Hе помню, в чем дело...
И поем:
midiOutShortMsg(hMidiOut,midiMessage);
Где midiMessage строится исходя из принципов миди, например:
- выбор инструмента - 0XiiCc, где ii - номер инструмента (0..7F)
- дать тон - 0Xvvnn9c, где vv- громкость (0..7F), nn - нота (0..7F)
- cнять тон - 0Xvvnn8c, где все то же...
буква "c" в этих трех сообщениях означает номер канала миди (0..F)
Хватит, напелись, закрываем лавочку:
midiOutClose(hMidiOut);
Вроде бы совсем кристально...
Лирическое заключение:
Вот дай только Бог, чтобы я ничего не напутал...
В хелпе Борланда4.5, относящемся к 32-битным виндам (WIN32.HLP) описано значительно больше мультимедийных функций, чем в вышеуказанном, однако совместимость, похоже, не потерялась. Конкретно - нехитрый миди-редактор, который я ваял месяцев 5 назад, нормально компилировался и в указанном ВижуалС и в Борланд5.02... Только теперь у меня этого Борланда нет...
с почтеньем,
Rodion
-
Best regards,
Maxim Yemelyanov
Написал: ClaList(2)