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


Balls and holes PC game / Balls and Holes PC игра
Вакансии
Игродельня
Сегодня
24 марта 2019 18:26
Теги создание сайтов, создание игр, дизайн, игры, информатика, уроки photshop, php, c++, музыка, delphi, cms, робосайт
Статьи сайта
megainformatic - Game craft - проект разработки игровых и мультимедийных проектов

megainformatic - Game craft - моделируем scv

megainformatic - Game craft - моделируем scv - шаг 1 (часть 2)

megainformatic - Game craft - моделируем scv - шаг 2 (часть 3)

megainformatic - Game craft - Наложение текстуры на модель робота scv (часть 4)

megainformatic - Game craft - Прорисовка текстуры робота SCV шаг 5

megainformatic - Game craft - Экспорт модели из 3ds max в формат X

megainformatic - Game craft - отображение scv модели в формате x в d3d9-приложении

megainformatic - Game craft - управление игрой от Direct Input в d3d9 - приложении

megainformatic - Game craft - игровая камера в d3d9 - приложении

megainformatic - Приключения Кости Коробкина - Как я провел лето - онлайн комикс - страница 1

megainformatic - Приключения Кости Коробкина - Как я провел лето - онлайн комикс - страница 2

megainformatic - Приключения Кости Коробкина - Как я провел лето - онлайн комикс - страница 3

megainformatic - Приключения Кости Коробкина - Как я провел лето - онлайн комикс - страница 4

megainformatic - Приключения Кости Коробкина - Как я провел лето - онлайн комикс - страница 5

megainformatic - Приключения Кости Коробкина - Как я провел лето - онлайн комикс - страница 6

megainformatic - Приключения Кости Коробкина - Как я провел лето - онлайн комикс - страница 7

megainformatic - Приключения Кости Коробкина - С новым годом - интерактивный комикс (kk hny) - онлайн комикс - страница 1

megainformatic - Приключения Кости Коробкина - С новым годом - интерактивный комикс (kk hny) - онлайн комикс - страница 2

megainformatic - Приключения Кости Коробкина - С новым годом - интерактивный комикс (kk hny) - онлайн комикс - страница 3

megainformatic - Приключения Кости Коробкина - С новым годом - интерактивный комикс (kk hny) - онлайн комикс - страница 4

megainformatic - Приключения Кости Коробкина - С новым годом - интерактивный комикс (kk hny) - онлайн комикс - страница 5

megainformatic - Приключения Кости Коробкина - С новым годом - интерактивный комикс (kk hny) - онлайн комикс - страница 6

megainformatic - Приключения Кости Коробкина - С новым годом - интерактивный комикс (kk hny) - онлайн комикс - страница 7

megainformatic - Костя Коробкин - СЕКРЕТНЫЙ ПРОЕКТ - интерактивный комикс (kk scp) - онлайн комикс - страница 1

megainformatic - Костя Коробкин - СЕКРЕТНЫЙ ПРОЕКТ - интерактивный комикс (kk scp) - онлайн комикс - страница 2

megainformatic - Костя Коробкин - СЕКРЕТНЫЙ ПРОЕКТ - интерактивный комикс (kk scp) - онлайн комикс - страница 3

megainformatic - Костя Коробкин - СЕКРЕТНЫЙ ПРОЕКТ - интерактивный комикс (kk scp) - онлайн комикс - страница 4

megainformatic - Костя Коробкин - СЕКРЕТНЫЙ ПРОЕКТ - интерактивный комикс (kk scp) - онлайн комикс - страница 5

megainformatic - Костя Коробкин - СЕКРЕТНЫЙ ПРОЕКТ - интерактивный комикс (kk scp) - онлайн комикс - страница 6

megainformatic - Костя Коробкин - СЕКРЕТНЫЙ ПРОЕКТ - интерактивный комикс (kk scp) - онлайн комикс - страница 7

megainformatic - Веселый Буквоежка - онлайн комикс - страница 1

megainformatic - Веселый Буквоежка - онлайн комикс - страница 2

megainformatic - Веселый Буквоежка - онлайн комикс - страница 3

megainformatic - Веселый Буквоежка - онлайн комикс - страница 4

megainformatic - Веселый Буквоежка - онлайн комикс - страница 5

megainformatic - Веселый Буквоежка - онлайн комикс - страница 6

megainformatic - Веселый Буквоежка - онлайн комикс - страница 7

megainformatic - Веселый Буквоежка - онлайн комикс - страница 8

megainformatic - Веселый Буквоежка - онлайн комикс - страница 9

megainformatic - Веселый Буквоежка - онлайн комикс - страница 10

megainformatic - Веселый Буквоежка - онлайн комикс - страница 11

megainformatic - Веселый Буквоежка - онлайн комикс - страница 12

megainformatic - Веселый Буквоежка - онлайн комикс - страница 13

megainformatic - Веселый Буквоежка - онлайн комикс - страница 14

megainformatic - Веселый Буквоежка - онлайн комикс - страница 15

megainformatic - Веселый Буквоежка - онлайн комикс - страница 16

megainformatic - Веселый Буквоежка - онлайн комикс - страница 17

megainformatic - Веселый Буквоежка - онлайн комикс - страница 18

megainformatic - Веселый Буквоежка - онлайн комикс - страница 19

megainformatic - Веселый Буквоежка - онлайн комикс - страница 20

megainformatic - Веселый Буквоежка - онлайн комикс - страница 21

megainformatic - Веселый Буквоежка - онлайн комикс - страница 22

megainformatic - Веселый Буквоежка - онлайн комикс - страница 23

megainformatic - Эмулятор ZX-Spectrum, БК-0010.01 и их работа в эмуляторе DosBox 0.74

megainformatic - Костя Коробкин - В гостях у тёти Светы (kk as) - онлайн комикс - страница 1

подробнее

Легко ли быть программистом

Я никогда не планировал быть программистом. Мечты мои были совсем другими.

Сначала я захотел научиться делать свои собственные игры. Это было еще в далеком 1992 году.

Тогда моим первым компьютером был ЭЛЕКТРОНИКА БК-0010.01

На этом компьютере было 64 Килобайта памяти. Из них 32 Кб отводилось под ПЗУ - Постоянное Запоминающее устройство, в котором находились интерпретатор бейсика и еще кое-какие системные программы. Оставшиеся 32 Кб делились на 2 части по 16 Кб каждая и составляли ОЗУ и экранную память. БК-шка имела 4 цвета - черный, синий, зеленый и красный и разрешение экрана 256х512 точек. Каждая точка, как видим, занимала всего 2 бита в экранной памяти. Таким образом и получается ровно 16 Кб экранного ОЗУ.

На БК-шке я изучил основы программирования на бейсике, фокале и в машинных кодах.

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

На бейсике была написана игра, похожая на одну из игр для компьютера АГАТ-7, в которой персонаж в виде экранного символа должен двигать стены и таким образом захватить других врагов.

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

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

В конце 1996 года моя БК-шка вышла из строя. И я задумался где взять другую. В то время существовала некая фирма КИ-ЧПМ, которая занималась продажей программ для БК по почте. Через эту фирму я заказывал сборники игр и программ для БК присылаемые почтой на обычных аудио-кассетах.

В одном из писем, сотрудники этой фирмы предложили мне переходить на IBM PC и даже предложили мне апгрейд моего старого БК на IBM.

На дворе был 1997 год, уже во всю властвовали IBM PC 486 и Pentium, повсеместно использовалась операционная система Windows 95.

Но я о таком пока мог только мечтать. Я заказал и получил машину, более скромную по возможностям - IBM PC 286, которая имела 40 Mb жесткий диск, мышку, 1 MB оперативной памяти, 256 Кб VGA адаптер, флоппи дисковод для 1,44 Mb дискет.

Но для меня это был ОГРОМНЫЙ ШАГ ВПЕРЕД. Представьте себе - теперь не нужно было загружать программы с магнитофона - они почти мнгновенно грузились с жесткого диска. Спустя некоторое время я приобрел цветной монитор и звуковую карту и получил компьютер на котором было можно ВСЁ !

Самой главной проблемой того времени - 1998-2001 годы было то, где достать программы для IBM PC совместимого ПК. О выходе в интернет также пока речи не было. Однако я не терял времени и освоил GW-Basic и активно стал писать небольшие музыкальные треки на нём. Затем благодаря учебе в университете, я получил выход в интернет (правда не из дома и не для своего компьютера). Но мне удалось найти в интернете несколько программ для создания музыки, одной из них была SADT2, в это же время я приобрел звуковую карту и начал делать отличную для того времени 9 канальную музыку !!!

Примеры этих композиций Вы можете послушать на страничке Мои ранние композиции 1998-2001 годов

Шло время, я переходил на более мощные ПК - сначала 386, потом 486, затем Пентиум. Кроме того для Пентиума я приобрел уже CD-ROM привод и жесткий диск на 650 Mb. Благодаря этому, а также благодаря Delphi 5 и книге по Delphi 3 я начал осваивать программирование на Delphi и языке object pascal.

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

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

В 2001 году я закончил университет, а в 2002 поступил в аспирантуру. Тогда я перешел на Celeron, приобрел жесткий диск на 20 Gb, а также полностью сменил всю начинку своего ПК - от материнской платы и памяти, до пишущего привода CD-ROM.

В этот период я смог осваивать и работать на компьютере более серьезно. Главной задачей и вопросом которые я себе тогда ставил - это была попытка создания игры - Дорога в город на Delphi 7 для Directx 7, а также освоение таких программ как Adobe Photoshop, Corel Draw, 3ds max.

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

В 2006 году я стал дизайнером. Активно работал с программами Adobe Photoshop, Corel Draw, 3ds max, а также по своей инициативе продолжал заниматься проблемами создания игр на delphi и c++ для directx 8.1 и directx 9c.

С 2006 по 2010 годы были выпущены целый ряд проектов, написанных как на delphi для directx 8.1, так и на c++ для directx 9c.

Это эмулятор игры Ну, Погоди !, которая была сначала написана на delphi для directx 8.1, а чуть позже, когда я освоил directx 9c и cpp была перенесена на c++ для directx 9c.

Игра Нечто: необъяснимое - этот проект также был написан на delphi для directx 8.1. Проект к сожалению не был доведен до логического завершения, но послужил основой для целого ряда других проектов.

В 2009 году была выпущена игра Нечто: необъяснимое - в плену желаний - эта игра написана на delphi для directx 8.1 и в ней, как и в Дороге в Город, было реализовано всё задуманное, или по крайней мере минимальное из задуманного и проект был доведен до логического завершения. Игру было решено распространять на бесплатной основе. И Вы сейчас можете набрать в любом поисковике фразу Нечто: необъяснимое - в плену желаний и получите кучу ссылок и кучу сайтов, на которых есть эта моя игра :))))

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

В 2007 году была реализована небольшая игра, а точнее пример 3d игры DONUTS 3D исходный код которой Вы можете скачать. Она представляет собой пример из directx sdk 8, который я переделал на delphi directx.

В период с 2010 по 2012 годы я занимался работой над самым крупным своим игровым проектом - ВЕСЕЛЫЙ БУКВОЕЖКА.

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

В период с 2010 по настоящий момент я занимаюсь в основном созданием сайтов и web-приложений на php, html, css, javascript, mysql.

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

Программирование - это необходимость, которую мне пришлось преодолевать на пути к достижению своих целей.

Мой арсенал составляют языки от ассемблера, c++, delphi и паскаля, до php, mysql, javascript, html, css и некоторых других технологий.

Также меня всегда интересовала компьютерная графика и музыка, благодаря чему я свободно владею Photoshop, 3ds max, Corel Draw, GIMP, а также Mod Plug Tracker, Sound Forge, Adobe Audition, Fruity Loops Studio и некоторыми другими аналогичными программами.

Хотите ли Вы быть программистом и легко ли им быть ?

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

подробнее

     
 

Создаем выпадающее меню средствами html + css

В данном уроке мы попробуем создать следующее выпадающее меню - popup menu

 
     
 

Первым делом подключаем к странице файл стилей -

<link rel="stylesheet" href="css/style.css" type="text/css" /> содержимое этого файла находится здесь - css/style.css

 
     
  в котором будем описывать необходимые классы и их свойства, влияющие на оформление нашего меню.  
     
  div#bm_main_container  
     
 

данный класс, описанный как уникальный по его id (о чём свидетельствует знак #) будет задавать у нас контейнер для содержимого страницы

в html опишем его как див -

<div id="bm_main_container">

</div>

 
     
  обратите внимание, что мы указали, что для данного блока див, свойства берутся не из класса (class), а из уникального элемента объявленного как id (#)  
     
  Теперь углубимся в рассмотрение кода для css и html  
     
  div#bm_main_container {
width: 1024px; /* задаем ширину контейнера для страницы 1024 пикселя */
background: #f2f2f2; /* цвет фона для контейнера будет бледно-серый */
margin: 0 auto; /* это нужно для размещения контейнера по центру страницы вне зависимости от ширины экрана */
}
 
     
 

в html внутри блока bm_main_container

<div id="bm_main_container">

<!-- описываем блок, представляющий строку меню -->

<div id="bm_category_container"></div>

</div>

 
     
 

в css добавляем

div#bm_category_container {
float: left; /* прижимаем блок меню к левой границе */
background: #fff; /* задаем белый фон */
width: 100%; /* располагаем меню во всю ширину */
height: 28px; /*высоту строки меню определяем в 28 пикселей */
border-top: 1px dashed #000; /* верхний и нижний бордюр черного цвета, выполненный штрихами*/
border-bottom: 1px dashed #000;
margin-bottom: 10px; /* внешний отступ под строкой меню 10 пикселей */
}

 
     
 

/* пункты меню будут элементами ненумерованного списка, поэтому уточняем их свойства

для самого блока ненумерованного списка - ul

*/

#bm_category_container ul {
margin: 1px 5px; /*внешний отступ сверху и снизу по 1 пикселю, слева и справа - по 5 */
padding: 0; /* без внутренних отступов */
}

/* для каждого из пунктов меню */
#bm_category_container li a {

float: left; /* прижать к левой границе */
display: block; /* отображать блоками - т. е. в начале и конце блока содержимое переносится, если не умещается в заданных размерах */
color: #901e78; /* для пунктов меню задаем пурпурный цвет */
padding: 5px 8px; /* внешние отступы сверху/снизу - 5 пикселей, слева/справа - 8 */
font-weight: bold; /* жирный шрифт */
font-family: Verdana, Geneva, sans-serif; /* определяем написание шрифта */
font-size: 14px; /* размер букв - 14 пиксель */
}

 
     
  в html описываем первый пункт меню и его элементы -  
     
 

<div id="bm_category_container">

<!-- открываем тег ненумерованного списка -->
<ul>

<!-- задаем блок для отображения пункта меню -->
<div id="header_wm">

<!-- подпункты будут ненумерованным списком -->
<ul class="models_wm">
<li>

<!-- описываем ссылку на пункт меню и некоторые дополнительные свойства стиля -->
<a style="text-decoration: none;" href="#">&bull;&nbsp;Пункт меню1</a>

<!-- подпункты будут также ненумерованным списком -->
<ul>

<!-- для упорядочения подпунктов применяем таблицу -->
<table width="100%" border="0" cellspacing="0" cellpadding="0">

<!-- в первой строке выделяем названия столбцов для подгрупп-->
<tr>
<td><li>

<!-- и прописываем их названия -->
<a href="#">Подгруппа1</a>
</li></td>
<td><li><a href="#">Подгруппа2</a></li></td>
<td><li><a href="#">Подгруппа3</a></li></td>
</tr>

<!-- прописываем названия подпунктов меню -->
<tr>
<td><a style="color: #fff; font-weight: normal;" href="#">Подпункт1</a></td>
<td><a style="color: #fff; font-weight: normal;" href="#">Подпункт2</a></td>
<td><a style="color: #fff; font-weight: normal;" href="#">Подпункт3</a></td>
</tr>
<tr>
<td><a style="color: #fff; font-weight: normal;" href="#">Подпункт1</a></td>
<td><a style="color: #fff; font-weight: normal;" href="#">Подпункт2</a></td>
<td><a style="color: #fff; font-weight: normal;" href="#">Подпункт3</a></td>
</tr>
<tr>
<td><a style="color: #fff; font-weight: normal;" href="#">Подпункт1</a></td>
<td><a style="color: #fff; font-weight: normal;" href="#">Подпункт2</a></td>
<td><a style="color: #fff; font-weight: normal;" href="#">Подпункт3</a></td>

<!-- закрываем все открытые теги -->
</tr>
</table>
</ul>
</li>
</ul>
</div>

</ul>

</div>

 
     
  в css описываем следующее -  
     
 

/* последовательно описываем все необходимые свойства для оформления пункта меню и подпунктов */

/* сначала описываем свойства названия пункта меню */

#header_wm .models_wm {
list-style-type: none; /* стиль элемента списка - невидимый */
float: left; /* прижимать элемент к левой границе на странице */
}
#header_wm .models_wm li {

/* прижимать элемент к левой границе на странице */
float: left;

/* положение для элемента - относительное - в данном контексте определяет положение выпадающей вкладки с подменю */
position: relative;
}
#header_wm .models_wm li a {
float: left; /* прижимать элемент к левой границе на странице */
position: relative; /* положение относительное */
font-size: 1.2em; /* размер шрифта 1.2 от ширины буквы M */
color: #901e78; /* цвет пурпурный */
text-decoration: none; /* подчеркивание отключаем */
font-weight: bold; /* шрифт жирный*/
}

/* при наведении указателя мыши на данный пункт меню - */
#header_wm .models_wm li a:hover {
text-decoration: underline; /* включаем подчеркивание */
background: #901e78; /* цвет фона - пурпурный */
color: #fff; /* цвет букв - белый */

}

/* описываем свойства для подпунктов - */
#header_wm .models_wm ul {
list-style-type: none; /* значок элемента списка - отключаем */
display: none; /* показ блока - отключаем */
position: absolute; /* показ блока - положение - абсолютное */

padding: 10px; /* показ блока - положение - абсолютное */
background: url(../image/item1_bg.png); /* фоновое изображения для вкладки подменю, поскольку используем png, то вкладку можно сделать полупрозрачной, использовав полупрозрачное png изображение */
border: 2px #901e78 solid; /* по краям вкладки подменю выводим бордюр, который невидим, т. к. совпадает с цветом фона вкладки */


top: 24px; /* смещение сверху 24 пикселя */
left: -30px; /* смещение слева на -30 пикселей */
z-index: 10000; /* z-порядок с максимальным значением, чтобы вкладка отобразилась поверх остальных блоков страницы */
margin-left: 25px; /* внешний отступ слева 25 пикселей*/
}

/* подпункты меню - */
#header_wm .models_wm ul li {
color: #fff; /* цвет текста названия пункта белый */
width: 180px; /* ширину требуется указать, т. к. ИЕ7 отображает вкладку некорректно */

padding: 5px 0; /* внутренние отступы сверху/снизу - 5 пиксель, слева/справа - 0 */
font: 12px Verdana; /*шрифт - 12 пиксель, Verdana */
float: left;
/* привязка блока к левой границе */

}

/* поскольку подпункты - это ссылки, то нужно задать оформление и для них */

#header_wm .models_wm ul li a {
color: #fff; /* цвет текста названия ссылки белый */
font: 12px Verdana; /*шрифт - 12 пиксель, Verdana */
font-weight:bold; /* шрифт выделен жирным */
float: none; /* привязка блока нет */
}

/* при наведении указателя мыши на подпункт - */

#header_wm .models_wm ul li a:hover {
color: #ccc;
/* делаем цвет подпункта серым */
float: none; /* привязку убираем */
text-decoration: none; /* подчеркивание убираем */
}

/* этот элемент в описании ответствен за отображение вкладки подменю - при наведении указателя мыши на пункт меню активируется показ вкладки подменю представленной тегом ul, и отображается вкладка в виде блока */

#header_wm .models_wm li:hover ul {
display: block;
/* если попробовать закомментировать данное свойство или изменить его значение на другое, то всплывающая вкладка подпункта меню не появится */
}

 
     
  Остальные пункты и подпункты меню реализуются полностью аналогично, с тем лишь отличием, что для них устанавливаются собственные особенности - цвет вкладки, названия пунктов и прочее, что нужно.  
     
  Весь исходный код для данного урока Вы найдёте здесь - popup menu (html) и здесь - css/style.css (css).  
     
подробнее

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

10/06/2008 Воспроизведение файлов в формате OGG Vorbis

Для воспроизведения используется интерфейс для Ogg Vorbis библиотек от Xiph.org

[downloads:15]

Автор конверсии на Delphi - Matthijs Laan, 2001 год.

 

Для создания музыки в формате ogg потребуются следующие манипуляции:

запустить Mod Plug Tracker 1.16 и открыть требуемую мелодию (*.it, *.s3m, *.xm, *.mod). Экспортировать ее в формат mp3 с требуемым качеством.

запустить Sound Forge 7.0, открыть созданный mp3-файл и пересохранить его в формате ogg с требуемым качеством.

 

Теперь рассмотрим как осуществляется процесс воспроизведения созданного файла в примере OggVorbis\demos\player

Проект Player.dpr

Модуль Main.pas

Внутри класса TMainForm

Описаны несколько приватных полей:

WaveOut: TWaveOut;
F: TFileStream;
vf: OggVorbis_File;
FileName: string;

 

При нажатии кнопки sbPlay в окне формы вызывается метод -

procedure TMainForm.sbPlayClick

Внутри него происходит следующее -

if Playing and (not Paused) then
begin
WaveOut.Pause;
//пауза
Paused := True;
Timer1.Enabled := False;
//таймер отключается
sbPlay.Glyph := Glyphs[glPlay];
end
else
if Playing and Paused then
begin
WaveOut.Unpause;
//отключение паузы
Paused := False;
Timer1.Enabled := True;
//включение таймера
sbPlay.Glyph := Glyphs[glPause];
end
else
if OpenDialog1.Execute then
PlayFile(OpenDialog1.FileName);
//загрузка ogg-файла и старт воспроизведения

 
procedure TMainForm.PlayFile(FN: string);
var
res: integer;
begin
FileName := FN;

F := TFileStream.Create(FileName, fmOpenRead or fmShareDenyWrite); //открываем файл

res := ov_open_callbacks(F, vf, nil, 0, ops_callbacks); //передаем OggVorbis-библиотеке
if res <> 0 then
//обрабатываем ошибки открытия
begin
F.Free;
MessageDlg('ov_open_callbacks failed: ' + GetVorbisErrorName(res), mtError, [mbOK], 0);
exit;
end;

WaveOut := TWaveOut.Create(Self); //создаем поток вывода звука
WaveOut.SetWaveFormat(vf.vi.channels = 2, vf.vi.rate, 16);
//и задаем ряд параметров
WaveOut.OnStatsChange := WaveOutStatsChange;
WaveOut.OnPlayingDone := WaveOutPlayingDone;
WaveOut.ReadProc := ReadBuf;
WaveOut.OpenAudio;

GUIPlay; //отображаем воспроизведение на форме окна приложения

WaveOut.Play; //включаем фактическое воспроизведение
end;

 

//данная функция обратного вызова (callback) указанная выше

function TMainForm.ReadBuf(const Buffer; Size: Longword; var Time: Double): Longword;
var
BytesRead, Change: Longword;
begin
BytesRead := 0;

Time := ov_time_tell(vf); //считываем длительность мелодии

repeat
Change := ov_read(vf, PByteArray(Buffer)^[BytesRead], Size - BytesRead, 0, 2, 1, nil);
//загружаем данные в буфер
BytesRead := BytesRead + Change;
until (Change = 0) or (BytesRead = Size);

result := BytesRead;
end;

 
При нажатии sbStop вызывается метод GUIStop -
 
procedure TMainForm.GUIStop;
begin
if not Playing then
//если ничего не играет, то выход
exit;

WaveOut.Free; //очищаем звуковой поток и объект OggVorbis-файла
ov_clear(vf);

Timer1.Enabled := False; //отключаем таймер
{...}

Playing := False; //сбрасываем индикатор проигрывания

{...}
end;

 

Таймер служит для отслеживания текущей позиции воспроизведения -

procedure TMainForm.Timer1Timer(Sender: TObject);
begin
try
lTimeNow.Caption := SecondsToString(WaveOut.PlayingTime);
except
GUIStop;
raise;
end;
end;

 

Регулировка громкости -

procedure TMainForm.trackVolumeChange(Sender: TObject);
begin
if Playing then
WaveOut.Volume := DWORD(trackVolume.Position) + DWORD(trackVolume.Position) shl 16;
trackVolume.Position := WaveOut.Volume and $FFFF;
trackVolume.SliderVisible := True;
end;

procedure TMainForm.FormMouseWheel(Sender: TObject; Shift: TShiftState; WheelDelta: integer; MousePos: TPoint; var Handled: Boolean);
begin
if Playing then
if WheelDelta > 0 then
trackVolume.Position := trackVolume.Position + 3000
else
trackVolume.Position := trackVolume.Position - 3000;
Handled := True;
end;

 

При нажатии на кнопку sbNext (переход к следующей композиции списка воспроизведения) -


WaveOutPlayingDone(Self);

 
procedure TMainForm.WaveOutPlayingDone(Sender: TObject);
begin
GUIStop;
//останавливаем воспроизведение

MREWSPlaylist.BeginRead; //даем сигнал чтения критической секции (для защиты от одновременных обращений к данным списка воспроизведения)
try
if Playlist.Count = 0 then
//если плей-лист пуст - выход
exit;

if Shuffle then //если включена опция выбора случайной композиции из списка, то выборка ее
begin
PlaylistForm.ListBox1.ItemIndex := Trunc(Random(Playlist.Count));
//Trunc вполне можно опустить, т.к. Random итак возвращает Integer
PlaylistForm.ListBox1DblClick(Self);
//и запуск двойного щелчка по данной композиции
exit;
end;

if (PlaylistForm.ListBox1.ItemIndex = (PlaylistForm.ListBox1.Items.Count - 1)) and Repeating then //если найдена последняя композиция списка и включена опция бесконечного повтора, то переход к первой композиции списка
begin
PlaylistForm.ListBox1.ItemIndex := 0;
PlaylistForm.ListBox1DblClick(Self);
exit;
end;

PlaylistForm.ListBox1.ItemIndex := PlaylistForm.ListBox1.ItemIndex + 1; //увеличить индекс текущего элемента на 1
PlaylistForm.ListBox1DblClick(Self);
finally
MREWSPlaylist.EndRead;
end;
end;

 

модуль Playlist.pas

procedure TPlaylistForm.ListBox1DblClick(Sender: TObject); //двойной щелчок по элементу списка воспроизведения приводит к остановке воспроизведения текущей мелодии и к старту воспроизведения выбранной
begin
MainForm.GUIStop;

MainForm.PlayFile(ListBox1.Items.Strings[ListBox1.ItemIndex]);
end;

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

Файлы необходимые для поставки с дистрибутивом игры -

vorbisfile.dll

ogg.dll

vorbis.dll

Исходные файлы - в папке OggVorbis -

AudioWaveOut.pas - вывод декодированного звука

OSTypes.pas - базовые типы

Codec.pas - интерфейс к vorbis.dll

VorbisFile.pas - интерфейс к vorbisfile.dll

Ogg.pas - интерфейс к ogg.dll

 

В опциях проекта указываем ссылку на папку OggVorbis содержащую данные файлы - Project > Options > Directories/Conditionals > Search Path

В секцию uses модуля который будет содержать команды воспроизведения добавляем ссылки на модули - AudioWaveOut, VorbisFile

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

Правила использования:

Добавить в проект необходимые файлы - см. выше

В секции uses модуля проекта, в котором будет воспроизводиться музыка добавить ссылку на OggMusic.pas

Внутри нужного класса (приложения или игровой сцены) объявить поле с типом TOggVorbisPlayer -

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

Например,

function TD3DGameApp.CreateSoundObjects(h_Wnd: HWND): HRESULT;
begin
//создаем OggPlayer для музыкальных тем
CreatePlayer;

{...}

function TD3DGameApp.CreatePlayer: HResult;
begin

OggMusicPlayer := TOggVorbisPlayer.Create(m_hWnd); //передаем обработчик окна приложения объекту плеера

if Assigned(OggMusicPlayer) then result := S_OK
else
result := E_FAIL;

end;

procedure TD3DGameApp.FreePlayer;
begin
FreeAndNil(OggMusicPlayer);
//удаляем плеер
end;

procedure TD3DGameApp.PlayTheme(Theme: string);
begin
if Assigned(OggMusicPlayer) then
OggMusicPlayer.Play(Theme);
//проигрываем указанный Ogg-файл
end;

procedure TD3DGameApp.StopTheme;
begin
if Assigned(OggMusicPlayer) then
//делаем паузу в воспроизведении
OggMusicPlayer.Pause;
end;


procedure TD3DGameApp.DestroySoundObjects;
begin
FreePlayer;
//вызываем удаление плеера

 

Доработки: поскольку музыка играет без использования IDirectSound, то при сворачивании окна приложения она продолжает играть. Чтобы это исправить можно вызывать метод паузы на время пока приложение неактивно.

Ряд вопросов:

насколько велика временная задержка при переключении на проигрывание новой мелодии?

насколько велика задержка при бесконечном воспроизведении? Она должна быть равна вышеуказанной, т.к. проигрывание той же мелодии происходит путем очистки объекта WaveOut с последующей повторной загрузкой.

 
Регулировка громкости музыки из окна Настройки - см. следующую статью
 
     
  [Назад] [Все уроки] [Далее]  
     
подробнее

Веселый Буквоежка - онлайн комикс - страница 5

представляем Веселый Буквоежка - онлайн комикс.

Тут пауки пошли в наступление. Я встал, я один смог встать. Поднял лом и начал махать им. Лом задел обо что-то твердое и полетели искры. Лежавшая рядом куча мусора ярко вспыхнула. Налетевший порыв ветра раздул пламя еще сильнее.

Веселый Буквоежка - онлайн комикс - страница 5

если кликать картинку она будет последовательно меняться в размерах от 620 до 2048 пиксель.

[страница 1]  [страница 2]  [страница 3]  [страница 4]  [страница 5]  [страница 6]  [страница 7]  [страница 8]  [страница 9]  [страница 10]  [страница 11]  [страница 12]  [страница 13]  [страница 14]  [страница 15]  [страница 16]  [страница 17]  [страница 18]  [страница 19]  [страница 20]  [страница 21]  [страница 22]  [страница 23] 

       
  Урок 1: Синтез звука средствами Sound Forge 7.0 Описываются методы 4-х операторного FM-синтеза сэмплов.  
       
  Итак, не мешкая возьмемся за дело. Начнём Мы с самого простого - Синтеза звука. Для этого Вам понадобится программа Sound Forge любой версии какая пойдет на Вашем компьютере. В статье описывается принцип работы с Sound Forge 7.0, но если у Вас более ранняя версия, то базовые принципы те же. Sound Forge, далее для краткости - SF.  
       
  Взгляните-ка на этот рисунок:
Пример звука - ударный "бочка".
 
       
 

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

Перед Вами изображение звуковой волны генерирующей шумоподобный звук - ударный "бочка" - излюбленный инстумент всех стилей электронной музыки - легендарная техно-бочка.

Щелкнув по изображению Вы можете немедленно скачать архив с этим звуком (или более профессионально - сэмплом [sample]) - размер 12Кб.

Заметки: звуки или сэмплы - это основа любого музыкального произведения, будь то midi-файл, дорожка из трэкера или профессиональная оранжировка в wav или mp3. Для синтеза звуков используются различные синтезаторы - алгоритмы генерации звука. Современные программы типа Sound Forge позволяют Вам синтезировать практичеки любой звук. Кроме того, легко оцифровать живой звук, обработать его и получить - сэмпл - образец для проигрывания в трэкере или миди-секвенсере.  
       
  Теперь рассмотрим как Вам самим создать нечто подобное или иное, используя возможности Sound Forge 7 (или более ранней версии).    
 

Создайте новый файл-проект:

File > New

Запустите Sound Forge и выберите File>New
 
       
 

В появившемся диалоговом окне выберите: Sample rate - частоту дискретизации - 44 100 Hz; Bit-depth - глубину квантования, бит - 16; Channels - число каналов - 1/2 (т.е. моно/стерео).

Все вышеуказанные характеристики напрямую влияют на качество сэмпла и размер звукового файла. Вы можете сами рассчитать размер получаемого файла зная, что сэмпл длинной 1 секунда с качеством 44100 Hz, 8 бит, моно займет ровно 44100 байт.

В нашем случае, если наш сэмпл будет длительностью в 1 секунду размер файла составит 88200 байт (т.к. глубина квантования равна 16 битам, т.е. 2 байтам).

Выберите требуемую частоту дискретизации, глубину, число каналов
 
       
  Почему мы выбрали моно-сэмпл? Так как мы сейчас разбираем простейший и наиболее распространенный случай. Кроме того, чаще всего моно-сэмпл предпочтительнее по нескольким причинам - самый распространенный стерео-эффект это смещение панорамы, а в любом трекере это достигается смещением панорамы с использованием обыкновенного моно-сэмпла. Получается, что используя стерео-сэмплы в трекерах мы только зря расходуем место - музыкальный файл получается больше в размере (но не лучше в качестве). Многие трэкеры (например Impulse Tracker, Scream Tracker) допускают использование только моно-сэмплов. Но легко можно использовать и стерео-сэмплы, но об этом далее...  
       
  Что такое трэкер? Возможно Вы слышали о них. Трэкеры - это музыкальные нотные секвенсеры использующие в качестве базовых звуков - загружаемые сэмплы. Выше уже упоминались известные Impulse и Scream - трэкеры. Это вообщем-то, пионеры трекерства, написанные еще на чистом ассемблере и использующие прямое обращение к звуковой карте применяя свой собственный драйвер. Они пришли к нам во времена господства MS-DOS. И как ни странно, они еще живы и здравствуют. Более того, они стали стандартом де-факто и многие плееры, например WinAmp, легко понимают трекерский формат (файлы it, mod, xm и т.д.) Еще один Важный плюс трекерской музыки - если использовать разумное соотношение качество/размер файла для сэмплов, то 1) файл трекера (или попросту трек) с высококачественным музыкальным произведением имеет МИНИМАЛЬНЫЙ РАЗМЕР по сравнению с mp3-форматом! И 2) для проигрывания файла трекера не используются ресурсы основного процессора (не требуется декодирование, как в случае с mp3-файлом). Конечно, на сегодняшний день проблема быстроты и размера кому-то покажется не так актуальна. Мощности процессоров и обьемы памяти давно уже перещагнули гига-рубеж (Гига-герцы, Гига-байты)... Но все же.  
       
 

Но вернемся к нашему сэмплу. Жмём ОК. В окне SF появится новый "пустой" звук или по-просту тишина. Сгенерируем вышеназванный сэмпл - ударный "бочка".

Tools > Synthesis > FM

Используем FM-синтез
 
       
  Для синтеза нашего первого сэмпла мы воспользуемся FM-синтезом. FM-синтез: что-то знакомое, не правда ли? Ах, да, вспомните например 104,5 FM. (Europa+). Да, частотная модуляция (frequence modulation) имеет и некоторую связь с FM-радиовещанием, хотя конечно это не совсем одно и то же. Поэтому не следует путать то и другое. Мы рассмотрим FM-синтез в применении к генерации звука. Не вдаваясь в теоретические детали можно лишь сказать - это основной базовый метод (с различными вариациями), который может использовать звуковая карта любого современного ПК для синтеза практически любого звука.  
       
 

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

Пойдем от верхней части окна:

Preset - содержит набор предустановок синтезатора, т.е. все установки можно сохранять в виде отдельных preset'ов. Это очень удобно и можно составить библиотеку типовых предустановок для синтеза различных типовых сэмплов - ударных, струнных, солирующих, басов и т.д. и т.п.

Диалоговое окно параметров FM-синтезатора
 
       
 

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

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

Использование стандартных предустановок программы для синтеза новых сэмплов
 
       
  Жмёте ОК - и получаете в своё распоряжение новый сэмпл. Теперь можете сохранить его на диске. File > Save As.
Как сохранить свой первый сэмпл
 
       
  В каком формате сохранить созданный сэмпл? По умолчанию SF Вам предложит, и весьма разумно, формат wave (файл типа *.wav). Это самый распространенный формат (пусть и не самый компактный). Но особая компактность нам пока тут и не нужна. Кроме того, сэмплы и не бывают слишком длинными - это же только образцы звучания музыкальных инструментов, да и wav-формат понимает большинство трэкеров. Единственная проблема, это имя файла, а именно, название, которое сможет понять, например, Impulse Tracker, не должно превышать 8 символов (по стандарту MS-DOS).  
  [Следующий урок]    
       
       
       
megainformatic live chat
Начать беседу
X
 

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



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


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