环境: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();
}
请教高手来给小弟以指导啊,我是真过不去了,静候答案。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
楼主,您解决了吗?