Бесплатная альтернатива SoundBooth для добавления ключевых точек в MP3 для Flash? - PullRequest
1 голос
/ 17 ноября 2010

Есть ли бесплатная альтернатива Soundbooth для добавления ключевых точек к звуковым дорожкам для использования во Flash? Кажется, я помню, что вы можете добавить их в сам файл (я думаю). Я знаю, что вы можете сделать это с FLV.

Просто проверяю, прежде чем купить SB ..

Ответы [ 2 ]

1 голос
/ 01 декабря 2010

Там должно быть какое-то бесплатное приложение, но то, что вы пытаетесь сделать, несколько просто. Я просто собрал для тебя простое «приложение». Я говорю app, на самом деле это SWF, который позволяет делать следующее:

  1. Загрузка файла MP3
  2. Проведите сквозь него
  3. Добавить / удалить / перетащить маркеры
  4. Экспорт ключевых точек FLV для этих маркеров

Вот как вы его используете:

  • Двойной щелчок сцена для загрузки mp3
  • Нажмите и перетащите , чтобы пролистать - черная линия отобразится как «playhead»
  • ALT + Нажмите , чтобы добавить маркер, который можно затем перетащить вокруг
  • Shift + клик , чтобы удалить маркер
  • Shift + двойной щелчок , чтобы получить метки в вашем буфере обмена. Звук перестанет воспроизводиться в качестве подтверждения.

Вы можете изменить размер swf для увеличения области очистки.

Это самый простой подход, который я мог бы использовать прямо сейчас, не очень причудливый, не очень чистый, но это должно сделать работу. Кроме того, вы можете расширить это, как вам нравится, настроить xml / output / etc.

Все, что вам нужно сделать, это захватить Библиотека гибких фабрик audiofx Library , который я использую для загрузки MP3 из FileReference и компилирования кода ниже:

package {
    import org.audiofx.mp3.MP3FileReferenceLoader;
    import org.audiofx.mp3.MP3SoundEvent;

    import flash.display.Sprite;
    import flash.display.StageAlign;
    import flash.display.StageScaleMode;
    import flash.events.Event;
    import flash.events.MouseEvent;
    import flash.geom.Rectangle;
    import flash.media.Sound;
    import flash.media.SoundChannel;
    import flash.net.FileFilter;
    import flash.net.FileReference;
    import flash.system.System;
    /**
     * @author George Profenza
     */
    public class MiniMark extends Sprite{

        private var w:Number,h:Number,pos:Number;
        private var pressed:Boolean = false;
        private var file:FileReference;
        private var formats:FileFilter;
        private var sound:Sound;
        private var channel:SoundChannel;
        private var dragRect:Rectangle;
        private var markers:Vector.<Sprite>;

        public function MiniMark(){
            init();
        }   
        private function init():void {
            stage.align = StageAlign.TOP_LEFT;
            stage.scaleMode = StageScaleMode.NO_SCALE;
            stage.doubleClickEnabled = true;
            w = stage.stageWidth;
            h = stage.stageHeight;
            dragRect = new Rectangle(0, 0, w, 0);
            markers = new Vector.<Sprite>();

            file = new FileReference();
            file.addEventListener(Event.SELECT, fileSelected);
            formats = new FileFilter("MP3s (*.mp3)","*.mp3"); 

            sound = new Sound();

            stage.addEventListener(MouseEvent.MOUSE_DOWN, onPress);
            stage.addEventListener(MouseEvent.MOUSE_UP, onRelease);
            stage.addEventListener(MouseEvent.DOUBLE_CLICK, selectFile);
            stage.addEventListener(Event.RESIZE, onResize);
            this.addEventListener(Event.ENTER_FRAME, update);
        }

        private function onResize(event : Event) : void {
            w = stage.stageWidth;
            h = stage.stageHeight;
            dragRect.width = w;
        }

        private function selectFile(event : MouseEvent) : void {
            if(event.shiftKey) exportCues();
            else             file.browse([formats]);
        }

        private function exportCues() : void {
            var values : Array = [];
            for (var i : int = 0 ; i < numChildren; i++) values[i] = markers[i].x;
            values.sort(Array.NUMERIC);
            var cues : XML = <FLVCoreCuePoints Version="1" />;
            for (i = 0 ; i < numChildren; i++) {
                cues.appendChild(<CuePoint><Time /><Type>event</Type><Name /></CuePoint>);
                cues.CuePoint[i].Name.appendChild("Marker"+(i+1));
                cues.CuePoint[i].Time.appendChild((values[i] / w) * sound.length);
            }
            trace(cues.toXMLString());
            System.setClipboard(cues.toXMLString());
            if(channel) channel.stop();
        }
        private function fileSelected(event : Event) : void {
            var mp3loader:MP3FileReferenceLoader = new MP3FileReferenceLoader();
                mp3loader.addEventListener(MP3SoundEvent.COMPLETE,soundReady);
                mp3loader.getSound(file);
        }

        private function soundReady(event : MP3SoundEvent) : void {
            sound = event.sound;
        }
        private function onPress(event : MouseEvent) : void {
            pressed = true;
            if (event.altKey && channel) addMarker();
        }

        private function onRelease(event : MouseEvent) : void {
            pressed = false;
            dropMarkers(event);
        }

        private function update(event : Event) : void {
            if (pressed){
                if (sound.length) {
                    if (channel) channel.stop();
                    channel = sound.play(sound.length * (mouseX/w));
                }
            }
            drawPlayhead();
        }
        private function drawPlayhead():void{
            graphics.clear();
            graphics.lineStyle(1);
            pos = mouseX;
            if (!pressed && channel) pos = (channel.position / sound.length) * w;  
            graphics.moveTo(pos, 0);
            graphics.lineTo(pos,h); 
        }

        private function addMarker():Sprite{
            var marker : Sprite = new Sprite();
            marker.graphics.beginFill(0x009900,.5);
            marker.graphics.drawRect(-1, 0, 2, h);
            marker.graphics.endFill();
            marker.x = mouseX;
            marker.buttonMode = true;
            marker.addEventListener(MouseEvent.MOUSE_DOWN, dragMarker);
            addChild(marker);
            markers.push(marker);
            return marker;
        }
        private function removeMarker(marker:Sprite):void{
            for (var i:int = 0 ; i < numChildren ; i++) {
                if (markers[i] == marker) {
                    markers.splice(i, 1);
                    removeChildAt(i);
                }
            }   
        }
        private function dragMarker(event : MouseEvent) : void {
            if(event.shiftKey) removeMarker(event.currentTarget as Sprite);
            else              event.currentTarget.startDrag(false, dragRect);
        }

        private function dropMarkers(event : MouseEvent) : void {
            for (var i : int = 0 ; i < numChildren; i++) markers[i].stopDrag();     
        }

    }
}

НТН

0 голосов
/ 30 ноября 2010

Вы можете встраивать ключевую точку только в файлы FLV, но не в mp3.

Я также заметил, что сама вспышка не может правильно прочитать эти пункты !!! Убедитесь, что вы протестировали ее перед покупкой

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...