2013-08-23 4 views
0

Я создаю приложение flex для воспроизведения звука. Я использую FileReference для просмотра mp3-файла. Как я могу использовать этот объект FileReference для воспроизведения этого файла с использованием метода воспроизведения Sound Class. Или я могу загрузить данные из этого объекта FileReference в файл byteArray. Можно ли воспроизвести byteArray с помощью Sound Class? СпасибоКак использовать FileReference для воспроизведения звука?

ответ

0

Должно быть возможно. Сначала вы загружаете mp3 из FileReference, затем вы создаете new Sound(), затем вызываете loadCompressedDataFromByteArray(loadedBytes,loadedBytes.length), а затем воспроизводите его. Не забудьте перемотать ByteArray в исходную позицию, если это не сделано с помощью FileReference, так как эта функция использует текущую позицию как начало для файла.

The manual.

Update: Если вы используете Flash Player 10, этот метод недоступен. Для этого попробуйте создать URLRequest из FileReference.name, а затем загрузите звук с помощью этого кованого запроса.

var ur:URLRequest=new URLRequest(fileRef.name); 
var snd:Sound=new Sound(ur); 
snd.addEventListener(Event.COMPLETE,sndLoaded); 

Затем вы обрабатываете загруженный звук как готовый.

+0

Я не могу найти этот метод, когда пытаюсь вызвать методы класса звука. Что я делаю неправильно? –

+0

Я использую sdk 3.6. Является ли это причиной того, что я не могу использовать этот API-класс Sound Class? –

+0

Хм, он говорит, что он был введен в FP11 и AIR 3. – Vesper

1

Если вы используете FileReference для загрузки mp3-файла в звуковой объект, тогда он будет воспроизводиться неправильно, потому что данные сжаты (звук будет шумом).

Во всяком случае есть альтернативная библиотека кода, который также решает проблему ...: http://flexiblefactory.co.uk/flexible/?p=46

Внутри статьи вы также можете найти ссылку на этот почтовый файл:
http://www.flexiblefactory.co.uk/flexible/wp-content/uploads/mp3filereferenceloaderlib.zip

Я не 't использовать Flex, но для настройки в Flash CS я бы зашел в zip-файл и скопировал файлы папки org в папку моего проекта (как вложенную папку), а затем предоставил код ниже в .as-файле, а также FLA, который является этапом.

Вам также необходимо создать три спрайта или MovieCips для использования в качестве кнопок. Open (имя-экземпляра: btn_open)

  • Файл
  • Play (имя-экземпляра: btn_play) (имя-экземпляра: btn_stop)
  • Стоп

* AS3 CODE *

package 
{ 

import flash.display.MovieClip; 
import flash.events.MouseEvent; 
import flash.events.Event; 
import flash.events.IOErrorEvent; 
import flash.net.FileFilter; 
import flash.net.FileReference; 
import flash.net.URLLoader; 
import flash.net.URLRequest; 
import flash.net.URLLoaderDataFormat; 
import flash.utils.ByteArray; 
import flash.media.Sound; 
import flash.media.SoundChannel; 

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


public class MP3_fileRef_test extends MovieClip 

{ 
    private var loader:MP3FileReferenceLoader; 
    private var fileReference:FileReference; 
    public var _loadedsound:Sound = new Sound; 
    public var channel_obj:SoundChannel = new SoundChannel(); 
    public var mp3_isPlaying:Boolean; 


    public function MP3_fileRef_test() 
    { 
     mp3_isPlaying = false; 

     btn_open.buttonMode = true; 
     btn_open.addEventListener(MouseEvent.CLICK, mp3Open_handler); 

     btn_play.buttonMode = true; 
     btn_play.addEventListener(MouseEvent.CLICK, audio_play); 

     btn_stop.buttonMode = true; 
     btn_stop.addEventListener(MouseEvent.CLICK, audio_stop); 

     loader = new MP3FileReferenceLoader(); 
     loader.addEventListener(MP3SoundEvent.COMPLETE, mp3Loader_Complete); 

     fileReference=new FileReference(); 
     fileReference.addEventListener(Event.SELECT,fileReferenceSelectHandler); 
    } 

    //OPEN BROWSE WINDOW & TRIGGER EVENT FUNCTION fileReferenceSelectHandler 
    private function mp3Open_handler (ev:MouseEvent):void 
    { 
     fileReference.browse([new FileFilter("mp3 files","*.mp3")]); 
    } 

    private function fileReferenceSelectHandler(e:Event):void 
    { 
     loader.getSound(fileReference); 
    } 

    private function mp3Loader_Complete (loader_mp3Data:MP3SoundEvent):void 
    { 
     //CHECK IF THERE'S A PREVIOUSLY OPENED FILE PLAYING 
     //OTHERWISE WILL BE MULTIPLE SOUNDS PLAYING OVER EACH OTHER 
     if (mp3_isPlaying == true) 
     { 
      channel_obj.stop(); 
      mp3_isPlaying = false; 
     } 

     _loadedsound = new Sound; 
     _loadedsound.addEventListener(Event.COMPLETE, soundLoad_Complete); 

     //PUT (MP3SoundEvent) LOADER DATA INTO NEW _loadedsound SOUND OBJECT 
     _loadedsound = loader_mp3Data.sound; 

     //UNLOCK BELOW FOR AUTO-START WITHOUT PRESSING PLAY BUTTON 
     //channel_obj = _loadedsound.play(); //auto 
     //mp3_isPlaying = true; //auto 
    } 

    //WHEN SOUND IS LOADED AND READY FOR USE 
    function soundLoad_Complete(e:Event):void 
    { 
     //Do whatever else is needed on successful load 
     //eg: trace or update status text, make an MC visible etc 
    } 

    //PLAY AUDIO ON CLICK 
    function audio_play (e:MouseEvent):void 
    { 
     if (mp3_isPlaying == false) 
     { 
      channel_obj = _loadedsound.play(); 
      mp3_isPlaying = true; 
     } 
    } 

    //STOP AUDIO ON CLICK 
    function audio_stop (e:MouseEvent):void 
    { 
     if (mp3_isPlaying == true) 
     { 
      channel_obj.stop(); 
      mp3_isPlaying = false; 
     } 
    } 


}//END CLASS 

}//END PACKAGE 

Надеюсь, это поможет. Мир, я здесь ...

+1

Ссылки мертвы, но я нашел исходный код по следующей ссылке: https://code.google.com/p/in-spirit/source/browse/trunk/projects/FluidSolver3D/src/?r=91# SRC% 2Forg% 2Faudiofx% 2Fmp3 –

Смежные вопросы