为什么iOS上的Codename One将音频录制为CAF?

时间:2017-04-05 09:12:53

标签: ios codenameone audio-recording

我的问题与此other SO question有关。我正试图通过Capture.captureAudio()在iOS上录制音频。它输出的音频文件可以在计算机上读取,但不能在iOS(iPhone 4S)和Android上读取。

ffmpeg -i yield:

Input #0, caf, from 'myFile.m4a':
Duration: 00:00:07.04, start: 0.000000, bitrate: 37 kb/s
Stream #0:0: Audio: aac (aac  / 0x20636161), 16000 Hz, mono, s16, 23 kb/s

如果我通过Voice Recorder应用程序使用iOS录制文件,我可以从ffmpeg:

获取
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'Test.m4a':
Metadata:
major_brand     : M4A 
minor_version   : 0
compatible_brands: M4A mp42isom
creation_time   : 2017-04-03 19:01:32
date            : 2017-04-03T21:01:09+0200
encoder         : com.apple.VoiceMemos (iPhone OS 7.1.2)
Duration: 00:00:05.15, start: 0.000000, bitrate: 67 kb/s
Stream #0:0(und): Audio: aac (mp4a / 0x6134706D), 44100 Hz, mono, s16, 64 kb/s
  Metadata:
  creation_time   : 2017-04-03 19:01:32
  handler_name    : Core Media Audio

此文件可以在Android和iOS上播放。

虽然乍一看哑剧类型似乎被限制在" amr"

    /**
 * Gets the available recording MimeTypes
 */ 
public String [] getAvailableRecordingMimeTypes(){
    return new String[]{"audio/amr"};
}

瞥了一眼native code表明在iOS上它记录为" MPEG4AAC" 16kHz的。

结果为什么我得到一个无法在手机上播放的caf文件?

任何帮助表示赞赏!

1 个答案:

答案 0 :(得分:2)

caf文件是Core Audio Format个文件。它们只是苹果用于音频的包装器,因为它有一些优点来存储音频" unwrapped"。

caf包装器内的音频仍然使用您指定的格式进行编码。因为它只是一个包装器,它应该快速而容易地解开"它。 This google search for "convert caf to mp4"显示了很多结果。如果您希望以编程方式执行此操作,则适当的Google搜索会产生大量结果。