尤其是 amr ,难道是用基带解码的? 我看微信也是用的 amr ,但微信很难调用到这么底层吧 如果用 cpu 那岂不是就软解了
1
ferock 2022-01-22 01:23:31 +08:00 via iPhone
码率不高软解也没太大问题…毕竟 64k 就可以听个响了,128k 属于可用音质了,比起视频动不动 800kps 或者 2000kps ,这个比特率太低了
|
2
kkocdko 2022-01-22 01:42:45 +08:00
大多数是软解,比如 mp3 的 lame 软解就足够快了,编码也很快的,在现代 cpu 上不算个事
|
3
yyfearth 2022-01-22 04:06:15 +08:00
这些编码软件当时 CPU 都没问题 现在的 CPU 更是轻松
不过现在很多 CPU 或者硬件会有带硬件加速可以 硬解 SBC AAC AC3 这些了 硬解也只要调用系统的 API 就可以实现 只要做好系统兼容性就好 具体软件不需要操心 |
4
Borden 2022-01-22 04:21:32 +08:00
虽然没研究过,但是我想有 api 可以调的吧,coreAudio 啥的,然后系统库提交给硬件 codec 。
|
5
deanguqiang 2022-01-22 08:14:03 +08:00 via iPhone
这些 codec 最简单的 arm cm4 来软解都毫无压力
|
6
mxalbert1996 2022-01-22 11:10:21 +08:00 via Android
音频编码的复杂度根本不需要硬解
|
7
cev2 2022-01-22 13:27:31 +08:00 3
首先,第一个问题,威信用的可不是 amr 格式,amr 扩展名可能是为了历史兼容保留的,实际是 silk 格式,所以你如果用标准 amr 的音频播放软件是打不开威信的 amr 文件的。
其次,安卓呢给你提供了两个大宝贝 API ,一个叫 MediaCodec ,一个叫 AudioTrack ,这俩呢先一边等会儿。 然后,你手机如果是联发哥的呢,发哥会给你在系统中预装很多编解码器,比如 omx.mtk.xxx 。要是糕通的呢,通哥也会给你预装一堆 omx.qcom.xxx 。然后安卓是谷哥的嘛,谷哥也会给你预装一堆 omx.google.xxx 。再就是你的手机是 vivi 牌的,爱爱也会给你预装一堆 omx.vivi.xxx 。反正嘛,硬件厂商给你预装的编解码器呢大概率就是它芯片能支持的硬解码器,像谷歌这样的软件厂商呢给你预装的大概率就是软解码实现,当然也不绝对,看它们喜好。 最后轮到威信,威信播放语音信息时就有很多种选择了,威信可以选择: ①威信直接把 silk 格式的文件丢给 MediaCodec ,MediaCodec 呢就顺着上面系统注册了的解码器挨个找,诶,找到一个 omx.mtk.opus.decoder 的解码器,这个解码器是发哥提供的,然后解码工作就丢给了发哥的芯片去硬解。如果找到了一个 omx.google.opus.decoder 的解码器,这是谷哥提供的,然后解码工作就交给了软件实现的解码器去软解。 ②威信把文件丢给 MediaCodec 后,MediaCodec 找了一圈“这解码,多是一件美事儿啊”,没有找到任何支持此格式的解码器。那就是系统解码不了呗,威信通过内置的 silk 库把 silk 格式的 amr 文件自己解码为 PCM ,然后把 PCM 流丢给 AudioTrack 剩下的安卓就给你完成了,这也是软解。 这些呢,都是我瞎说的。 |
8
icyalala 2022-01-22 13:31:20 +08:00 1
一个是这种程度的编解码计算量都太小,没必要
二个是如果没有性能压力,为了保证跨平台一致性,微信喜欢用 C/C++ 自己写基础库 |
9
xsen 2022-01-22 17:31:37 +08:00
音频一般都是软编软解,因为数据量小,对 cpu 的消耗差不多可以忽略不计
对于音频来说,编解码一致都不会是难点;更难的是音频的前后处理,最复杂、最难的应该是回音 |