Предпочтенный метод для звука цикличного выполнения высвечивает as3

Я пошел бы с опросом.

Сетевые проблемы заставляют FileSystemWatcher быть ненадежными (перегружая ошибочное событие).

7
задан Jacob Poul Richardt 10 August 2009 в 09:35
поделиться

4 ответа

Самый надежный метод, если вы можете использовать Flash Player 10, - это использовать новое событие SampleDataEvent.SAMPLE_DATA.

В частности, вы сначала создаете экземпляр нужного звука, а затем используете новый метод извлечения для преобразования звука в необработанные данные PCM, закодированные в ByteArray. Затем вы можете создать новый объект Sound и настроить прослушивание его события SampleDataEvent.SAMPLE_DATA. Когда вызывается это событие, вы отправляете 2-8 КБ (меньшее количество снижает задержку, но увеличивает вероятность слышимых артефактов) данных из ByteArray. Вы просто убедитесь, что при выходе из конца ByteArray вы просто вернетесь в начало.

Этот метод гарантирует, что вы '

7
ответ дан 6 December 2019 в 11:51
поделиться

Вот как это сделал id, без заметной задержки. Главное приложение:

package {

import flash.display.MovieClip; 
import flash.events.*;
import flash.utils.*;

public class MainApp extends MovieClip {
  private var player:Player;
  ..........

  public function MainApp() {
      .......
      player = new Player();
      player.addEventListener(Player.EVENT_SOUND_COMPLETED, handleSoundCompleted);
      ......
  }

  private function handleSoundCompleted(event:Event):void {
      player.setPosition(0);
      player.play();
  }

  .................

Класс плеера:

package {

import flash.events.*;
import flash.media.*;
import flash.net.*;

public class Player extends EventDispatcher {

    private var sound:Sound;
    private var channel:SoundChannel;
    private var position:Number;

    static const SOUND_VOLUME:Number = 0.75;
    static const EVENT_SOUND_COMPLETED:String = "SOUND_COMPLETED";

    public function Player() {

        // init
        sound = new ThemeSong();
        position = 0;

        // listeners
        sound.addEventListener(IOErrorEvent.IO_ERROR, function(event:Event){trace(event)});

        trace("Player initialized...");
    }

    public function play():void {
        channel = sound.play(position);
        channel.soundTransform = new SoundTransform(SOUND_VOLUME);
        channel.addEventListener(Event.SOUND_COMPLETE, function(event:Event){dispatchEvent(new Event(EVENT_SOUND_COMPLETED));});
        trace("Player playing..");
    }

    public function pause():void {
        if (channel != null) {
            channel.stop();
            position = channel.position;
        }
        trace("Player paused..");
    }

    public function setPosition(pos:Number):void {
        position = pos;
    }

    public function getPosition():Number {
        if (channel == null) {
            return 0;
        } else {
            return channel.position;
        }
    }
}
}

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

1
ответ дан 6 December 2019 в 11:51
поделиться

Гэп-зацикливание mp3 не является тривиальным из-за того, как работает формат. Немного упростить; звук устанавливается на несколько кадров, это число не может быть выбрано произвольно, вместо этого требуется некоторая прокладка (с тишиной). Mp3 не имеет возможности сохранить количество добавленных отступов, поэтому эта информация теряется после кодирования файла.

Flash IDE обходит это, встраивая эти метаданные, и вы тоже можете. Вам просто нужно знать, сколько задержки добавляет кодировщик.

Андре Мишель объясняет это лучше, чем я могу в своем блоге.

5
ответ дан 6 December 2019 в 11:51
поделиться

По словам этого парня , вы должны импортировать музыкальный цикл как wav, а сама Flash IDE сжать в mp3. Использование Flash импортированных mp3-данных означает, что он не знает, как правильно их зациклить.

3
ответ дан 6 December 2019 в 11:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: