
package {
import flash.media.Sound;
import flash.media.SoundChannel;
import flash.media.SoundLoaderContext;
import flash.media.SoundMixer;
public class MediaPlayerCore {
private var sound:Sound;
private var soundCh:SoundChannel;
private var soundCon:SoundLoaderContext;
private var position:Number;
private var isPlaying:Boolean;
private var isPause:Boolean;
private static var BUFFERTIME:Number = 10000;
public function MediaPlayerCore()
{
isPause = false;
isPlaying = false;
SoundMixer.bufferTime = BUFFERTIME;
}
//创建一个声音对象
//@param url 媒体地址
// @param playNow 是否马上播放,默认为真
public function createSound(url:String,playNow:Boolean = true):void
{
dispose();
sound = new Sound();
sound.load(new URLRequest(url));
sound.addEventListener(IOErrorEvent.IO_ERROR,errorHandler);
if(playNow)
play();
}
//播放
//@param offset 声音从哪开始
public function play(offset:Number = 0):void
{
if(isPause)
soundCh = sound.play(position);
else
soundCh = sound.play(offset);
isPlaying = true;
isPause = false;
}
//暂停
public function pause():void
{
if(isPlaying)
{
position = soundCh.position;
stop();
isPause = true;
}
}
//停止
public function stop():void
{
if(isPlaying)
{
soundCh.stop();
isPlaying = false;
}
}
//播放位置
public function get Position():Number
{
if(soundCh == null)
return 0;
return Math.round(soundCh.position);
}
//声音对象长度
public function get Length():Number
{
if(sound == null)
return 0;
return Math.round(sound.length*sound.bytesTotal/sound.bytesLoaded);
}
//声音对象总共字节
public function get BytesTotal():Number
{
if(sound == null)
return 0;
return sound.bytesTotal;
}
//声音对象加载字节
public function get BytesLoaded():Number
{
if(sound == null)
return 0;
return sound.bytesLoaded;
}
//设置缓冲时间
public function set BufferTime(time:Number):void
{
SoundMixer.bufferTime=time;
}
//中途换歌的时候用的
private function dispose():void
{
if(sound == null)
return ;
if(sound.isBuffering)
sound.close();
stop();
sound = null;
}
// 处理错误用
private function errorHandler(e:IOErrorEvent):void
{
sound.removeEventListener(IOErrorEvent.IO_ERROR,errorHandler);
sound = null;
}
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· [AI/GPT/综述] AI Agent的设计模式综述