Пятница, 29 Ноября 2024, 10:48

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Проблема с громкостью звука
AHTOXA82Дата: Четверг, 19 Декабря 2013, 11:12 | Сообщение # 1
частый гость
Сейчас нет на сайте
В справке ГМС написано, что функцией audio_sound_gain можно регулировать громкость не только звукового файла, но и конкретного звука. Т.е. если например у меня на один звуковой файл повешены два звука с разными именами, то можно регулировать громкость каждого из них независимо друг от друга. На практике у меня получается, что громкость файла менять можно, а громкость отдельного звука нет. На самом деле там у меня целый букет ошибок, лучше сразу переду к примеру. Пример
Немного поясню пример.
Закидываем в ресурс звуков звук zvuk_1 расширения wav.

Создаем объект o_shar, помещаем его в комнату и задаем ему спрайт. В событии создания придаем ему вертикальную скорость и задаем переменной gromkost значение 0.
В событии шага ставим два кода, которые включаем по очереди (первый работает, а второй нет):
Первый
audio_sound_gain(zvuk_1, gromkost, 0);// задаем громкость ФАЙЛУ zvuk_1

if y >300 //заставляем шар отражаться от линии и издавать звук
{
zvuk = audio_play_sound(zvuk_1, 1, 0);
vspeed = -5
}

if y <10 //заставляем шар отражаться от потолка и издавать звук
{
zvuk = audio_play_sound(zvuk_1, 1, 0);
vspeed = 5
}

Этот код работает. При запуске файла звук отсутствует, и если менять громкость кнопками мыши (левая увелич. правая уменьш.), то громкость соответственно меняется. Вопрос у меня здесь вот какой: если поставить audio_sound_gain(zvuk_1, gromkost, 0); ПОСЛЕ включения звука (т.е. в конце приведенного кода), то появляется характерный артефакт в виде некого одиночного "пшика". Это происходит только в первом кадре, потом этих "пшиков" нет. Кто-нибудь может объяснить это явление?

Второй
Второй пример практически ничем не отличается от первого. Разница в том, что мы здесь меняем громкость не у звукового ФАЙЛА zvuk_1, а у конкретного ЗВУКА zvuk. Вот этот код:

audio_sound_gain(zvuk, gromkost, 0);// задаем громкость ЗВУКУ zvuk

if y >300 //заставляем шар отражаться от линии и издавать звук
{
zvuk = audio_play_sound(zvuk_1, 1, 0);
vspeed = -5
}

if y <10 //заставляем шар отражаться от потолка и издавать звук
{
zvuk = audio_play_sound(zvuk_1, 1, 0);
vspeed = 5
}

Если включить этот код, то даже при нулевой громкости будут присутствовать "пшики". Если как в первом примере функцию audio_sound_gain(zvuk, gromkost, 0) вставить ВНИЗУ кода, то "пшики" будут не постоянно, иногда они будут пропускаться.

Объясните люди добрые, по какой причине:
1) В первом опыте код работает нормально;
2) Во втором опыте (когда функция внизу) появляется один "пшик";
3) В третьем опыте "пшики" постоянно;
4) В четвертом опыте "пшики" не постоянно.

P.S. В примере, верхняя цифра на экране показывает тот момент, когда звуковой файл проигрался и начинает проигрываться заново (длится он примерно 2.7 с). Вторая цифра показывает уровень громкости, которую можно менять кнопками мыши.
Raven84Дата: Четверг, 19 Декабря 2013, 13:14 | Сообщение # 2
старожил
Сейчас нет на сайте
AHTOXA82, Помочь не помогу.Но по поводу звука на GMS многие жалуются.Не на одном форуме уже побывал и многие советуют не использовать новый двиг. звука.Все говорят лучше старый (для этого в Настройках в General снимаем соответствующую галочку и используем старые операторы sound_play() и.т.д.).Я вот не помню есть ли в старых операторах изменение громкости кодом,но думаю должно быть и советую попробовать со старым.
Вообще если бы столкнулся с именно этой проблемой,то подсказал бы,но у меня была другая,но тоже связанная со звуком вот и излазил кучу форумов в поисках ответа.Нашел. smile


Super Knight Story (в разработке)
Idolzzz - игра доступна в Steam и Play Market
Oliver's Adventures in the Fairyland
AHTOXA82Дата: Четверг, 19 Декабря 2013, 17:48 | Сообщение # 3
частый гость
Сейчас нет на сайте
Я знаю, что звук в ГМ не очень, это даже в справке в восьмерке написано. Но в данном случае я на 99% уверен, что ошибка в коде, а не в гамаке.
Тут, как я думаю, дело вот в чем.
В первом опыте мы сначала задаем громкость ЗВУКУ, а потом начинаем проигрывать его. И все работает. Это так же, как если мы задаем цвет отрисовки например линии draw_set_color, а после рисуем саму линию draw_line. Если поставить эти команды наоборот, то линия будет черной, и цвет к ней не применится. Я так понимаю, когда мы задаем рисовать линию, то она сразу заносится в переменную с определенными атрибутами (в данном случае с цветом), и дальнейшие манипуляции с цветом эту переменную изменить не могут. Здесь так же. Если мы поставим audio_sound_gain после audio_play_sound, то в переменную заносится проигрывание звука на полной громкости (по умолчанию, так же как отрисовка примитивов выполняется по умолчанию черным цветом) и дальнейшие манипуляции с громкостью уже не изменяют этой переменной. Только вот непонятно, почему тогда звук только в одном шаге слышен, а не постоянно. И непонятно, почему в справке задание громкости стоит ПОСЛЕ проигрывания звука.
Raven84Дата: Четверг, 19 Декабря 2013, 18:24 | Сообщение # 4
старожил
Сейчас нет на сайте
AHTOXA82, Да там справка такая!!! Уже тоже по моему встречал ошибки.Да и к тому же написано без разъяснений многое.Долго возился с collison groups,в справке нифига не сказано про то,что мне нужно.Многочисленные рускоязычные форумы тоже ответов не дали и только на зарубежных форумах нашел ответ и то всего на одном.Просто там чувак с такой же проблемой как у меня столкнулся и тоже описывал,что в справке нет нифига.А ответ на этот вопрос меня вообще шокировал! Скорее всего баг в GMS! Я это все к тому,что если у тебя с английским нормально,то попробуй в google на английском проблему написать.Иногда выручает.

Super Knight Story (в разработке)
Idolzzz - игра доступна в Steam и Play Market
Oliver's Adventures in the Fairyland
AHTOXA82Дата: Четверг, 19 Декабря 2013, 18:48 | Сообщение # 5
частый гость
Сейчас нет на сайте
Да в том то и дело что с английским шляпа, я перевожу через гугл-переводчик и кое-как разбираюсь. А в основном вся информация по студии именно на оф. форуме.
А collison groups!!!!! Ооо, это да. Я несколько недель парился, как сделать, чтобы тела соударялись как мне бы хотелось. В итоге бросил. А недавно совершенно СЛУЧАЙНО обнаружил, что оказывается надо это регулировать событии столкновения.
Плохо что нет документации нормально на русском.

Однако, мы отвлеклись. Хотелось бы услышать по поводу звука.
Raven84Дата: Воскресенье, 22 Декабря 2013, 13:38 | Сообщение # 6
старожил
Сейчас нет на сайте
AHTOXA82, Разобрались с проблемой?..Недавно пришлось тоже изменять громкость кодом.Как ни странно у меня все работает.Использовал такой код:
Код
audio_sound_gain(sound1, 0.7, 0);
if !audio_is_playing(sound1) {audio_play_sound(sound1,0,0)}

У меня появилось несколько вопросов:
-Чему у вас равна переменная gromkost? (она должна быть в пределах от 0 (тишина) до 1 (полная громкость))
-У вас скорее всего в коде проблема и звук проигрывается несколько раз.К примеру в коде:
Код
if y >300
{    
zvuk = audio_play_sound(zvuk_1, 1, 0);    
vspeed = -5    
}

Ошибка.Так нельзя использовать,иначе звук будет воспроизводиться постоянно,пока y>300!!!Это вызовет шум!

Добавлено (22.12.2013, 13:28)
---------------------------------------------
Т.е. постоянно он будет воспроизводиться не loop'ом (т.е. проиграл,потом с начала),а как бы постоянно с начала несколько раз!

Добавлено (22.12.2013, 13:30)
---------------------------------------------
Либо используйте такой код,как у меня:
Код
audio_sound_gain(sound1, 0.7, 0);    
if !audio_is_playing(sound1) {audio_play_sound(sound1,0,0)}

Т.е. если в данный момент звук sound1 не воспроизводится,то воспроизвести его.В этом случае при вашем коде звук будет проигрываться постоянно пока y>300,но loop'ом.Вам скорее всего потребуется ввести переменную,отвечающую за то,чтобы звук воспроизвелся всего один раз.

Добавлено (22.12.2013, 13:32)
---------------------------------------------
Цитата
на один звуковой файл повешены два звука с разными именами, то можно регулировать громкость каждого из них независимо друг от друга.

Кстати,я не совсем понял как это?! surprised

Добавлено (22.12.2013, 13:33)
---------------------------------------------
Как это на один файл повешаны два звука?! surprised ...Даже если это и так,то Гамак меняет громкость именно файла! В идеале один файл-один звук!!! Ну точнее не громкость файла,а громкость "копии файла" можно сказать.Но кажется я тебя немного понял,что ты имеешь ввиду.Если это то что я думаю,то можно...Запутанно написал все как-то!

Добавлено (22.12.2013, 13:36)
---------------------------------------------
Цитата
В справке ГМС написано, что функцией audio_sound_gain можно регулировать громкость не только звукового файла, но и конкретного звука.

Я этого в справке не нашел.У меня английский не отл.,но и не хромает.Но там нет такого!

Добавлено (22.12.2013, 13:38)
---------------------------------------------
А вообще объясните,чего вы хотите добиться и я помогу вам с кодом.Вы хотите раз,к примеру,изменить громкость в начале игры и чтобы она держалась постоянно?Или же вы хотите в процессе игры постоянно плавно менять громкость:то уменьшать то увеличивать?


Super Knight Story (в разработке)
Idolzzz - игра доступна в Steam и Play Market
Oliver's Adventures in the Fairyland


Сообщение отредактировал Raven84 - Воскресенье, 22 Декабря 2013, 17:37
AHTOXA82Дата: Вторник, 24 Декабря 2013, 04:42 | Сообщение # 7
частый гость
Сейчас нет на сайте
Цитата Raven84 ()
Разобрались с проблемой?.

Нет, к сожалению. Вы скачали файл с моим примером?

Цитата Raven84 ()
Как ни странно у меня все работает.

У меня тоже такой как у вас код работает. (Т.е. когда мы меняем громкость в ФАЙЛА, а не у ЗВУКА). Это мой первый пример.

Цитата Raven84 ()
-Чему у вас равна переменная gromkost?

Изначально gromkost равна 0. Ее можно менять потом кнопками мыши. По идее, если громкость равна нулю, файл не должен быть слышен. Но вот проблема в том, что если функцию audio_sound_gain поставить ПОСЛЕ того как мы задаем проигрывание файла, то в одном первом шаге появляется артефакт. Т.е. звук один кадр слышен, несмотря на то, что громкость мы убрали до нуля. Попробуйте в своей игре так сделать и посмотрите что получится. Меня здесь интересует ПРИЧИНА, по которой так происходит, просто чтобы понимать, как работают функции в ГМС.

Цитата Raven84 ()
Так нельзя использовать,иначе звук будет воспроизводиться постоянно,пока y>300!!!

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

Цитата Raven84 ()
А вообще объясните,чего вы хотите добиться и я помогу вам с кодом.Вы хотите раз,к примеру,изменить громкость в начале игры и чтобы она держалась постоянно?Или же вы хотите в процессе игры постоянно плавно менять громкость:то уменьшать то увеличивать?

С этого надо было начинать. Все дело именно в том, что я пытаюсь изменить громкость конкретного ЗВУКА, а не звукового ФАЙЛА. Вот цитата из справки:

This function will affect all instances of the sound that are playing currently in the room if the index is a sound resource, and the final volume will be the volume at which all further instances of the sound will be played. However if you have used the index returned from a function like audio_play_sound it will only affect that one instance of the sound.

Вот гугловский перевод:

Эта функция будет влиять на все экземпляры звука, воспроизводимого в данный момент в комнате, если индекс звук ресурс, и конечный объем будет объем, при котором все дальнейшие случаи звук будет воспроизводиться. Однако, если вы использовали индекс вернулся из функции, как audio_play_sound он будет влиять только, что один экземпляр звука.

Иными словами, здесь говориться что можно менять громкость не только всех экземпляров звука (меняя громкость ФАЙЛА, с которого звуки считываются), но и громкость конкретного экземпляра звука (для этого вместо sound1 в вашем примере, нужно поставить имя переменой, которая возращается при использовании функции audio_play_sound,). В большинстве случаев, на каждый звуковой файл вешается только один, соответствующий звук. Но мне нужно, чтобы на один файл было повешено два звука и работали они независимо друг от друга. В моем примере в пунктах 3 и 4 я как раз этим и занимаюсь (меняю громкость ЗВУКА, а не ФАЙЛА). И звук этот меняется !!!! Но все же код работает неправильно. Скачайте файл и все станет ясно, на пальцах тяжело объяснять.


Сообщение отредактировал AHTOXA82 - Вторник, 24 Декабря 2013, 04:46
Raven84Дата: Вторник, 24 Декабря 2013, 06:21 | Сообщение # 8
старожил
Сейчас нет на сайте
Ок.Сейчас скачаю файл.До этого ссылку просто не заметил.Попробую разобраться. smile

Добавлено (24.12.2013, 05:13)
---------------------------------------------
AHTOXA82, Не совсем понял про какие вы пшики говорите,но во втором коде у вас ошибка:
Код
audio_sound_gain(zvuk, gromkost, 0);// задаем громкость ЗВУКУ zvuk

audio_sound_gain(zvuk_1,gromkost,0);

Добавлено (24.12.2013, 05:18)
---------------------------------------------
Аааа.Понял почему тут так...Сейчас посмотрю дальше.

Добавлено (24.12.2013, 06:07)
---------------------------------------------
Короче такое присвоение не работает: zvuk = audio_play_sound(zvuk_1,1,0).
Кстати если в Create при вашем коде zvuk сделать равным 0,а не единице,то вообще ничего не играет при любой громкости!
При запуске в тестовом режиме переменная zvuk выдает вообще какие-то непонятные числа,которые плюсуются при каждом отскоке.
Такое присваивание работает прекрасно: zvuk=zvuk_1 ,но как его применить,да никак по моему!
Поиск на официальных форумах пока ничего не дал.Нашел то,что они немного исправили раздел в документации по audio_sound_gain,но там полная бурда!!!

Добавлено (24.12.2013, 06:09)
---------------------------------------------
Сейчас немного некогда,но меня заинтересовала ваша проблема.Накопал кое-что по вашей проблеме,но на английском.Сейчас некогда,но позже обязательно посмотрю.
Нашел перечень проблем,которые были исправлены в новой версии GMS с обновлениями (но как обновлять,я не понял),среди них есть проблема по audio_sound_gain.Вот ссылка,если интересно:
http://bugs.yoyogames.com/view.php?id=11143
Позже посмотрю.

Добавлено (24.12.2013, 06:21)
---------------------------------------------
Судя по этому: http://www.yoyogames.com/downloads/gm-studio/release-notes-studio.html
Этот баг (а это баг!) был исправлен еще в версии 1.1.1044.Но у меня версия 1.2.1224 !!! А он там как я понимаю до сих пор присутствует.Ладно.Уже пора бежать.Позже еще покапаю.


Super Knight Story (в разработке)
Idolzzz - игра доступна в Steam и Play Market
Oliver's Adventures in the Fairyland


Сообщение отредактировал Raven84 - Вторник, 24 Декабря 2013, 06:21
AHTOXA82Дата: Вторник, 24 Декабря 2013, 19:08 | Сообщение # 9
частый гость
Сейчас нет на сайте
Цитата Raven84 ()
Нашел перечень проблем,которые были исправлены в новой версии GMS с обновлениями (но как обновлять,я не понял),среди них есть проблема по audio_sound_gain.Вот ссылка,если интересно:
http://bugs.yoyogames.com/view.php?id=11143

Да, посмотрел я ошибку, именно то что и у нас. Суть в том, что при выключении громкости звук еще длится в течении двух шагов, он не отключается сразу. Из-за этого происходят "пшики". Только вот версия гамака 1.2 1224, а проблема осталась.
В общем, пока они не справять я вижу только один выход из данной ситуации - закинуть в ресурсы два одинаковый звуковых файла, задать им разные имена и привязать к каждому отдельному звуку отдельный файл. Из-за этого увеличится размер игры, а что делать.


Сообщение отредактировал AHTOXA82 - Вторник, 24 Декабря 2013, 19:11
Raven84Дата: Среда, 25 Декабря 2013, 02:54 | Сообщение # 10
старожил
Сейчас нет на сайте
AHTOXA82, Наверное это пока единственный выход.Да я бы на твоем месте уже давно так поступил и не заморачивался! biggrin Это не сильно увеличит объем игры и уменьшит производительность. smile

Super Knight Story (в разработке)
Idolzzz - игра доступна в Steam и Play Market
Oliver's Adventures in the Fairyland
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг