dadiyang / jave

音频转码工具,主要用于将微信语音 amr 格式转换为 mp3 格式以便在 html5 的 audio 标签中进行播放
GNU General Public License v2.0
217 stars 72 forks source link

windows环境,小amr文件(1-3K)无法转换mp3,且无报错告警信息 #12

Open wangchaan opened 4 years ago

wangchaan commented 4 years ago

我在同级目录转,Windows环境,但是,amr从微信下载下来后,我调用方法转mp3,方法没报错,但是也没见mp3文件?????

dadiyang commented 4 years ago

你的amr文件是来自公众号消息发的还是微信应用里面的?微信的语音文件有加密的,这个项目解决不了。查看一下已关闭的issue,有一个说过这个问题,有解决思路。

dadiyang commented 4 years ago

看下这个 issue,应该跟你是同一个问题。https://github.com/dadiyang/jave/issues/5

wangchaan commented 4 years ago

看下这个 issue,应该跟你是同一个问题。#5

首先,不是一个问题。 经过我测试发现,amr文件必须足够大才行,我最开始测试是2-3秒,2K,本地测试不报错,不成功;如果amr足够大,比如30秒,23k,本地测试不报错,但是能生成mp3。你可以亲自尝试下小amr情况下的转换问题。

wangchaan commented 4 years ago

你的amr文件是来自公众号消息发的还是微信应用里面的?微信的语音文件有加密的,这个项目解决不了。查看一下已关闭的issue,有一个说过这个问题,有解决思路。

不是公众号,也不是微信聊天语音。而是,通过微信录音,当做媒体文件。amr过小的情况下,这个转换有问题。我怀疑是不是和里边某处的流的处理相关?

dadiyang commented 4 years ago

可以发一个示例文件给我试一下吗?

wangchaan commented 4 years ago

可以发一个示例文件给我试一下吗?

test.zip

两种情况

直接操作amr文件

单独使用,在有amr的情况下,直接使用是没问题的。

通过字节数组写入文件,再操作写入的amr文件

small为小文件,无法转换且不报错;big为大文件,转换正常。另外,我的场景是:从请求中拿到字节数组,再用流写到文件。这种情况下,small是转换不了的,不报错;big是可以转换的。(从请求里获取的字节数组可以写入文件,并且可以播放)

wangchaan commented 4 years ago

可以发一个示例文件给我试一下吗?

11111111111

我这个是直接使用jave,对上述test里的small和big做的实验。同样的,只要直接对文件操作,只是报异常(it.sauronsoftware.jave.EncoderException: Duration: N/A, bitrate: N/A)但不影响输出mp3;但是,对于字节数组来说,还是和上一个回答一样,small是转换不了的,但是会报错(it.sauronsoftware.jave.InputFormatException: Unknown format见上图);big是可以转换的,抱异常(it.sauronsoftware.jave.EncoderException: Duration: N/A, bitrate: N/A)。