ria pc game
fle game engine - движок для создания игр
fle game engine - движок для создания игр


Balls and holes PC game / Balls and Holes PC игра
Вакансии
Игродельня
Сегодня
17 февраля 2019 21:28
Вход Регистрация Забыли пароль ?

megainformatic Создание игры на fle game engine - Simple game - страница 4 - Код - Настройка параметров Scene Editor fge и написание кода для вывода спрайта шарика в вашем первом игровом приложении / Пример простой игры
подробнее...

Теги создание сайтов, создание игр, дизайн, игры, информатика, уроки photshop, php, c++, музыка, delphi, cms, робосайт
Статьи сайта
сайт megainformatic - Добавляем созданный счетчик на все страницы Вашего Сайта

сайт megainformatic - СССР - Создаем Сайт Своими Руками - Экспорт/импорт данных из баз данных MySQL

megainformatic - СССР - Создаем Сайт Своими руками - Введение в php

megainformatic - СССР - Создаем Сайт Своими Руками - Выводим дату и время в формате RU

сайт megainformatic - уроки php

megainformatic - Уроки 3ds max

megainformatic - КАК СОЗДАТЬ СВОЮ ИГРУ - Веселый Буквоежка Ваше Визуальное Шоу / Fun Letter Eater You Visual Show

megainformatic - Формы оплаты заказа

megainformatic - оплата через систему QIWI - выбор продукта

megainformatic - КАК СОЗДАТЬ СВОЮ ИГРУ - Набор разработчика игр - Нечто: Необъяснимое - в плену желаний

megainformatic - Как создать игру ? - Программируем сами - Самый первый шаг

megainformatic - Как создать игру ? - Программируем сами - Самый первый шаг - страница 2

megainformatic - Как создать игру ? - Программируем сами - Содержание

megainformatic - Как создать игру ? - Программируем сами - Самый первый шаг - страница 3

megainformatic - Как создать игру ? - Программируем сами - Изучаем и модифицируем пример CreateDevice

megainformatic - Как создать игру ? - Программируем сами - пример CreateDevice страница 2

megainformatic - Как создать игру ? - Программируем сами - пример CreateDevice страница 3

megainformatic - Как создать игру - Vertices - Вершины - страница 1

megainformatic - Как создать игру - пример Matrices

megainformatic - Уроки Photoshop - Чудеса

megainformatic - Уроки Photoshop - Чудеса - Коллаж от нуля

megainformatic - Уроки Photoshop - Чудеса - Коллаж от нуля - страница 2

megainformatic - Уроки Photoshop - Чудеса - Коллаж от нуля - страница 3

megainformatic - Уроки Photoshop - Чудеса - Коллаж от нуля - страница 4

megainformatic - Купить Уроки Photoshop - Чудеса

megainformatic - Уроки Photoshop

megainformatic - Уроки Photoshop - Рисуем волка из мультфильма

megainformatic - Уроки Photoshop - Рисуем волка из мультфильма стр 2

megainformatic - Уроки Photoshop - Рисуем волка из мультфильма стр 3

megainformatic - Уроки Photoshop - Рисуем волка из мультфильма стр 4

megainformatic - Уроки Photoshop - Анимируем волка из мультфильма

megainformatic - Уроки Photoshop - Анимируем волка из мультфильма стр 2

megainformatic - Уроки Photoshop - Анимируем волка из мультфильма стр 3

megainformatic - Уроки Photoshop - Анимируем волка из мультфильма стр 4

megainformatic - Эмулятор игры Ну, Погоди!

megainformatic - Оплата заказа через Сбербанк

megainformatic - Пример игры с исходным кодом Donuts3D

megainformatic - Как создать игру ВЕСЕЛЫЙ БУКВОЕЖКА - программируем сами

megainformatic - Как создать игру ВЕСЕЛЫЙ БУКВОЕЖКА - создаем игровую оболочку

megainformatic - Открытый Полный Исходный код игры Дорога в Город

megainformatic - Как создать игру - Веселый Единственный Буквоежка - программируем основу будущей игры

megainformatic - Как создать игру - Веселый Единственный Буквоежка - выводим заставку

megainformatic - Как создать игру - Веселый Единственный Буквоежка - игровое меню

megainformatic - Как создать игру - Веселый Единственный Буквоежка - движение и анимация героя

Как Создать игру ВЕБ - Веселый Единственный Буквоежка - Программируем сами

Как Создать игру ВЕБ - Веселый Единственный Буквоежка - Программируем сами

megainformatic - Примеры моих работ

megainformatic - Музыкальные темы

megainformatic - Уроки Photoshop - Чудеса

megainformatic - Купить Уроки Photoshop - Чудеса

megainformatic - Онлайн Обучение, Репетитор

megainformatic - Уроки Photoshop - Рисуем и Анимируем

megainformatic - Уроки Photoshop - Рисуем и Анимируем - Урок 1 - Старт

megainformatic - Уроки Photoshop - Рисуем и Анимируем на AllSoft.ru

megainformatic - DirectX 9c - Изучаем пример MultAnimation

megainformatic - megainformatic cms Система Управления Контентом

подробнее

     
  [Назад] [Все уроки] [Далее]  
     
 

9/06/2008 Воспроизведение в игре музыки в формате XM.

Для воспроизведения используется компонент MiniFMOD 1.78

[downloads:14]

переписанный на Delphi. Успешно используется в примере игры XTropper - http://XProger.mirgames.ru (автор XProger).

 

Рассмотрим поэтапно как реализовано воспроизведение музыки в указанном примере игры.

В модуле XTropper.dpr -

uses {...} MiniFMOD in 'MiniFMOD\MiniFMOD.pas',

l_sound,

между операторами begin и end. -

snd_Init;

Game_Init;

внутри цикла "прокачки" сообщений -

Game_Update;

snd_Update;

 

function WndProc -

Case message of
WM_QUERYENDSESSION, WM_CLOSE:
begin
{...}
snd_deInit;

{...}

if inMenu then
Menu_Message(message, wParam, lParam);

 

 

Старт воспроизведения музыки - в модуле XTropper.dpr -

между begin и end.

Game_Update -

в модуле l_game.pas -

Game_Update -

XMStop

XMPlay

{...}

Game_Init > MenuInt

 

Процедуры GameStart и GameFree -

в модуле l_menu.pas -

Menu_Init, MenuLoad

{...}

procedure Menu_Message -

Game_Start;

 

Обобщим полученную информацию -

Исходный код для работы с MiniFMOD находится в папке MiniFMOD

в этой папке находятся

MiniFMOD.obj - по всей видимости скомпилированный в MSVS файл библиотеки работы с minifmod

MiniFMOD.pas - интерфейсы для использования данной библиотеки

Так и есть в комментариях к файлу MiniFMOD.pas приведено следующее -

{
MiniFMOD 1.7 is a free C library from Fairlight
Technologies (http://www.fmod.org) which allows
you to play .XM files. Compiled into a .OBJ,
it is then possible to use it in any language
that supports OMF .OBJ files.

Here is the Delphi header I made for it.

Twis (June 2004).
}

Т.е. это говорит именно о том, что obj-файл это объектный файл библиотеки minifmod 1.7

Следует отметить, что minifmod не гарантирует 100% точности и идентичности звука XM-файла по сравнению скажем с воспроизведением в плеере или трекере. Об этом свидетельствуют заметки в readme содержащиеся в дистрибутиве midifmod178.rar (85 Кб). Однако на первых порах для игры данная библиотека думаю подойдет.

В реальных тестах и проверках будет ясно. Посмотрим.

 

Продолжим обобщения -

Итак, в папку проекта игры нужно добавить папку MiniFMOD содержащую указанные выше 2 файла.

Далее -

в раздел uses модуля проекта или модуля приложения добавить ссылку на файл MidiFMOD.pas

модуль l_sound ? Суть вопроса: Как происходит воспроизведение музыки при помощи MiniFMOD -

путем вывода результата непосредственно на звуковую карту или же требуется предварительный рендеринг в звуковой буфер DirectSound с последующим выводом полученного через IDirectSound?

Поскольку в модуле l_sound содержится ссылка на MidiFMOD.pas, то скорее всего это 2 вариант, т.е.

при помощи miniFMOD XM файл сначала выводится в выделенный звуковой буфер IDirectSoundBuffer, а затем полученный кусочек уже воспроизводится средствами IDirectSound.

Однако эксперимент с комментированием ссылки на uses MiniFMOD внутри модуля l_sound показывает, что ошибок компиляции не возникает. Следовательно l_sound не использует MiniFMOD и ссылка возможно осталась ошибочно.

Смотрим далее -

 

из-за указанной особенности в uses также нужно добавить использование модуля l_sound.pas написанного XProger

Где-то после создания окна приложения, например в OneTimeSceneInit вызвать процедуры подобные snd_Init и Game_Init.

внутри метода Run -

перед FrameMove или даже внутри FrameMove вызываем процедуры подобные

Game_Update;

snd_Update;

Следует обратить внимание на то, что - в модуле проекта XTropper.dpr между begin и end. -

{...}

while not isQuit do
begin
while PeekMessage(msg, 0, 0, 0, PM_REMOVE) do
begin
TranslateMessage(msg);
DispatchMessage(msg);
end;

if not glActive then
WaitMessage
else
begin
Time := GetTimer;
Time_Delta := Time - Time_Old;

flag := false;
for i := 1 to Time_Delta div 20 do
// будет ли влиять указанная периодичность на качество воспроизведения???
begin
Game_Update;
snd_Update;
flag := true;
end;

if flag = true then
Time_Old := Time - Time_Delta mod 20;
// или это не окажет влияния???
Game_Render;
end;
end;

{...}

 

внутри MsgProc -

при WM_DESTROY -

//WM_QUERYENDSESSION, WM_CLOSE: //в модуле проекта XTropper.dpr закрытие происходит по данным сообщениям

Game_Free;
//внутри данной процедуры происходит освобождение объекта XM-плеера - XMFree.

snd_deInit;

 

Это всё что касается создания, обработки и уничтожения объектов воспроизведения музыки.

Теперь необходимо рассмотреть детальную реализацию того, что происходит внутри данных процедур, касающееся загрузки конкретных XM-модулей, запуска и останова проигрывания, регулировки громкости и других особенностей.

 
Использование модуля l_sound.pas можно пока оставить без изменений, поскольку он выполняет роль фактического плеера, служит для управления звуком (запуск, стоп, громкость и т.п.) на уровне возможностей IDirectSound. Единственно, что поскольку l_sound.pas ориентирован на работу со старыми интерфейсами из модуля DirectX.pas (версии DirectX 6), то в этом плане возможно потребуется его переделка.
 

Game_Init -

Menu_Init -

XMLoadFromFile('data\music\baits.xm');
XMPlay;

Game_Update -

XMStop //вероятно так сделано для того, чтобы очередной кусок был выведен в звуковой буфер с опережением

XMPlay //т.е. сначала кусок выводится потом работа продолжается, а затем выполняется останов и снова вывод новой порции в буфер Это предположение, посмотрим что на практике!!!

 

 

Game_Free -

XMStop;
XMFree;

В приложении XTropper воспроизведение музыки управляется через объект меню -

внутри функции обработки сообщений (function WndProc ...) -

Game_Free при сообщениях WM_QUERYENDSESSION, WM_CLOSE, а в конце ее -

if inMenu then
Menu_Message(message, wParam, lParam);

При выборе пункта меню Start - внутри указанной процедуры -

Game_Start;

Game_Start -

XMFree;
XMLoadFromFile('data\music\rave.xm');
XMPlay;

 

Внутри модуля l_menu.pas также есть процедура -

procedure Menu_Load;
begin
XMFree;
XMLoadFromFile('data\music\baits.xm');
XMPlay;
end;

Где и как она вызывается?

Ответ - она вызвается внутри модуля l_input.pas в ответ на нажатие Escape -

procedure KeyOnUp(ID: Byte);
begin
Key[ID] := false;
case ID of
VK_ESCAPE : if not inMenu then
begin
snd_StopAll(0);
Player.ResetKeys;
if Player.Health = 0 then
Menu_Load;
inMenu := true;
end;

end;
end;

 

 

Теперь рассмотрим работу со звуком - использование модуля l_sound.pas в приложении XTropper -

Рассмотрение пока не требуется, т.к. XM воспроизводится без IDirectSound. Однако таким образом не используются все преимущества IDirectSound. В частности отсутствует возможность регулировки громкости музыки.

 

Попробуем использовать возможности MiniFMOD в имеющемся объеме для воспроизведения музыки.

Оказалось достаточно даже следующего способа работы:

Создаем 2 метода -

function TD3DGameApp.InitMusic: HResult;
begin
result := S_OK;

XMLoadFromFile('Media\Music\wizard_morning.xm');
XMPlay;
end;

procedure TD3DGameApp.FreeMusic;
begin
XMStop;
XMFree;
end;

 
И вызываем их где-либо, например в конце CreateSoundObjects и DestroySoundObjects. Всё. При старте приложения сразу же включается музыка.
 

Если требуется загрузка и воспроизведение иной мелодии, то достаточно вызвать следующую последовательность команд -

XMStop;
XMFree;

XMLoadFromFile('Media\Music\wizard_morning.xm');
XMPlay;

 

Возникает воспрос как регулировать громкость мелодии?

Поскольку miniFMOD скорее всего воспроизводит музыку через средства Windows без DirectSound, то теоретически должна быть возможность регулирования громкости за счет доступа к глобальному регулятору громкости системы. Есть ли такая возможность в модуле MMSystem.pas ?

 

Организация проигрывания различных музыкальных тем в разных частях приложения:

При старте приложения должна играть 1 тема,

При выходе в главное меню - другая

При переходе к игровой сцене - тема для нее.

На стадии загрузки игровой сцены должна загружаться мелодия для нее.

При старте игровой сцены должно включаться воспроизведение.

При выходе из игровой сцены воспроизведение должно останавливаться.

При удалении игровой сцены должен очищаться объект проигрывателя XM-мелодии.

Остановка и последующий старт воспроизведения не приводят к моментальному появлению звука. Имеет место некоторая задержка. Это свидетельствует о том, что для моментального включения/отключения мелодии нужно воспользоваться регулировкой громкости.

В модуле MMSystem.pas действительно есть функция - function waveOutSetVolume

Единственным недостатком таких регулировок будет то, что будет изменяться глобальная громкость воспроизведения в системе, а не локальная - данной мелодии.

Можно тажке посмотреть как реализовано управление громкостью в мультимедиа-плеере TMediaPlayer. Это ничего не дает. Там нет таких процедур!!!

Однако читая документацию по waveOutSetVolume, а также просматривая код модулей MMSystem.pas и MiniFMOD.pas обнаруживаем, что

1) громкость регулируется для локального экземпляра звука - значит это то, что нам нужно.

2) экспорты некоторых функций - в модуле MiniFMOD.pas являются сходными из аналогичных модуля MMSystem.pas Это еще раз подтверждает, что музыка воспроизводится минуя DirectSound обращаясь напрямую к системным функциям мультимедиа. Это же дает зацепку о способе регулировки звука при помощи указанного метода.

waveOutSetVolume требует 2-х параметров:

HWAVEOUT hwo, - обработчик устройства воспроизведения
DWORD dwVolume - громкость - младшее слово - левый канал, старшее - правый.

[далее] - о воспроизведении музыки при помощи библиотеки OggVorbis

 
     
  [Назад] [Все уроки] [Далее]  
     
подробнее

     
  [Назад] [Все уроки] [Далее]  
     
 

9/06/2008 Воспроизведение в игре музыки в формате XM.

Для воспроизведения используется компонент MiniFMOD 1.78

[downloads:14]

переписанный на Delphi. Успешно используется в примере игры XTropper - http://XProger.mirgames.ru (автор XProger).

 

Рассмотрим поэтапно как реализовано воспроизведение музыки в указанном примере игры.

В модуле XTropper.dpr -

uses {...} MiniFMOD in 'MiniFMOD\MiniFMOD.pas',

l_sound,

между операторами begin и end. -

snd_Init;

Game_Init;

внутри цикла "прокачки" сообщений -

Game_Update;

snd_Update;

 

function WndProc -

Case message of
WM_QUERYENDSESSION, WM_CLOSE:
begin
{...}
snd_deInit;

{...}

if inMenu then
Menu_Message(message, wParam, lParam);

 

 

Старт воспроизведения музыки - в модуле XTropper.dpr -

между begin и end.

Game_Update -

в модуле l_game.pas -

Game_Update -

XMStop

XMPlay

{...}

Game_Init > MenuInt

 

Процедуры GameStart и GameFree -

в модуле l_menu.pas -

Menu_Init, MenuLoad

{...}

procedure Menu_Message -

Game_Start;

 

Обобщим полученную информацию -

Исходный код для работы с MiniFMOD находится в папке MiniFMOD

в этой папке находятся

MiniFMOD.obj - по всей видимости скомпилированный в MSVS файл библиотеки работы с minifmod

MiniFMOD.pas - интерфейсы для использования данной библиотеки

Так и есть в комментариях к файлу MiniFMOD.pas приведено следующее -

{
MiniFMOD 1.7 is a free C library from Fairlight
Technologies (http://www.fmod.org) which allows
you to play .XM files. Compiled into a .OBJ,
it is then possible to use it in any language
that supports OMF .OBJ files.

Here is the Delphi header I made for it.

Twis (June 2004).
}

Т.е. это говорит именно о том, что obj-файл это объектный файл библиотеки minifmod 1.7

Следует отметить, что minifmod не гарантирует 100% точности и идентичности звука XM-файла по сравнению скажем с воспроизведением в плеере или трекере. Об этом свидетельствуют заметки в readme содержащиеся в дистрибутиве midifmod178.rar (85 Кб). Однако на первых порах для игры данная библиотека думаю подойдет.

В реальных тестах и проверках будет ясно. Посмотрим.

 

Продолжим обобщения -

Итак, в папку проекта игры нужно добавить папку MiniFMOD содержащую указанные выше 2 файла.

Далее -

в раздел uses модуля проекта или модуля приложения добавить ссылку на файл MidiFMOD.pas

модуль l_sound ? Суть вопроса: Как происходит воспроизведение музыки при помощи MiniFMOD -

путем вывода результата непосредственно на звуковую карту или же требуется предварительный рендеринг в звуковой буфер DirectSound с последующим выводом полученного через IDirectSound?

Поскольку в модуле l_sound содержится ссылка на MidiFMOD.pas, то скорее всего это 2 вариант, т.е.

при помощи miniFMOD XM файл сначала выводится в выделенный звуковой буфер IDirectSoundBuffer, а затем полученный кусочек уже воспроизводится средствами IDirectSound.

Однако эксперимент с комментированием ссылки на uses MiniFMOD внутри модуля l_sound показывает, что ошибок компиляции не возникает. Следовательно l_sound не использует MiniFMOD и ссылка возможно осталась ошибочно.

Смотрим далее -

 

из-за указанной особенности в uses также нужно добавить использование модуля l_sound.pas написанного XProger

Где-то после создания окна приложения, например в OneTimeSceneInit вызвать процедуры подобные snd_Init и Game_Init.

внутри метода Run -

перед FrameMove или даже внутри FrameMove вызываем процедуры подобные

Game_Update;

snd_Update;

Следует обратить внимание на то, что - в модуле проекта XTropper.dpr между begin и end. -

{...}

while not isQuit do
begin
while PeekMessage(msg, 0, 0, 0, PM_REMOVE) do
begin
TranslateMessage(msg);
DispatchMessage(msg);
end;

if not glActive then
WaitMessage
else
begin
Time := GetTimer;
Time_Delta := Time - Time_Old;

flag := false;
for i := 1 to Time_Delta div 20 do
// будет ли влиять указанная периодичность на качество воспроизведения???
begin
Game_Update;
snd_Update;
flag := true;
end;

if flag = true then
Time_Old := Time - Time_Delta mod 20;
// или это не окажет влияния???
Game_Render;
end;
end;

{...}

 

внутри MsgProc -

при WM_DESTROY -

//WM_QUERYENDSESSION, WM_CLOSE: //в модуле проекта XTropper.dpr закрытие происходит по данным сообщениям

Game_Free;
//внутри данной процедуры происходит освобождение объекта XM-плеера - XMFree.

snd_deInit;

 

Это всё что касается создания, обработки и уничтожения объектов воспроизведения музыки.

Теперь необходимо рассмотреть детальную реализацию того, что происходит внутри данных процедур, касающееся загрузки конкретных XM-модулей, запуска и останова проигрывания, регулировки громкости и других особенностей.

 
Использование модуля l_sound.pas можно пока оставить без изменений, поскольку он выполняет роль фактического плеера, служит для управления звуком (запуск, стоп, громкость и т.п.) на уровне возможностей IDirectSound. Единственно, что поскольку l_sound.pas ориентирован на работу со старыми интерфейсами из модуля DirectX.pas (версии DirectX 6), то в этом плане возможно потребуется его переделка.
 

Game_Init -

Menu_Init -

XMLoadFromFile('data\music\baits.xm');
XMPlay;

Game_Update -

XMStop //вероятно так сделано для того, чтобы очередной кусок был выведен в звуковой буфер с опережением

XMPlay //т.е. сначала кусок выводится потом работа продолжается, а затем выполняется останов и снова вывод новой порции в буфер Это предположение, посмотрим что на практике!!!

 

 

Game_Free -

XMStop;
XMFree;

В приложении XTropper воспроизведение музыки управляется через объект меню -

внутри функции обработки сообщений (function WndProc ...) -

Game_Free при сообщениях WM_QUERYENDSESSION, WM_CLOSE, а в конце ее -

if inMenu then
Menu_Message(message, wParam, lParam);

При выборе пункта меню Start - внутри указанной процедуры -

Game_Start;

Game_Start -

XMFree;
XMLoadFromFile('data\music\rave.xm');
XMPlay;

 

Внутри модуля l_menu.pas также есть процедура -

procedure Menu_Load;
begin
XMFree;
XMLoadFromFile('data\music\baits.xm');
XMPlay;
end;

Где и как она вызывается?

Ответ - она вызвается внутри модуля l_input.pas в ответ на нажатие Escape -

procedure KeyOnUp(ID: Byte);
begin
Key[ID] := false;
case ID of
VK_ESCAPE : if not inMenu then
begin
snd_StopAll(0);
Player.ResetKeys;
if Player.Health = 0 then
Menu_Load;
inMenu := true;
end;

end;
end;

 

 

Теперь рассмотрим работу со звуком - использование модуля l_sound.pas в приложении XTropper -

Рассмотрение пока не требуется, т.к. XM воспроизводится без IDirectSound. Однако таким образом не используются все преимущества IDirectSound. В частности отсутствует возможность регулировки громкости музыки.

 

Попробуем использовать возможности MiniFMOD в имеющемся объеме для воспроизведения музыки.

Оказалось достаточно даже следующего способа работы:

Создаем 2 метода -

function TD3DGameApp.InitMusic: HResult;
begin
result := S_OK;

XMLoadFromFile('Media\Music\wizard_morning.xm');
XMPlay;
end;

procedure TD3DGameApp.FreeMusic;
begin
XMStop;
XMFree;
end;

 
И вызываем их где-либо, например в конце CreateSoundObjects и DestroySoundObjects. Всё. При старте приложения сразу же включается музыка.
 

Если требуется загрузка и воспроизведение иной мелодии, то достаточно вызвать следующую последовательность команд -

XMStop;
XMFree;

XMLoadFromFile('Media\Music\wizard_morning.xm');
XMPlay;

 

Возникает воспрос как регулировать громкость мелодии?

Поскольку miniFMOD скорее всего воспроизводит музыку через средства Windows без DirectSound, то теоретически должна быть возможность регулирования громкости за счет доступа к глобальному регулятору громкости системы. Есть ли такая возможность в модуле MMSystem.pas ?

 

Организация проигрывания различных музыкальных тем в разных частях приложения:

При старте приложения должна играть 1 тема,

При выходе в главное меню - другая

При переходе к игровой сцене - тема для нее.

На стадии загрузки игровой сцены должна загружаться мелодия для нее.

При старте игровой сцены должно включаться воспроизведение.

При выходе из игровой сцены воспроизведение должно останавливаться.

При удалении игровой сцены должен очищаться объект проигрывателя XM-мелодии.

Остановка и последующий старт воспроизведения не приводят к моментальному появлению звука. Имеет место некоторая задержка. Это свидетельствует о том, что для моментального включения/отключения мелодии нужно воспользоваться регулировкой громкости.

В модуле MMSystem.pas действительно есть функция - function waveOutSetVolume

Единственным недостатком таких регулировок будет то, что будет изменяться глобальная громкость воспроизведения в системе, а не локальная - данной мелодии.

Можно тажке посмотреть как реализовано управление громкостью в мультимедиа-плеере TMediaPlayer. Это ничего не дает. Там нет таких процедур!!!

Однако читая документацию по waveOutSetVolume, а также просматривая код модулей MMSystem.pas и MiniFMOD.pas обнаруживаем, что

1) громкость регулируется для локального экземпляра звука - значит это то, что нам нужно.

2) экспорты некоторых функций - в модуле MiniFMOD.pas являются сходными из аналогичных модуля MMSystem.pas Это еще раз подтверждает, что музыка воспроизводится минуя DirectSound обращаясь напрямую к системным функциям мультимедиа. Это же дает зацепку о способе регулировки звука при помощи указанного метода.

waveOutSetVolume требует 2-х параметров:

HWAVEOUT hwo, - обработчик устройства воспроизведения
DWORD dwVolume - громкость - младшее слово - левый канал, старшее - правый.

[далее] - о воспроизведении музыки при помощи библиотеки OggVorbis

 
     
  [Назад] [Все уроки] [Далее]  
     
подробнее

http://www.aliexpress.com/homeRu.htm 20.12.2012 12:54:58 <<< нужно создать интернет магазин...но не просто интернетмагазин, а такой, чтоб на нем разные продавцы могли регистрироваться и зносить свой товар

учтите еще:

а там такая покупатель оплачивает товар а наш сайт этот платеж задерживает пока покупатель не получает свой товар как только получает свой товар его все устраивает то он заходит в свой акаунт и подтвирждает нажимая что он готов оплатить товар прибыл все как положено и продавцу отправляется свои деньги

ТЗ на сайт коллективных покупок.



задача по ТЗ краткое описание по решению
     
1. РЕГИСТРАЦИЯ -
http://us.ae.alibaba.com/wsuser/
buyerJoin/expressJoin.htm?return=www.aliexpress.com
готовый пример к внедрению -
megainformatic cms groupon
и справа вверху кликнуть ссылку РЕГИСТРАЦИЯ.
2. вход в личный кабинет - https://login.aliexpress.com/
buyer.htm?site=4&domain=alibaba.com&return_url=
http%3A%2F%2Fus.ae.alibaba.com
%2Findex.htm
%3Ftracelog%3Dws_topbar
готовый пример к внедрению -
megainformatic cms groupon
и справа вверху кликнуть ссылку ВОЙТИ.

(admin/ 123456)
     
3. сделка без риска - https://login.aliexpress.com/?return_url=
http%3A%2F%2Fescrow.alibaba.com
%2Forder%2Fbusiness_order_buyer_list.htm %3Fctmenu%3Dcurrent_orders&from=aliexpress
готового решения пока нет - требуется разработка
4. сообщения - https://login.aliexpress.com/?return_url=
http%3A%2F%2Fescrow.alibaba.com
%2Forder%2Fbusiness_order_buyer_list.htm %3Fctmenu%3Dcurrent_orders&from=aliexpress
система личных сообщений

данные входа - admin / admin

в верхнем меню админ-панели выбрать - ИСТОРИЯ > Сообщения
5. Мои списки, мои купоны есть заготовка для решения - в личном кабинете системы megainformatic cms groupon
6. Помощь, Центр помощи, Вопросы, Связаться с нами, Разместить жалобу реализация в форме страницы с формой обратной связи, нужен ли онлайн - чат ?
7. Сообщество форум ?
8. Модуль поиска, корзина модуль поиска есть, корзина требует разработки
9. ЛЕВАЯ КОЛОНКА - Вывод категорий категории реализованы в проекте megainformatic cms rs, вывод потребует доработок по представленному образцу сайта
10. Верхнее меню, разделы НАШИ БРЕНДЫ, БЕСТСЕЛЛЕРЫ, СУПЕРСДЕЛКИ, ГРУППОВЫЕ ПОКУПКИ, РАСПРОДАЖИ, КУПОНЫ можно взять за основу элементы проекта megainformatic cms groupon
11. ЗАЩИТА ПОКУПАТЕЛЯ информационная страничка
12. Центр сайта - слайдер, топовые разделы, колонка справа, ссылки на соц. сети модуль слайдера есть (см. ротатор баннеров в футере сайта, который Вы смотрите сейчас - megainformatic.ru)
13. Блок Добро пожаловать.
14. Блоки товаров
15. Футер (подвал), шапка сайта, прочие элементы, которые не указаны в ТЗ, но присутствуют на сайте образце
16. Админ-панель сайта, функционал личных кабинетов
17. Механизм покупок на сайте и оплата
подробнее

Работа с сокетами fsockopen из php

[к содержанию]

В данной статье хочу поделиться с Вами, уважаемые читатели, личным опытом использования fsockopen на языке php.

Для начала к вопросу о том, для чего вообще нужны сокеты ?

Рассмотрим небольшой пример.

<?php

$ret = "\r\n"; //каждая строка запроса должна завершаться символами возврата курсора
//и перевода строки

$host = 'varve.ru'; //указываем сайт, к которому адресуем запрос

$fsocket_connect = fsockopen($host, 80, $errno, $errstr, 30); //выполняем соединение, через
//порт 80, errno - код ошибки, errstr - описание ошибки,
//ожидание соединения до 30 сек

if ( !$fsocket_connect ) {

echo $errstr." (".$errno.")<br>\n"; //выводим код ошибки, если соединение не удалось

} else {

//формируем строки нашего HTTP запроса -

$out = "GET / HTTP/1.1".$ret; //запрос GET по протоколу http 1.1
$out .= "Host: ".$host.$ret; //адрес хоста (сайта)
$out .= "Connection: Close".$ret.$ret; //команда закрытия соединения

$responce = ''; //в этой переменной получим ответ

fwrite($fsocket_connect, $out); //выполняем запись в открытый сокет - т. е. выполняем запрос
while (!feof($fsocket_connect)) //выполняем чтение из сокета - пока не будет получен сигнал конца потока - т. е. получаем ответ {
$responce .= fgets($fsocket_connect, 128); //строки ответа заносим в переменную responce
}
fclose($fsocket_connect); //закрываем сокет

$responce = explode($ret, $responce); //выполняем разбиение ответа (responce) на массив строк

echo '<pre>';
var_dump($responce); //выводим содержимое переменной responce
echo '</pre>';

}

?>

Если вы разместите данный код в файле php скрипта и выполните его, то в переменной responce получите ответ сайта varve.ru по запросу записанному в строках с переменной $out.

Т. е. сокеты нужны, для того чтобы выполнять TCP/IP запросы (request) и получать ответы (responce) на них.

Сокеты широко используются в различных скриптах и программах для обхода содержимого сайтов, а также выполнения на них каких-либо автоматизированных действий - например автоматический постинг на форуме.

Таким образом скрипт превращается в робота, который по заданному алгоритму может оставлять посты на форуме без вашего участия. Такой скрипт может работать через cron, т. е. планировщик задач. В заданное время скрипт будет запускаться и выполнять полезную работу.

Если подвести итог, то сокеты позволяют вам работать с содержимым сайтов на программном уровне - выполняя обращения к сайту посредством скрипта или программы, без участия или с минимальным участием человека.

Конечно, чтобы писать запросы и корректно обрабатывать результаты потребуются дополнительные знания. Кроме того, для работы с конкретным сайтом через сокет нужно будет знать и учитывать множество особенностей и нюансов. Их рассмотрение выходит за рамки данной статьи, но всё же кое о чём я могу вам рассказать.

Почерпнуть информацию о том, как выполняются запросы и ответы к конкретному сайту через обычный браузер, получая при этом полную информацию о выполняемом запросе и ответе можно при помощи специальных инструментов. Например браузер Google Chrome по нажатию на клавишу [F12] выдает панель инспектора кода. Используя её и вкладку Network можно исследовать выполняемый к сайту запрос и узнать всё необходимое.

браузер Google Chrome по нажатию на клавишу [F12] выдает панель инспектора кода. Используя её и вкладку Network можно исследовать выполняемый к сайту запрос и узнать всё необходимое.

Алгоритм действий тут примерно такой - включаем браузер Google Chrome, вызываем инспектор кода по [F12].

Открываем вкладку Network. Обычным способом переходим на нужную страницу сайта (не закрывая инспектор кода).

При этом получим полный список обращений к различным файлам. Главный файл, к которому идёт обращение обычно расположен в самом начале, поэтому прокручиваем полосу прокрутки на начало и кликаем этот файл.

Алгоритм действий тут примерно такой - включаем браузер Google Chrome, вызываем инспектор кода по [F12].
Открываем вкладку Network. Обычным способом переходим на нужную страницу сайта (не закрывая инспектор кода).
При этом получим полный список обращений к различным файлам. Главный файл, к которому идёт обращение обычно расположен в самом начале, поэтому
прокручиваем полосу прокрутки на начало и кликаем этот файл.

Получаем всю необходимую информацию - полный URL запроса (Request URL), результат выполнения - 200 - т. е. ОК, какой заголовок запроса Request Headers и какой заголовок ответа Responce Headers был получен.

Т. е. тут можно найти всё что нужно, чтобы написать запросы для обращений к сайту посредством сокетов.

В наше время информационного бума уже нереально рассчитывать только на собственные силы - нужно использовать роботов, хотя бы программных, которые могут и должны выполнять те или иные рутинные, большие по объёму и времени задачи, такие как сбор нужной информации с сайтов и её обработка.

Всё это можно реализовать с использованием сокетов. Я надеюсь еще вернуться к теме сокетов в последующих статьях, т. к. тема достаточно обширна.

Спасибо за внимание и проявленный интерес к статье.



[к содержанию]

Содержимое данной страницы доступно только зарегистрированным пользователям.



Пожалуйста войдите на сайт - Вход

или пройдите процедуру регистрации - Регистрация

megainformatic live chat
Начать беседу
X
 

Оставленные комментарии



fle game engine - движок для создания игр
fle game engine - движок для создания игр


Something: Unexplained 2 captive of desires / Нечто: Необъяснимое 2 в плену желаний
Костя Коробкин Комикс Коллекционное издание - 6 комиксов, 81 страница, 220 mp3 треков
megainformatic Размещение баннерной рекламы у нас
Время загрузки: 0,9905