flash air 不使用FMS(flash media server)麦克风语音录制并保存录音文件到本地

  • flash 桌面应用程序

  • Flex SDK 使用 Apache Flex 1.14.1

  • 语音录制用 wav 格式转成 mp3格式

  • 参考:

    • 声音保存为 wav 格式: https://www.adobe.com/devnet/air/flex/articles/using_mic_api.html
    • wav数据转mp3: https://github.com/kikko/Shine-MP3-Encoder-on-AS3-Alchemy

主程序代码:

详细代码已上传至:https://github.com/Mr-hongji/VoiceRecording

<?xml version="1.0" encoding="utf-8"?>
<s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.com/flex/mx"creationComplete="windowedapplication1_creationCompleteHandler(event)"><fx:Script><![CDATA[import com.adobe.audio.format.WAVWriter;import flash.utils.getTimer;import mx.core.UIComponent;import mx.events.FlexEvent;import fr.kikko.lab.ShineMP3Encoder;private var _myFile:FileReference;private var _voice:ByteArray;private var mic:Microphone;protected function windowedapplication1_creationCompleteHandler(event:FlexEvent):void{trace(Microphone.isSupported + "");trace(Microphone.names.length);_myFile = new FileReference();mic =  Microphone.getEnhancedMicrophone();//mic = Microphone.getMicrophone();mic.rate = 44;Security.showSettings("2");mic.setLoopBack(false);if (mic != null) {mic.setUseEchoSuppression(true);mic.addEventListener(ActivityEvent.ACTIVITY, activityHandler);mic.addEventListener(StatusEvent.STATUS, statusHandler);}}private function startRecoder():void{_voice = new ByteArray();mic.addEventListener(SampleDataEvent.SAMPLE_DATA, sampleDataHandler);}private function sampleDataHandler(e:SampleDataEvent):void{_voice.writeBytes( e.data );}private function activityHandler(event:ActivityEvent):void {trace("activityHandler: " + event);}private function statusHandler(event:StatusEvent):void{trace("statusHandler: " + event);}private function stopRecoder():void{mic.removeEventListener(SampleDataEvent.SAMPLE_DATA, startRecoder);_voice.position = 0 ;//saveFile();convertToMP3();}protected function saveFile():void { var outputFile:File = File.desktopDirectory.resolvePath("123.wav"); var outputStream:FileStream = new FileStream(); var wavWriter:WAVWriter = new WAVWriter(); _voice.position = 0;  // rewind to the beginning of the sample wavWriter.numOfChannels = 1; // set the inital properties of the Wave Writer wavWriter.sampleBitRate = 16; wavWriter.samplingRate = 44100; outputStream.open(outputFile, FileMode.WRITE);  //write out our file to disk. wavWriter.processSamples(outputStream, _voice, 44100, 1); // convert our ByteArray to a WAV file. outputStream.close();} private var _mp3Encoder:ShineMP3Encoder;private var _timer: int ;private function convertToMP3(): void{var wavWrite:WAVWriter = new WAVWriter();wavWrite.numOfChannels = 1 ;wavWrite.sampleBitRate = 16 ;wavWrite.samplingRate = 44100 ;var wav:ByteArray = new ByteArray();_timer = getTimer();wavWrite.processSamples(wav, _voice, 44100 , 1 );trace( 'convert to a WAV used: ' + (getTimer() - _timer) + 'ms' );wav.position = 0 ;trace( 'WAV size:' + wav.bytesAvailable + ' bytes' );trace( 'Asynchronous convert to MP3 now' );_timer = getTimer();_mp3Encoder = new ShineMP3Encoder( wav );_mp3Encoder.addEventListener(Event.COMPLETE, onEncoded);_mp3Encoder.addEventListener(ProgressEvent.PROGRESS, onEncoding);_mp3Encoder.addEventListener(ErrorEvent.ERROR, onEncodeError);_mp3Encoder.start();}private function onEncoded(e:Event): void{trace( 'encode MP3 complete used: ' + (getTimer() - _timer) + 'ms' );_mp3Encoder.mp3Data.position = 0 ;trace( 'MP3 size:' + _mp3Encoder.mp3Data.bytesAvailable + ' bytes' );trace( 'press <key>: <s>ave to MP3 or <r>ecord again' );_mp3Encoder.saveAs(new Date().getTime() + ".mp3");}private function onEncoding(e:ProgressEvent): void{trace( 'encoding MP3... ' + Number (e.bytesLoaded / e.bytesTotal * 100 ).toFixed( 2 ) + '%' , true );}private function onEncodeError(e:ErrorEvent): void{trace( 'encode MP3 error ' + e.text);}]]></fx:Script><s:Button click="startRecoder()" label="开始录制"/><s:Button click="stopRecoder()" label="停止录制" x="200"/>
</s:WindowedApplication>

flash air 声音录制相关推荐

  1. html5调用系统声音1s响一次_HTML5声音录制/播放功能的实现代码

    html代码: 火星黑洞 var recorder; var audio = document.querySelector('audio'); function startRecording() { ...

  2. 为什么苹果录屏没有声音_苹果手机自带录屏功能,打开声音录制方法

    有时候我们会用苹果的自带录屏功能,可是录制出来的视频,只有视频没有声音,其实这并不是说苹果不能录制带声音的视频,只是没有打开声音录制的开关. 1,首先从屏幕上面下滑(iphone x及以上机型,其他机 ...

  3. 游戏创业团队的技术选型之Flash AIR

    文/德义 相信大家应该对Flash比较了解,但对于Flash AIR可能就不是那么熟悉了,尤其前阵子Adobe宣布将移动版Flash Player停止维护及开发,就让大家误认为Adobe Flash将 ...

  4. Ubuntu系统腾讯会议使用ffmpeg屏幕录制+声音录制

    1.腾讯会议for Linux简介 经过一段时间的开发,腾讯终于搞定了Linux系统下的腾讯会议,腾讯会议目前可以进行远程视频对话,桌面远程展示等等功能,与Windows差异并无两样.但是也存在着一些 ...

  5. 【转】Actionscript,AS3,MXML,Flex,Flex Builder,Flash Builder,Flash,AIR,Flash Player之关系

    标签: Actionscript AS3 MXML Flex Flex Builder Flash Builder Flash AIR Flash Player   ActionScript Acti ...

  6. linux火狐网页无声音,解决Firefox在Ubuntu下播放Flash无声音的问题

    安装了Ubuntu Linux系统,在使用Firefox打开Flash是,光有图像没有声音,但播放MP3.视频等均正常,通过网上查找相关方法,一直无效,后来找到下面方法有效,留此作为存档. 打开&qu ...

  7. 手机游戏最新技术选型之Flash AIR

    文章不错,自己留着慢慢看. 相信大家应该对Flash比较了解,但对于Flash AIR可能就不是那么熟悉了,尤其前阵子Adobe宣布将移动版Flash Player停止维护及开发,就让大家误认为Ado ...

  8. Flash AIR App在苹果上发布的经验总结

    Flash AIR 编写的应用,能够在多平台发布, 前景还是很不错的. 这几天研究了一下发布成苹果版,有几个坑记录一下,方便以后其他人. 一. 在苹果上尽然不全屏 我的游戏需要全屏显示,在Androi ...

  9. flash AIR开发的IOS app上传APP Store报错:ERROR ITMS-90086:missing 64-bit support.

    在一次上传APP到  App Store的时候,突然遇到里这个问题,通过网络搜索发现相关的连接很多,所描述主要是XCODE中的设置问题,但是我们是用flash AIR 开发的,除了ANE扩展之外,没有 ...

最新文章

  1. Javascript创建select 以及获取select的值、文本;获取radio,check的值
  2. [Oracle] 中的Temporary tablespace的作用
  3. String常用操作,StringBuffer。
  4. 使用 yum 安装Docker(CentOS 7下)
  5. java 字符串过长_idea java常量字符串过长解决办法
  6. 用ftp、http搭建网络yum源
  7. 深入理解Spring AOP思想
  8. Weblogic常见配置
  9. PaddlePaddle——手写数字识别DEMO
  10. MapReduce详解和WordCount模拟
  11. Xamarin效果第十二篇之控制祖传PLC
  12. 属性文法和语法制导翻译
  13. matlab机器学习安装,机器学习(一):学习环境搭建
  14. 串讲-解释篇:作用域,作用域链,执行环境,变量对象,活动对象,闭包
  15. 笔记本电脑自带键盘禁用与恢复
  16. 制作影像(dmg)文件详细步骤
  17. fake_useragent导入无法引用的解决方法
  18. 致Oracle开发者的学习资源清单
  19. 五、 线性判别分析 LDA
  20. QOS-CBWFQ\QOS-LLQ\QOS-PQ\QOS-CQ\QOS-WFQ

热门文章

  1. 湖北:当好长江经济带高质量发展生力军
  2. curl-users unable to set private key file ?
  3. 微信推送模板消息测试
  4. 项目前期管理的一种科学方法——可行性研究工作
  5. java2018年二级真题_2018年3月浙江省计算机二级(Java)综合能力测试题及答案解析【含真题】...
  6. 28,verilog中的字符串表示
  7. 图片上传下载-功能实现
  8. 【cocos creator插件】噪声生成器[make_noise]
  9. php生成word的类,在Windows系统下使用PHP生成Word文档的教程
  10. 用橡皮泥做了个青龙偃月刀