随笔 - 1330  文章 - 1  评论 - 378  阅读 - 482万 

本例为Flash AS3.0实例教程,在教程中我们将学习运用SoundMixer.computeSpectrum() 方法来构建简单的声音可视化程序(即波形图),希望能给朋友们带来帮助~~

AS3.0构建简单的声音可视化程序(波型图):

 

使用 SoundMixer.computeSpectrum() 方法来显示声音波形图:

 

复制代码
代码
import flash.display.Graphics; 
import flash.events.Event; 
import flash.media.Sound; 
import flash.media.SoundChannel; 
import flash.media.SoundMixer; 
import flash.net.URLRequest; 

const PLOT_HEIGHT:
int = 200
const CHANNEL_LENGTH:
int = 256

var snd:Sound = new Sound(); 
var req:URLRequest = new URLRequest("月亮之上.mp3"); //配置声音源文件地址(此为本地,可配置远程) 
snd.load(req); 

var channel:SoundChannel; 
channel 
= snd.play(); 
addEventListener(Event.ENTER_FRAME, onEnterFrame); 
snd.addEventListener(Event.SOUND_COMPLETE, onPlaybackComplete); 

var bytes:ByteArray = new ByteArray(); 

function onEnterFrame(event:Event):void 

    SoundMixer.computeSpectrum(bytes, 
false0); 
     
    
var g:Graphics = this.graphics; 
     
    g.clear(); 
    g.lineStyle(
00x6600CC); 
    g.beginFill(
0x6600CC); 
    g.moveTo(
0, PLOT_HEIGHT); 
     
    
var n:Number = 0
         
    
// left channel 
    for (var i:int = 0; i < CHANNEL_LENGTH; i++)  
    { 
        n 
= (bytes.readFloat() * PLOT_HEIGHT); 
        g.lineTo(i 
* 2, PLOT_HEIGHT - n); 
    } 
    g.lineTo(CHANNEL_LENGTH 
* 2, PLOT_HEIGHT); 
    g.endFill(); 
     
    
// right channel 
    g.lineStyle(00xCC0066); 
    g.beginFill(
0xCC00660.5); 
    g.moveTo(CHANNEL_LENGTH 
* 2, PLOT_HEIGHT); 
     
    
for (i = CHANNEL_LENGTH; i > 0; i--)  
    { 
        n 
= (bytes.readFloat() * PLOT_HEIGHT); 
        g.lineTo(i 
* 2, PLOT_HEIGHT - n); 
    } 
    g.lineTo(
0, PLOT_HEIGHT); 
    g.endFill(); 


function onPlaybackComplete(event:Event) 

    removeEventListener(Event.ENTER_FRAME, onEnterFrame); 
}
复制代码

 

先加载并播放一个声音文件,然后在播放声音的同时侦听将触发 onEnterFrame() 方法的 Event.ENTER_FRAME 事件。onEnterFrame() 方法先调用 SoundMixer.computeSpectrum() 方法,后者将声音波形数据存储在 bytes ByteArray 对象中。

声音波形是使用矢量绘图 API 绘制的。 for 循环将循环访问第一批 256 个数据值(表示左立体声声道),然后使用 Graphics.lineTo() 方法绘制一条从每个点到下一个点的直线。第二个 for 循环将循环访问下一批 256 个值,此时按相反的顺序(从右到左)对它们进行绘制。生成的波形图可能会产生有趣的镜像图像效果。

 

 

 

转自:http://www.68design.net/Web-Guide/Flash/49942-1.html

posted on   钱途无梁  阅读(686)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
历史上的今天:
2009-04-16 C# 生成js文件
2009-04-16 onmousemove与onmouseover区别
点击右上角即可分享
微信分享提示