Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Делфи _ Звуки в дельфи

Автор: TarasBer 11.01.2008 2:17

Как реализовать на дельфе проигрыш звука заданной частоты? Я вот через писиспикер попробовал, таким вот модулем (текст взял с какого-то сайта), но он вылетает с ошибкой привеллегед инструктион.



Прикрепленные файлы
Прикрепленный файл  UPCSpeaker.pas ( 395 байт ) Кол-во скачиваний: 259

Автор: volvo 11.01.2008 2:25

Посмотри "DRKB -> Работа с графикой и мультимедиа -> Работа со звуком -> Как проиграть ноту", там показывается вариант с использованием Windows.Beep

Автор: TarasBer 11.01.2008 2:45

Не , виндовз.бип мне не подходит, так как мне надо проигрывание тона на фоне других процессов, как процедура саунд в паскале. А лучше вообще не писиспикером а чем-нибудь менее противным.

Автор: volvo 11.01.2008 2:49

Ну, тогда тебе прямая дорога к использованию http://msdn2.microsoft.com/en-us/library/ms712038(VS.85).aspx

Автор: TarasBer 11.01.2008 2:55

Э, я надеюсь, там можно обойтись трёмя процедурами, или 20 строк подключения и проверок?
Что-то сложное вроде на вид. Неужели такое элементарное действие, как вывод звука, в дельфе делается на порядок сложнее чем в паскале?

Автор: volvo 11.01.2008 3:06

Цитата
я надеюсь, там можно обойтись трёмя процедурами, или 20 строк подключения и проверок?
Использовал в проекте на чистом API - инициализация в 2 строки + 2 основных процедуры (MidiNoteOff, MidiNoteOn) вида:

function MidiOutMessage(hMidi: HMIDIOUT;  iStatus: integer;  iChannel: integer;
iData1: integer; iData2: integer): DWORD;
var
dwMessage: DWORD;
begin
dwMessage:= iStatus or iChannel or (iData1 shl 8) or (LongInt(iData2) Shl 16);
result := midiOutShortMsg(hMidi,dwMessage);
end;


function MidiNoteOff(hMidi: HMIDIOUT; iChannel: integer; iOct: integer;
iNote: integer; iVel: integer): DWORD;
begin
result := MidiOutMessage(hMidi,$080,iChannel,12*iOct+iNote,iVel);
end;
function MidiNoteOn(hMidi: HMIDIOUT; iChannel: integer; iOct: integer;
iNote: integer; iVel: integer): DWORD;
begin
result := MidiOutMessage(hMidi,$090,iChannel,12*iOct+iNote,iVel);
end;

использование совершенно прозрачно...

Автор: TarasBer 11.01.2008 3:12

Использование не прозрачно, что писать в ивел и канал? А подключение как выглядит? И это какие модули подключать надо (или где качать), чтоб это всё компилировалось, такой вот глупый вопрос?
Вопрос про модули снимаю, модуль ммсистем нашёл.

Автор: TarasBer 11.01.2008 3:43

Кажись разобрался с мидями, с помощью вот этой прекрасной странички: http://promidi.by.ru/delphi_midi/. Всё, спасибо.