2010-11-17 70 views
1

Soundbooth是否有一个免费的替代品,用于在音轨中添加提示点以便在Flash中使用?我似乎记得你可以将它们添加到文件本身(我认为)。我知道你可以用FLV做到这一点。SoundBooth的免费替代品,用于为Flash添加提示点?

只是检查我买SB之前..

+0

虽然它看起来像superuser.com问题。 ..如果您打算为标记购买SB,也许您可​​以重新考虑编写具有该功能的非常基本的应用程序......即使是在闪存中。 – 2010-11-30 17:37:48

回答

1

必须有一些免费的应用程序在那里,但你正在试图做的是什么。有点简单我刚刚刮起一起简单的“应用”为你我说的应用程序,它实际上是一个swf允许执行以下操作:通过它

  • 添加

    1. 加载的MP3文件
    2. 磨砂/删除/拖动标记
    3. 那些标记出口FLV提示点

    这里是你如何使用它:

    • 双击舞台上加载一个mp3
    • 单击并拖动擦洗过 - 一个黑线将显示为'playhead'
    • ALT +点击添加一个标记,然后您可以拖动
    • Shift键+单击删除标记
    • Shift +双击在剪贴板得到提示点。声音将作为确认停止播放。

    您可以调整swf的大小以便擦洗更​​大的区域。

    这是我现在可以使用的最基本的方法,不是很花哨,不是很干净,但它应该完成这项工作。另外,你可以随意扩展它,调整xml/output/etc。

    所有你需要做的就是抢FlexibleFactory'saudiofx Library, 这是我用来加载从一个FileReference的MP3和波纹管编译代码:

    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();  
         } 
    
        } 
    } 
    

    HTH

  • +0

    这真是太好了,但我们已经购买了Soundbooth!尽管如此,我一定会尝试你的应用程序,非常感谢。 – hamishtaplin 2010-12-01 09:07:41

    0

    U可以只使嵌入提示点到FLV文件没有MP3。

    香港专业教育学院也注意到,闪光灯本身可以“T正确读出这些点!!!确保ü在购买前测试它

    +0

    在Soundbooth里面,你可以添加标记,你以后可以导出为XML(FLV提示点兼容),这就是@dr_tchock在 – 2010-11-30 17:34:39

    +0

    之后是的。我有很大的问题让SB真的在FLV中正确保存标记。我可以使用XML输出,但我不想为音频中的每个调整都重新输出它,因此嵌入它们是一个更清晰的选项。 – hamishtaplin 2010-12-01 09:08:39