开发者社区> 问答> 正文

Jspeex转换出来的wav音频不被standing wave识别,无法播放?报错

环境: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();
        }




请教高手来给小弟以指导啊,我是真过不去了,静候答案。

展开
收起
爱吃鱼的程序员 2020-06-15 19:41:36 859 0
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB

    楼主,您解决了吗?

    2020-06-15 19:41:54
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
全景视频的播放及优化 立即下载
低代码开发师(初级)实战教程 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载