萬盛學電腦網

 萬盛學電腦網 >> 圖文處理 >> Flash教程 >> flash中聲音控制實現代碼

flash中聲音控制實現代碼

   簡單播放音樂

  1. 首先打開新的Flash文件, 把聲音導入庫中 (還摸不清介面的朋友就按ctrl+r)

  2. 導入之後到庫中定義聲音的ID, 如圖:

  *** 這裡的ID和場景上的實體名是不一樣的 ***

  3. 接下來就在第一幀編寫代碼, 如下

  mySound = new Sound(); //定義聲音類

  mySound.attachSound("tomato"); //提取庫中我們所設定的ID

  mySound.start(); //開始播放聲音

  4. 測試結果..

  音樂的開始, 停止和循環

  mySound.start([Secondsoffset], loop);

  start當中的兩個參數分別為Secondsoffset, Seconds就是秒數而offset就是抵消或取消的意思...所以簡單的說就是取消開始播放,以秒數來計算... 沒有定義的話就是0, 另外一個loop就是循環了...

  mySound.start(5, 99);

  這個意思就是音樂從第5秒開始播放, 並循環99次, 這裡提供了個例子為mySound.start(0,99);

  點擊浏覽該文件

  mySound.stop();

  mySound.stop("tomato"); //如果new Sound沒有定義的話就這樣使用, 不然多個聲音會全部停止

  這個很簡單不用解釋了吧...就是停止音樂

  我們看到某些網站所使用的一個按鈕控制播放和停止的效果就是使用這些就可以達成了, 如:

  mySound = new Sound();

  mySound.attachSound("tomato");

  mySound.start(0,99); //音樂開始播放並循環99次

  var music = true; //定義一個變量記錄目前音樂是否是在播放, 因為音樂已經播放所以設定為true

  btn.onRelease = function() {

  if(music) { //當變量為true時就表示音樂是在播放

  mySound.stop(); //使用stop設定音樂停止

  music = false; //變量記錄false為音樂停止

  } else { //以下的和以上相反

  mySound.start(0,99);

  music = play;

  }

  }

  setPan 和 setVolume

  mySound.setPan(pan);

  pan的值是介於 -100 到 100, 用意在於設定喇叭的平衡... -100為只能左邊的喇叭聽到聲音, 100為右邊的, 而0就是平衡點, 兩個喇叭都能聽到聲音

  例如:

  mySound = new Sound();

  mySound.attachSound("tomato");

  mySound.start(0, 10);

  var speaker = -100; //變量設定為-100, 即是從左邊喇叭開始

  mySound.setPan(speaker); //設定喇叭平衡

  function pan() { //設定函數並通過setInterval每秒調整平衡

  speaker += 20; //每秒平衡偏移20

  mySound.setPan(speaker); //設定喇叭的平衡

  if(speaker > 100) { //當音樂完全偏移到右邊喇叭播放的時候就停止

  mySound.stop();

  clearInterval(p);

  }

  }

  var p = setInterval(pan, 1000); //開始每秒執行喇叭平衡

  mySound.setVolume(volume);

  volume為0 - 100, 0為靜音, 100為最大

  mySound = new Sound();

  mySound.attachSound("tomato");

  mySound.start(0, 99);

  var top = key.vol._y; //定義拖動按鈕的最高點

  var left = right = key.vol._x; //定義拖動左右的范圍

  var bottom = key.vol._y+100; //定義拖動按鈕的最低點

  key.vol.onPress = function() {

  this.startDrag(true,left,top,right,bottom); //按鈕按下拖動范圍

  }

  onEnterFrame = function() {

  v = int(key.textInput.value.text); //取得輸入框內的值

  mySound.setVolume(v); //設定音量

  }

  Position, Duration 和 暫停

  mySound.position();

  唯讀指令, 主要是取得目前播放音樂的毫秒數(1秒 = 1000毫秒), 在音樂播放之後才能夠取得, 在一開始start()之後使用是無法取得的

  mySound.duration();

  唯讀指令, 主要是取得音樂的總毫秒數 要使音樂暫停, 播放的時候再繼續之前暫停的位置開始播放, 我們可以先取得按鈕按下暫停時的position以取得位置, 然後再次按下播放的時候就使用start()當中的SecondsOffset使音樂從暫停的部分開始播放, 如:

  mySound = new Sound();

  mySound.attachSound("tomato");

  var SecondsOffset = 0; //設定SecondsOffset為0

  p1.onRelease = function() {

  mySound.start(SecondsOffset, 0); //播放按鈕按下開始從0offset播放

  }

  p2.onRelease = function() {

  SecondsOffset = mySound.position/1000; //暫停按鈕按下時記錄目前位置並換成秒數

  mySound.stop(); //音樂暫停

  }

  onEnterFrame = function() { //這裡是循環部分

  if(mySound.position == mySound.duration) { //如果播放的毫秒數等於音樂總毫秒數

  mySound.start(0, 99); //開始循環播放99次

  }

  }

  只要會了以上的方法, 倒退播放和快速播放就非常簡單了, 如下:

  1. 場景上建立兩個按鈕, 分別為(倒退 rev 和 快速播放 ff)

  2. 在第一幀使用以下代碼 :

  mySound = new Sound();

  mySound.attachSound("tomato");

  mySound.start();

  var SecondsOffset = 0;

  var reverse = foward = false; //設定倒退和前進變量為false

  onEnterFrame = function () {

  if (reverse && mySound.position > 0) { //當倒退按下且音樂秒數大於0

  mySound.stop(); //音樂停止

  SecondsOffset -= .5; //offset倒退0.5秒

  mySound.start(SecondsOffset, 0); //音樂從倒退的0.5秒開始播放

  }

  if (foward && mySound.position <= mySound.duration) { //當快速播放按下且音樂不為結束

  mySound.stop();

  SecondsOffset += .5; //offset前進0.5秒

  mySound.start(SecondsOffset, 0);

  }

  rev.onPress = function() { //當倒退按下並取得position

  SecondsOffset = mySound.position/1000;

  reverse = true; //reverse變量為true

  };

  rev.onRelease = function() { //當倒退放開就設定reverse變量為false

  reverse = false;

  }

  ff.onPress = function() { //同上

  SecondsOffset = mySound.position/1000;

  foward = true;

  };

  ff.onRelease = function() {

  foward = false;

  }

  };

  至於loadSound部分就寫一下進度條的寫法

  1. 在場景上建立一個為100%長度的MC(loadBar)

  2. 在第一幀使用以下代碼 :

  onLoad = function () {

  mySound = new Sound();

  mySound.loadSound("tomato.mp3"); //載入同一目錄中的MP3

  var percent = 0; //%一開始為0

  loadBar._xscale = percent; //進度條的寬度比例為percent

  };

  onEnterFrame = function () {

  mySoundBytesTotal = mySound.getBytesTotal(); //取得文件的size

  mySoundBytesLoaded = mySound.getBytesLoaded(); //取得目前文件所載入的size

  percent = int(mySoundBytesLoaded/mySoundBytesTotal*100); //計算出文件所載入的比例

  loadBar._xscale = percent; //設定進度條寬度比例

  if (percent>=100) { //當完全載入之後

  delete onEnterFrame; //刪除循環

  mySound.start(); //音樂開始播放

  }

  };

  Q1. 為何loadMovie當中的swf音樂無法播放?

  ans: 只要在swf當中把 mySound = new Sound() 換成 mySound = new Sound(this) 就可以了

  Q2. 為何不能同時設定兩首音樂不同的音量? ans: 一般你們會這樣使用AS

  mySound1 = new Sound();

  mySound1.attachSound("tomato1");

  mySound1.start();

  mySound2 = new Sound();

  mySound2.attachSound("tomato2");

  mySound2.setVolume(50); //另外一首音量為50

  mySound2.start();

  但這樣是錯誤的, 正確方法是分別把音樂分開在不同的層當中 :

  mySound1 = new Sound(this);

  mySound1.attachSound("tomato1");

  mySound1.start();

  createEmptyMovieClip("mc", 0);

  mySound2 = new Sound(mc);

  mySound2.attachSound("tomato2");

  mySound2.setVolume(50);

  mySound2.start();

copyright © 萬盛學電腦網 all rights reserved