2017-04-05 35 views
1

我的問題是關於這個other SO question。我正嘗試通過Capture.captureAudio()在iOS中錄製音頻。它輸出的音頻文件可以在計算機上讀取,但在iOS(iPhone 4S)和Android上都不能。爲什麼iOS上的Codename One將音頻錄製爲CAF?

的ffmpeg -i產量:

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 

如果我記錄通過錄音機應用的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上播放。

雖然一見鍾情的MIME類型似乎受到抑制,以「AMR」

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

native code一目瞭然顯示,在iOS上它記錄爲「MPEG4AAC」 16kHz的。

因此,爲什麼我會得到一個無法在手機上播放的caf文件?

任何幫助表示讚賞!

回答

2

caf文件是Core Audio Format文件。它們只是蘋果使用其音頻的包裝,因爲它具有存儲音頻「解包」的一些優點。

咖啡包裝內的音頻仍然使用您指定的格式進行編碼。由於它只是一個包裝,它應該快速且容易地「解開」它。 This google search for "convert caf to mp4"顯示了很多結果。如果您希望以編程方式執行此操作,適當的Google搜索應該會產生很多結果。

+0

謝謝史蒂夫!事實上,CAF的質量很高,但它在Android上不受支持。如果您將記錄的mime類型(在ios設備上)更改爲「audio/aac」而不是「audio/amr」,那麼您將獲得可在iOS和Android上播放的mp4文件(請參閱http://stackoverflow.com /一個/6351897分之43234291)。 – HelloWorld

+1

當這段代碼最初被開發出來時,我們努力了很多,以使它在所有操作系統上正常工作。我們最終決定使用應該得到普遍支持的AMR,歷史上AAC對於某些Android設備來說存在問題。如果現在正在記錄CAF而不是AMR,這可能是一種迴歸 –