iOS/ OS X支持的可播放的Audio Format与Android支持的有些不一样。因此可能出现在Android设备上面使用MediaRecorder录制出来的音频文件在iOS上面不可用。当然也可能iOS上面录制的audio file在Android上面无法playback。

如果在iOS和Android上面开发类似微信这样的待遇语音交流的软件,那么就需要考虑iOS和Android上面录制出来的音频的跨系统的兼容性。

音频文件的基础知识

这方面涉及到下面几个方面:

采样率

比特率

声音通道

编码格式:指压缩方法

存储容器:即压缩后使用什么方式存储

不同系统对音频的支持

iOS OS X支持的格式

找到Apple Developer的文档页面,或者google “iOS Audio Support Format”,可以看到apple的系统支持的格式如下。

File Format

Data Formats

AAC (.aac, .adts)

'aac '

AC3 (.ac3)

'ac-3'

AIFC (.aif, .aiff,.aifc)

BEI8, BEI16, BEI24, BEI32, BEF32, BEF64, 'ulaw', 'alaw', 'MAC3', 'MAC6', 'ima4', 'QDMC', 'QDM2', 'Qclp', 'agsm'

AIFF (.aiff)

BEI8, BEI16, BEI24, BEI32

Apple Core Audio Format (.caf)

'.mp3', 'MAC3', 'MAC6', 'QDM2', 'QDMC', 'Qclp', 'Qclq', 'aac ', 'agsm', 'alac', 'alaw', 'drms', 'dvi ', 'ima4', 'lpc ', BEI8, BEI16, BEI24, BEI32, BEF32, BEF64, LEI16, LEI24, LEI32, LEF32, LEF64, 'ms\x00\x02', 'ms\x00\x11', 'ms\x001', 'ms\x00U', 'ms \x00', 'samr', 'ulaw'

MPEG Layer 3 (.mp3)

'.mp3'

MPEG 4 Audio (.mp4)

'aac '

MPEG 4 Audio (.m4a)

'aac ', alac'

NeXT/Sun Audio (.snd, .au)

BEI8, BEI16, BEI24, BEI32, BEF32, BEF64, 'ulaw'

Sound Designer II (.sd2)

BEI8, BEI16, BEI24, BEI32

WAVE (.wav)

LEUI8, LEI16, LEI24, LEI32, LEF32, LEF64, 'ulaw', 'alaw'

Key for linear PCM formats. For example, BEF32 = Big Endian linear PCM 32 bit floating point.

Android支持的格式

Format / Codec

Encoder

Decoder

Details

Supported File Type(s) / Container Formats

AAC LC

Support for mono/stereo/5.0/5.1content with standard sampling rates from 8 to 48 kHz.

• 3GPP (.3gp)

• MPEG-4 (.mp4, .m4a)

• ADTS raw AAC (.aac, decode in Android 3.1+, encode in Android 4.0+, ADIF not supported)

• MPEG-TS (.ts, not seekable, Android 3.0+)

HE-AACv1 (AAC+)

(Android 4.1+)

HE-AACv2 (enhanced AAC+)

Support for stereo/5.0/5.1content with standard sampling rates from 8 to 48 kHz.

AAC ELD (enhanced low delay AAC)

(Android 4.1+)

(Android 4.1+)

Support for mono/stereo contentwith standard sampling rates from 16 to 48 kHz

AMR-NB

4.75 to 12.2 kbps sampled @ 8kHz

3GPP (.3gp)

AMR-WB

9 rates from 6.60 kbit/s to 23.85 kbit/s sampled @ 16kHz

3GPP (.3gp)

FLAC

(Android 3.1+)

Mono/Stereo (no multichannel). Sample rates up to 48 kHz (but up to 44.1kHz is recommended on devices with 44.1 kHz output, as the 48 to 44.1 kHzdownsampler does not include a low-pass filter). 16-bit recommended;no dither applied for 24-bit.

FLAC (.flac) only

MIDI

MIDI Type 0 and 1. DLS Version 1 and 2. XMF and Mobile XMF. Support for ringtone formats RTTTL/RTX, OTA, and iMelody

• Type 0 and 1 (.mid, .xmf, .mxmf)

• RTTTL/RTX (.rtttl, .rtx)

• OTA (.ota)

• iMelody (.imy)

MP3

Mono/Stereo 8-320Kbps constant (CBR) or variable bit-rate (VBR)

MP3 (.mp3)

Opus

(Android 5.0+)

Matroska (.mkv)

PCM/WAVE

(Android 4.1+)

8- and 16-bit linear PCM (rates up to limit of hardware). Samplingrates for raw PCM recordings at 8000, 16000 and 44100 Hz.

WAVE (.wav)

Vorbis

• Ogg (.ogg)

• Matroska (.mkv, Android 4.0+)

这里列举了Encoder和Decoder,分别对应到录音和播放。

因此我们的问题就变成了哪种/哪些Encoder是是在iOS和Android都支持的?

选择

我们可以看到AAC 编码 + MPEG-4 容器,是两个系统都支持的,那么可选择这个。

Android中可以使用MediaRecorder来完成声音的录制加编码处理,也可以使用底层的接口录制出PCM未压缩的格式,然后使用第三方库来进行编码。

在StackOverFlow中对此有回答(audio format for iOS and Android),经过个人验证,其实可以在Android端录制后取得后缀名为.m4a那么在iOS中也可以播放:

更进一步,在github找了个soundRecord apk源码,只需要做个简单的修改然后就可以用来验证:

$ git diff

diff --git a/app/src/main/java/com/danielkim/soundrecorder/RecordingService.java b/app/src/main/java/com/danielkim/soundrecorder/RecordingService.java

index a8b36a1..e5047bb 100644

--- a/app/src/main/java/com/danielkim/soundrecorder/RecordingService.java

+++ b/app/src/main/java/com/danielkim/soundrecorder/RecordingService.java

@@ -112,9 +112,9 @@ public class RecordingService extends Service {

count++;

mFileName = getString(R.string.default_file_name)

- + "_" + (mDatabase.getCount() + count) + ".mp4";

+ + "_" + (mDatabase.getCount() + count) + ".m4a";

mFilePath = Environment.getExternalStorageDirectory().getAbsolutePath();

- mFilePath += "/SoundRecorder/" + mFileName;

+ mFilePath += "/TonyHo/" + mFileName;

f = new File(mFilePath);

}while (f.exists() && !f.isDirectory());

参考

1. NAudio

1.1  讲解:关于使用.Net来做Audio Encoder/Decoder的文章

1.2 NAudio Github

2. 格式转换与查看工具lameXPLameXP

ios android 录音格式,跨系统的录音格式兼容性问题: iOS Android相关推荐

  1. android 权限作用说明书,AndroidAcp 一句话搞定,简化 Android 6.0 系统复杂的权限操作 @codeKK Android开源站...

    Acp 为 Android check permission 缩写,此库简化 Android 6.0 系统复杂的权限操作而编写. 特点 支持批量权限申请,不需要重写 onRequestPermissi ...

  2. iphone adb android,在苹果系统MAC OS X 安装 ADB (Android调试桥)

    该文章解决: 1.如何在苹果系统(MAC OS X) 安装 ADB (Android调试桥)? 2.如何让安卓屏幕投射到苹果系统(MAC OS X)屏幕? Android调试桥( adb )是一个开发 ...

  3. android 装苹果系统,安卓机子安装苹果IOS系统?

    智能手机的最大乐趣就在于"倒腾",不过由于系统不同,通常就会根据用户数量的多寡分出几大派系.目前智能手机中的两大派系就是iOS与Android,排挤也好.嘲笑也罢,二者之间有着永远 ...

  4. ios 与服务器传递文件,iOS开发 如何跨系统传输文件 如:茄子快传、快牙

    0.分析 不管是不是跨平台,利用网络来传输数据,必须先规定好链接方式(网络)和通讯方式(协议). 按照现在的应用场景,分析,其实需要实现的是一个点对点(P2P)交换数据的功能: 网络发现(两个设备相互 ...

  5. android webview 字体 系统字体大小,【转】android webview设置内容的字体大小

    Enum for specifying the text size. SMALLEST is 50% SMALLER is 75% NORMAL is 100% LARGER is 150% LARG ...

  6. VMware虚拟机安装安卓(Android)x86系统图文教程最新版

    来源:合肥电脑维修作者:老刘 在电脑上安装的安卓系统称为"(Android)x86",下载地址为:http://www.android-x86.org/download/,目前最新 ...

  7. 基于android的视频采集系统的设计与实现,基于Android的视频通话系统的设计与实现.docx...

    基于Android的视频通话系统的设计与实现 基于Android的视频通话系统的设计与实现摘 要近年来,智能手机操作系统发展迅速,尤其是Android系统的迅猛发展已经将全球智能手机市场引领到了非常火 ...

  8. Android App 设置系统时间,语言和时区、系统重启

    文章目录 说明 1. 修改系统时间 1. 设置系统时间(仅设置xx:xx) 2. 设置系统日期(仅设置到xxxx年xx月xx日) 3.设置系统是否自动获取时间 4.判断系统是否自动获取时间 2. 修改 ...

  9. x10i升级android4.0,索尼爱立信X10i 将升Android 2.3系统

    索尼爱立信首款Android系统的手机Xperia X10i是一款硬件配置强悍的产品,在去年年度,它的系统版本升级至Android 2.1,性能有了进一步提升.而现在,X10i的用户又等来了一个好消息 ...

最新文章

  1. 【alibaba-cloud】Gateway网关
  2. 端到端训练 联合训练_曲靖两家银行举行联合军事拓展训练 献礼祖国71周年华诞...
  3. 【Unity Shader】三、漫反射Diffuse Shader例子
  4. Perl之 用Net::FTP来上传下载文件
  5. C++类中protected访问权限问题
  6. win7桌面图片不显示缩略图问题
  7. apache php 整合 linux,Linux下Apache、php3、MySQL的整合
  8. 104种***清除方法
  9. idea解决tomcat控制台中文乱码问题
  10. 一个必用的javascript框架:underscore.js - wine的思考 - ITeye技术网站
  11. JavaStuNote 5
  12. python库参考_Python库参考手册(Python Library Reference)
  13. unity code之FBX模型导入与渲染
  14. 文件服务器+快照恢复,删除vmware ESXi快照文件 – 以任何方式恢复?
  15. VS2022无法启动程序,系统找不到指定文件
  16. 标准化考场时钟系统方案
  17. Android——检测摄像头是否可用
  18. 滑动验证码--前端部分
  19. 不完全免疫算法简介MOIA-DCSS--AIS学习笔记8
  20. 区块链系统开发实现原理,区块链为什么叫区块链?

热门文章

  1. python常用知识点总结-Python常用知识点汇总
  2. python推荐系统-用python写个简单的推荐系统示例程序
  3. 编程语言python特点-Python语言的特点有哪些?九大特点介绍!
  4. php和python性能-python、node、php、go、java性能对比测试
  5. python好学吗 老程序员-为什么会有程序员不喜欢 Python?
  6. python语言属于-python属于哪种语言
  7. python读文件每一行、并把这行替换-python基础--文件操作实现全文或单行替换
  8. kohana分析之主程序加载流程
  9. Netty学习笔记(一)
  10. css3关键帧动画以及兼容性策略