Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Проблема при поочередном воспроизведении звука (http://www.flasher.ru/forum/showthread.php?t=210553)

Фомич 28.03.2015 21:38

Проблема при поочередном воспроизведении звука
 
Приветствую! При попытке вставить выстрел в игру столкнулся с проблемой, когда громкость последовательно воспроизводимых звуков нарастает( хотя громкость выставлена 1). Размер звукового файла 2,37 КБ

Примерно все выглядит так:

Код AS3:

import flash.media.Sound;
import flash.media.SoundChannel;
import flash.media.SoundTransform;
 
class Fire {
var MP3:Sound = new GameMP3();// GameMP3 - загруженный в библиотеку звук одиночного выстрела
var сhannel:SoundChannel = new SoundChannel();
var volume:Number = 0.0;
var fireOn:Boolean = false;
 
function Fire () {
 
  сhannel = MP3.play();//далее будет проверка на проигрывание, поэтому нужен первый запущенный трек
  сhannel.soundTransform = new SoundTransform(volume);
  volume = 0.0;//пока нет клика звук не слышен
 
  stage.addEventListener(Event.ENTER_FRAME, addSound);
  stage.addEventListener(MouseEvent.MOUSE_DOWN, mouseTrue);
  stage.addEventListener(MouseEvent.MOUSE_UP, mouseFalse);         
 
}//function Fire
 
 
function mouseTrue(e:MouseEvent):void {
 
  volume = 1;
  fireOn=true;
 
}//mouseTrue
 
function mouseFalse(e:MouseEvent):void {
 
  fireOn=false;
 
}//mouseFalse
 
function addSound(e:Event):void {
 
    if (fireOn) {
 
 
        trace(int(сhannel.position),int(MP3.length));// 156 182 - здесь  метод проверки их на равенство, которое почему то не совсем равенство при наибольших  положениях, поэтому взял первое число
 
        if ( int(сhannel.position) == 156 ) {//ждет окончания проигрывания и запускает новое, очередь из автомата, при значении больше 156 не работает
        сhannel.stop();// на всякий случай
        сhannel = MP3.play();
          }
 
 
}//addSound
 
 
}//class Fire


samana 28.03.2015 22:55

Немного мнения со стороны: логику можно сделать проще, ведь у метода play, есть параметр loops. То-есть вы можете обойтись без enterFrame. При нажатии мышки включайте звук с бесконечным числом повторений, а при отпускании мыши - выключайте звук.
Справка про метод play

Фомич 29.03.2015 08:40

Цитата:

Сообщение от samana (Сообщение 1180674)
Немного мнения со стороны: логику можно сделать проще, ведь у метода play, есть параметр loops. То-есть вы можете обойтись без enterFrame. При нажатии мышки включайте звук с бесконечным числом повторений, а при отпускании мыши - выключайте звук.
Справка про метод play

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

caseyryan 29.03.2015 09:17

Цитата:

ищу решение, при котором череда звуков воспроизводилась бы без прерывания последнего в произвольном месте
Собственно, решение то элементарное
SoundChannel#soundComplete
Ждем события, и уже после него прерываем звук

Фомич 29.03.2015 14:27

samana, caseyryan, спасибо!


Часовой пояс GMT +4, время: 02:22.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.