Flycan 飛肯設計學苑:教學網站

ActionScript 3.0 程式設計入門班 Dreamweaver & CSS 網頁版型設計班 ActionScript 3.0 陣列迴圈特訓班 ActionScript 3.0  PV3D 進階整合應用班 CSS語法 div版面設計專修班 JavaScript & CSS 程式設計入門班

【Flash ActionScript 教學】精華區

【教學】 FlashPlayer 10.1 的新功能:麥克風錄音



FlashPlayer 10.1 的新功能:麥克風錄音
飛肯老師
註冊日期:
2008/3/20 12:21
留言: 498
離線
來介紹一下FP10.1的新功能:麥克風錄音

以前在FP10時,麥克風錄音功能需要透過FMS之類的主機, 才能錄音

現在不需要了喔,單 swf即可

再透過adobe所提供的 WAVWriter 類別, 即可把聲音資訊存成.wav格式。

1.先安裝 FlashPlayer10.1

http://labs.adobe.com/downloads/flashplayer10.html

2. 準備一個麥克風(不然到這就結束了)。

3.了解一下原理:

FP10.1, Microphone類別一樣可以偵聽 SampleDataEvent.SAMPLE_DATA 事件

然後透過另一個新的ByteArray物件, 把SampleData裡的ByteArray資訊寫入。

要預聽的話,只要new一個Sound物件, 同時也偵聽SampleDataEvent

把剛剛錄好的ByteArray讀入即可

要成.wav的話

也只需透過 WAVWriter物件, 將錄好的ByteArray編碼成 WAV 格式

透過FileReference物件.save,把檔案存出來。


swf 預覽 http://milkmidi.googlepages.com/2010_02_14_MicrophoneDemo.swf

fla 原始檔下載 http://milkmidi.googlepages.com/2010_02_14_MicrophoneDemo.zip


程式碼


/**
* @author milkmidi
* @see http://milkmidi.blogspot
* @version 1.0.1
* @date created 2010/02/12/
*/
package  {  
import com.adobe.audio.format.WAVWriter;
import com.bit101.components.Label;
import com.bit101.components.PushButton;
import flash.display.*;
import flash.events.*;
import flash.media.Microphone;
import flash.media.Sound;
import flash.net.FileReference;
import flash.utils.ByteArray;
import flash.utils.Timer;
import milkmidi.display.MilkmidiCopyrightClip;
import mx.binding.utils.BindingUtils;
[
SWF(width = "300", height = "300", frameRate = "30", backgroundColor = "#ffffff")]
public class MicrophoneRecordExample extends Sprite {  
  [
Bindable]
  
public var isRecording  :Boolean = false;
  
  
private var _microphone  :Microphone;
  
private var _label   :Label;  
  
private var _recordByte  :ByteArray;
  
private var _timer   :Timer = new Timer(1000, 20);  
  
private var _startRecBtn :MyButton;
  
private var _stopRecBtn  :MyButton;
  
private var _playRecBtn  :MyButton;
  
private var _saveBtn  :MyButton;
  
private var _container  :Sprite = new Sprite();
  
public function MicrophoneRecordExample()  {
   
   
   new
MilkmidiCopyrightClip(true, this, false).onEffectComplete = init;
   
   
   
   
stage.scaleMode = StageScaleMode.NO_SCALE;
   
stage.align = StageAlign.TOP_LEFT;    
  }  
  
private function init():void {
   
_label = new Label(_container, 0, 0);
   
   
_microphone = Microphone.getMicrophone();
   if (
_microphone==null) {
    
_label.text = "microphone is null";
    return;
   }
   
   
_timer.addEventListener(TimerEvent.TIMER, function (e:TimerEvent):void {
    
_label.text = "second:" + _timer.currentCount;
   });
   
_timer.addEventListener(TimerEvent.TIMER_COMPLETE, _stopRecordHandler);
   
            
_microphone.rate = 44;
   
           
   
createChildren();
   
   
_label.text = "microphone is ready";
   
BindingUtils.bindSetter( _isRecordingChange, this, "isRecording" );
  }
  
  
private function _isRecordingChange(pIsRecording:Boolean):void {
   
_stopRecBtn.enabled = isRecording;
   
_startRecBtn.enabled = !isRecording;   
   
_saveBtn.enabled = !isRecording;
   
_playRecBtn.enabled = !isRecording;
  }
  
  
private function createChildren():void {
   
_container.y = 50;
   
addChild(_container);
   
_startRecBtn = new MyButton(_container, 0, 20, "START REC", _startRecHandler);
   
_stopRecBtn = new MyButton(_container, 0, 40, "STOP REC", _stopRecordHandler,false);   
   
_playRecBtn = new MyButton(_container, 0, 60, "PLAY REC", _playRecordHandler,false);   
   
_saveBtn = new MyButton(_container, 0, 80, "SAVE", _saveWavHandler,false);
  }
  
  
private function _playRecordHandler(e:MouseEvent):void{
   
_recordByte.position = 0;
            var
soundOutput:Sound = new Sound();
            
soundOutput.addEventListener(SampleDataEvent.SAMPLE_DATA, _playSoundSampleDataHandler);
            
soundOutput.play();     
  }
  
private function _playSoundSampleDataHandler(e:SampleDataEvent) : void    {            
            if (!
_recordByte.bytesAvailable > 0)   {
                return;
            }
            var
i:int = 0;
   var
_length:Number;
            while (
i < 8192)       {                
                
_length = 0;
                if (
_recordByte.bytesAvailable > 0)    {
                    
_length = _recordByte.readFloat();
                }
                
e.data.writeFloat(_length);
                
e.data.writeFloat(_length);
                
i++;
            }            
        }    
  
  
private function _startRecHandler(e:MouseEvent):void {   
   
isRecording = true;
   
_recordByte = new ByteArray();
            
_microphone.addEventListener(SampleDataEvent.SAMPLE_DATA, _microphoneSampleDataHandler);
   
_timer.reset();
            
_timer.start();  
  }
  
public function _stopRecordHandler(e:Event = null) : void     {
   
_label.text = "STOP REC";
   
_timer.stop();
            
isRecording = false;
            
_microphone.removeEventListener(SampleDataEvent.SAMPLE_DATA, _microphoneSampleDataHandler);               
        }    
  
  
private function _microphoneSampleDataHandler(e:SampleDataEvent):void {
   
_recordByte.writeBytes(e.data);   
  }
  
  
private function _saveWavHandler(e:Event = null) : void    {
            var
_file  :FileReference = new FileReference();
            var
_wavWriter :WAVWriter = new WAVWriter();
            
_recordByte.position = 0;         
            var
_resultSamples:ByteArray = new ByteArray();
   
_wavWriter.processSamples(_resultSamples,_recordByte, _wavWriter.samplingRate, 1);               
            
_file.save(_resultSamples, "FP10MicphoneRecord.wav");                        
        }    
}
}
import com.bit101.components.PushButton
import flash
.display.DisplayObjectContainer;
class
MyButton extends PushButton {
private var _enabled:Boolean = true;
public function MyButton(pParent:DisplayObjectContainer,pX:int , pY:int , pLabel:String , pHandler:Function,pEnabled:Boolean = true):void {
  
super(pParent, pX, pY, pLabel, pHandler);
  
mouseChildren = false;
  
enabled = pEnabled;
}

public function get enabled():Boolean { return _enabled; }
public function set enabled(value:Boolean):void {
  
_enabled = value;
  
mouseEnabled = _enabled;
  
alpha = _enabled ? 1 : .4;
}

}

2/25 1:29
 


回覆: FlashPlayer 10.1 的新功能:麥克風錄音
會員一級
註冊日期:
6/28 21:42
留言: 1
離線
綠奶茶:

我剛接觸flash不久,

不好意思,我想問個問題

我能夠只用一個fla的檔案寫出像綠奶茶老師這樣的錄音程式嗎? 要怎麼下手改呢?

因為我不太懂package在flash的概念是什麼 ^^"

另外,如果我想要單純只錄10秒呢?

希望能夠得到回應囉 ,謝謝

小E

6/28 21:46
 




正在瀏覽:   1 名訪客






[高級搜索]


 

課程首頁】【教學討論區首頁】【最新開課時間表】【企業包班】【範例教學&下載區】 【合作提案】【誠徵講師

【飛肯設計學苑】 台北市公園路 30-1 號 5 樓(位置圖) 聯絡電話:(02)2211-1414 信箱:flycan@flycan.com

http://www.flycan.com.tw/ 電腦教育教學中心

【 Flycan.com 】 Powered by XOOPS