Войти
ПрограммированиеФорумЗвук

Подскажите, как сделать меняющийся звук??

Страницы: 1 2 Следующая »
#0
0:18, 19 янв. 2013

Привет
Я работаю над созданием игры - автомобиль. Для этого использую только jQuery.
Для внедрения звука, думаю взять http://www.schillmania.com/projects/soundmanager2/

Хотел бы использовать короткий звуковой файл - звук двигателя на холостом ходу, который должен проигрываться в цикле, все время когда двигатель работает. Но этот звук должен соответствовать  оборотам двигателя. При больших оборотах он должен стать выше... как бы нужно увеличить транспонирование. Плавно. И наоборот, при снижении оборотов, транспонирование должно уменьшаться.

Я давно уже занимаюсь программированием (не игр) и вот впервые столкнулся с игрой, тем более со звуком, поэтому прошу объясните как начинающему, как лучше поступить!

Благодарю!


#1
15:04, 19 янв. 2013

Тут на форуме уже не раз и не два поднимали тему создания звука двигателя. Одно могу сказать точно - простым транспонированием не получить реалистичного звука. Все конечно зависит от конкретной задачи. Но более реалистично будет, если использовать несколько семплов - холостого хода, ускорения, цикличный звук постоянной работы (возможно звук переключения передачи, если необходимо), замедления. А если просто транспонировать, то звук мотора будет звучать неестественно. А чтоб добиться программными средствами более естественного звучания, нужно множеством параметров управлять. Я сходу затрудняюсь даже перечислить. В общем, мне кажется использование нескольких семплов - это более простой путь, чем программное управление звуком двигателя.

#2
15:48, 19 янв. 2013

Спасибо. Можете указать ссылки на эти посты? И можно то что вы сказали реализовать с помощью http://www.schillmania.com/projects/soundmanager2/ ?

#3
16:09, 19 янв. 2013

Ссылки

#4
16:30, 19 янв. 2013

варианты:
1)заранее сделать возрастающий и убывающий звуки заранее.+стационарный
и просто когда начинаем тормозить тут же начинаем воспроизведение звука, отвечающего за торможение начинаю с позиции соответствующей скорости (проинтерполируй линейно)
2)найти другой web sound api который умеет менять pitch

первый вариант идеален в отличие от второго

#5
17:59, 19 янв. 2013

IDelegate
1. Если игрок не захочет дальше ускоряться, то как остановить возрастание звука? Я себе представлял это совсем по другому... в зависимости от оборотов двигателя меняется транспозиция (транспозиция - это все (кроме нот) что я знаю о звуках!!! Вот теперь нужно поискать что такое линейная интерполяция!)
2. За одно нужно искать, что такое pitch

3. Другой АПИ - разве есть такие, которые созданы на jQuery ?

Ахура
Спасибо, щас почитаю...

#6
18:03, 19 янв. 2013

остановить возрастание звука? просто начать проигрывание звука, отвечающего за холостой ход)
(звук очень медленно спадающей по частоте (когда мы не жмём газ) там тоже нужно знать откудаво начать воспроизведение с какой секунды)

линейная интерполяция

ну вот есть у тебя звук длиной в 40 секунд, отвечающий за разгон (заранее записанный)
первая секунда соответствует скорости 0, последняя максимальной.
значит i-ая секунда будет говорить о скорости (40/скорость)*время. как только мы достигаем максимальной, то меняем на постоянный звук, соответствующей высокой скорости.

насколько я понимаю всё это должно хорошо прокатить

pitch это тембр

#7
18:20, 19 янв. 2013

Эту идею можно оставить про запас, если не найти получше...
Тут если например игрок не разогнался до максимума, а решил ездить на Х оборотах... Такая специфика игры, не гонки... То нужно как то перейти на постоянный звук, но не на тот что соответствует максимальным оборотам... Получается что если нужно чтобы звук менялся более-менее плавно, то нужно иметь постоянный звук для множества возможных значений оборотов... Около 7000 !

Я вот играю в drag racing - попробуйте. Там все кажется так просто, только вот как сделано...

#8
18:53, 19 янв. 2013
Тут если например игрок не разогнался до максимума, а решил ездить на Х оборотах... Такая специфика игры, не гонки... То нужно как то перейти на постоянный звук, но не на тот что соответствует максимальным оборотам... Получается что если нужно чтобы звук менялся более-менее плавно, то нужно иметь постоянный звук для множества возможных значений оборотов... Около 7000 !

Надо сделать длинющий трек в 10 минут, спадающий немного по тембру, тогда если мы отпустим кнопку газа на скорости 100, то надо начать воспроизведение на какой-то секунде (100*10*60/макс_скорость)

Почему спадающий? ну так трение же есть.

#9
19:48, 19 янв. 2013

Он может двигаться на скорости 70... с постоянной скоростью.
Ну да ладно, а можно как то начать воспроизведение звука с какой то метки времени? Если да, можно сделать соответствие метка-скорость! Если бы еще можно было остановить звук на секунде Х и проигрывать в цикле короткий промежуток, например 0,5 сек. Получится то что я хотел, только без транспонирования.

#10
20:10, 19 янв. 2013

в играх не встречал, у всех скорость падала если не жать кнопку.
зачем интересно в цикле. но если так хочешь то цикл можно сделать возвращая к позиции. посмотрел в документации твоего апи там есть функция для воспр с позиции

object:SMSound setPosition(id:string,msecOffset:integer)
Seeeks to a given position within a sound, specified by miliseconds (1000 msec = 1 second) and returns the related sound object. Affects position property.
Example: soundManager.setPosition('mySound',2500);
Can only seek within loaded sound data, as defined by the duration property.

#11
20:14, 19 янв. 2013

Интересно, а вот так получится:
http://stackoverflow.com/questions/9563887/setting-html5-audio-position

1. Сделать длинный нарастающий звук.
2. Создать соответствия обороты-секунды (на какой секунде находится соответствующий данным оборотам звук)
3. В каждом цикле игры, после вычисления оборотов, использовать this.currentTime = ХХ;

Это не даст звуковому файлу проигрываться до конца, так как несколько раз в секунду this.currentTime будет меняться. В движке который я пытаюсь использовать можно сделать несколько циклов, так, для звука можно создать особый цикл, например 500 ms, чтобы звук обновлялся 2 раза в секунду!

Что скажете?

#12
20:15, 19 янв. 2013

IDelegate
> n only seek within loaded sound data, as defined by the duration property.
>
>
:) Ты ответеил за 1 секунду передо мной.

Значит это вариант!! Да?

Я могу даже не взять SoundManager, это можно сделать просто, средствами html5.

#13
20:19, 19 янв. 2013
3. В каждом цикле игры, после вычисления оборотов, использовать this.currentTime = ХХ;

потому что так неправильно) если жмём на газы то speed_up = true;

if (speed_up)
{
    if(проигрывается нужный звук) пусть себе дальше проигрывается;
    else (начнём воспроизводить нужный с позиции соответствующей скорости)
}

Значит это вариант!! Да?

вариант но фиговый, более того скорее всего будут заметны пробелы
#14
12:09, 20 янв. 2013

Я тут мимо проходил и, скорее всего, не совсем в кассу, но в составе FMOD есть программное средство имитации двигателя внутреннего зажигания.
http://www.tracktimeaudio.com/?p=240

Страницы: 1 2 Следующая »
ПрограммированиеФорумЗвук

Тема в архиве.