环境:JDK 1.7, Flex 4, Win7/8/8.1
前提:手机端的语音压缩用的是Speex。并把文件用Base64转码了。
公司项目需求:在Flex平台接收来自手机端发来的语音并播放。
项目结构:前台Flex,后台Java。
解决方案:
1、直接在Flex端接收语音的编码然后解码并播放。
但是我搜索了两天,发现在Flex端没有用AS3写的speex的实现,也没找到例子。唯一的一个线索是,一个老外说用AS3重写speex。OMG,我时间有限,另外我貌似也搞不定。。。
2、在后台Java端解码,然后写入spx文件,spx文件转换为flex可识别的语音格式,后台给前台一个文件地址,然后前台播放。
JSpeex版本:0.9.8 ; Standing Wave 版本:2
采用JSpeex来转换spx,可输出为wav格式。但是Flex只识别MP3和Flv的音频,只好再次搜索,找到一个Flex的类库Standing Wave ,可以实现在Flex端播放wav音频。自己写了Flex的Demo来播放wav音频,但是我发现用JSpeex转换过来的wav就是没法用Standing Wave播放,也不报错,Standing Wave倒是可以播放其他一些wav文件。
代码如下:
Java端:
String[] sourceAndDest = new String[]{"F:\\java\\speex\\jspeex\\dist\\input.spx", "F:\\java\\speex\\jspeex\\dist\\output.wav"}; JSpeexDec decoder = new JSpeexDec(); if (decoder.parseArgs(sourceAndDest)) { decoder.decode(); }
Flex端:
import com.noteflight.standingwave2.elements.Sample; import com.noteflight.standingwave2.formats.WaveFile; import com.noteflight.standingwave2.output.AudioPlayer; var file:FileReference; var player:AudioPlayer = new AudioPlayer(); var content:ByteArray = null; var sample:Sample = null; // 文件路径 var urlStr:String = "C:\\CiatMonitor\\tempDir\\chatvoice\\wav\\20140729113707.wav"; /** * 初始化请求加载文件 */ public function init():void { var urlRequest:URLRequest = new URLRequest(urlStr); var loader:URLLoader = new URLLoader(); loader.dataFormat = URLLoaderDataFormat.BINARY; loader.addEventListener(Event.COMPLETE, completeLoad); loader.load(urlRequest); } /** * 加载文件结束 * @param evt */ function completeLoad(evt:Event):void { content = evt.target.data as ByteArray; } /** * 播放声音 */ function playVoice():void { player.play(WaveFile.createSample(content)); } /** * 停止播放 */ function stopVoice():void { player.stop(); }
请教高手来给小弟以指导啊,我是真过不去了,静候答案。
楼主,您解决了吗?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。