导航
  • 主页
  • .NET Framework
  • ASP
  • Web Services
  • .NET互联网桌面应用
  • VB
  • 图表区
  • 分析与设计
  • 组件/控件开发
  • AppLauncher
  • 问答

关于实现FLASH录音的问题

yagebu1983 北京中合联拓 技术总监/研发总监  2009-06-22 11:27:10
最近帮人做个Flash录音程序的开发,现在是程序出来了,没有办法实现录音。
flash AS 3.0的代码如下:

package {
import flash.net.NetConnection;
import flash.net.NetStream;
import flash.media.Microphone;
import flash.system.Security;
import flash.net.ObjectEncoding;
import flash.net.NetStream;
import flash.events.MouseEvent;
import flash.events.Event;
import flash.events.NetStatusEvent;
import fl.controls.Button;
import fl.controls.TextInput;
import flash.display.Sprite;
import flash.media.Sound;
import flash.media.SoundChannel;
import fl.controls.Label;
import flash.display.SimpleButton;
import flash.text.TextField;
import flash.display.Sprite;
import flash.system.SecurityPanel;

import flash.events.TimerEvent;
import flash.utils.Timer;
import flash.utils.getTimer;

public class sound extends Sprite {
private var my_nc = new NetConnection();
private var my_mic:Microphone;
private var my_ns:NetStream;
private var RecordInterval;
private var my_sound:Sound;
private var my_soundstop:SoundChannel;
private var position:int;
private var msg:Boolean;
private var VideoName:String;
private var timeNum:Number=0;
public function sound() {
InitTimer();
btnStop.label="停止录制";
btnStop.addEventListener(MouseEvent.CLICK,stopRecord);
btnPlay.label="回放";
btnPlay.addEventListener(MouseEvent.CLICK,playRecord);
}
private var timer:Timer;
// 计时器需要显示的 时,分,秒,毫秒 变量
var hour:Number = 0;
var minute:Number = 0;
var second:Number = 0;
var millisecond:Number = 0;

// 计时器是否在计时
var running:Boolean = false;

// 播放器加载的总时长
var playerLength:Number = 0;
// 计时器暂停的总时长
var pauseLength:Number = 0;
// 计时器计时的总时长
var timerLength:Number = 0;

function InitTimer() {
btnPublish.label="开始录制";
btnPublish.addEventListener(MouseEvent.CLICK,startRecord);
this.addEventListener(Event.ENTER_FRAME, enterFrameHandler);
}

function enterFrameHandler(event:Event):void {
if (running) {
// 当前计时器需要显示的时间
var goTime:Number = getTimer() - pauseLength - timerLength;

// 从总的毫秒时间中解析出时间的 时,分,秒,毫秒 部分
hour = Math.floor( goTime/3600/1000 );
minute = Math.floor( (goTime/3600/1000 - hour) * 60 );
second = Math.floor( ((goTime/3600/1000 - hour) * 60 - minute) * 60 );

// 在 UI 上显示格式化后的时间
txt_time.text = "时间:" + minute + "分" + second + "秒";
}
}

private function startRecord(evt:MouseEvent):void {
running = true;
my_nc=new NetConnection();
my_nc.client=new Client();
my_nc.addEventListener(NetStatusEvent.NET_STATUS,onPublishStatusHandler);
my_nc.connect("rtmp://localhost/test/");
}
private function onPublishStatusHandler(evt:NetStatusEvent):void {
if (txt_name.text.length==0) {
lab_alert.text="请输入文件名";
} else {
var timeNum:Number = 0;
if (evt.info.code=="NetConnection.Connect.Success") {
my_mic=Microphone.getMicrophone(0);
Security.showSettings(SecurityPanel.MICROPHONE);
my_mic.rate=44;
my_mic.gain=50;
my_mic.setSilenceLevel(0, 0);
my_ns=new NetStream(my_nc);
my_ns.attachAudio(Microphone.getMicrophone());
my_ns.publish(txt_name.text,"record");
lab_alert.text="开始录音";
InitTimer();
my_ns.addEventListener(NetStatusEvent.NET_STATUS,onPublishStatusHandler);
}
}
}
private function stopRecord(evt:MouseEvent):void {
lab_alert.text="录音停止";
my_ns.close();
}
private function playRecord(evt:MouseEvent):void {
my_nc=new NetConnection();
my_nc.client=new Client();
my_nc.addEventListener(NetStatusEvent.NET_STATUS,onPlayStatusHandler);
my_nc.connect("rtmp://localhost/test/");
}
private function onPlayStatusHandler(evt:NetStatusEvent):void {
if (evt.info.code=="NetConnection.Connect.Success") {
lab_alert.text="正在播放录音";
my_ns=new NetStream(my_nc);
my_ns.addEventListener(NetStatusEvent.NET_STATUS,onPlayStatusHandler);
my_ns.play(txt_name.text,0);
}
}
}
}
class Client {
public function onBWCheck(... rest):Number {
return 0;
}
public function onBWDone(... rest):void {
var p_bw:Number;
if (rest.length > 0) {
p_bw = rest[0];
}
trace("bandwidth = " + p_bw);
}
}
先放100分。。
能实现再加200分。。。
...全文
1650 点赞 收藏 20
写回复
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
xyzvalue 2009-06-27
在ADobe论坛上,有人要实现录音效果,未果,再见过有人写ActiveX弄出来了
回复
xyzvalue 2009-06-27
请你注意一下子,你的方法是作视频录制的,不能光提取声音,并且这代码99%是网上的不是你写的,代码请见FmS3中的示例代码
回复
sforiz 2009-06-24
UP
回复
yagebu1983 2009-06-24
没有帮我试试吗。。。
回复
yagebu1983 2009-06-23
有没有人能帮我试一下啊。。。
回复
wenblue7 2009-06-23
友情帮顶
回复
yagebu1983 2009-06-23
up.......
回复
qq196260188 2009-06-22
关注高手解题..
回复
zorou_fatal 2009-06-22
这个区又不管AS3的编程。呵呵,要搞as3的,去别的论坛。
csdn不是flash开发者常来的地方。
回复
zorou_fatal 2009-06-22
你的声音保存到哪了?
回复
yagebu1983 2009-06-22
人气。。。。
回复
yagebu1983 2009-06-22
up。。
回复
yagebu1983 2009-06-22
试了。。。
还是不行。。。
回复
zorou_fatal 2009-06-22
my_ns.attachAudio(Microphone.getMicrophone());

改成

my_ns.attachAudio(my_mic);

看看
回复
yagebu1983 2009-06-22
我试了,怎么不管啊。。。
回复
ttt2 2009-06-22
结合fms很简单,存上就自为flv格式
回复
gengxin_914 2009-06-22
帮顶
回复
yagebu1983 2009-06-22
正常的。。。
就是不能把存放声音的文件保存成.flv格式的。。。
回复
windinwing 2009-06-22
rtmp://localhost/test/
... 确定rtmp server正常?
回复
发动态
发帖子
.NET技术社区
创建于2007-09-28

5.8w+

社区成员

.NET技术交流专区
申请成为版主
社区公告
暂无公告