2017-02-28 52 views
1

我一直在使用Superpowered iOS庫來分析音頻並提取BPM,響度,音高數據。我正在開發一個iOS Swift 3.0項目,並且已經能夠使用ObjC的橋接頭來使C類與Swift一起工作。通過BPM將音軌分割爲多個分段,並使用超能力iOS分析每個分段

我遇到的問題是,雖然我可以創建一個解碼器對象,從音樂庫中提取音頻並將其存儲爲一個.WAV - 我無法創建一個解碼器對象只是提取音頻的片段和獲取分析器類來返回數據。

我的方法是創建一個解碼器對象,如下所示:

var decodeAttempt = decoder!.open(self.originalFilePath, metaOnly: false, offset: offsetBytes, length: lengthBytes, stemsIndex: 0) 

「offsetBytes」和「lengthBytes的」我想是音頻文件中的位置。由於我已經解壓縮音頻,將其存儲爲WAV,然後將其提供給解碼器,因此我正在使用每秒44100 x 2 x 16/8 = 176400字節的PCM Wave音頻公式計算偏移量和長度。然後用它來指定一個起始點和長度(以字節爲單位)。我不確定這是否正確,因爲解碼器將返回'未知文件格式'。

任何想法或甚至如何實現這個問題的標題替代建議?提前致謝!

回答

1

SuperpoweredDecoder的偏移量和長度參數是由於Android APK文件格式造成的,其中捆綁音頻文件被簡單地連接到包。

儘管WAV文件可以像「未壓縮」一樣,但在開頭處有一個標題,因此偏移和長度不是一個好的方法。特別是因爲標題僅出現在開頭,並且沒有標題解碼是不可能的。

你提到你可以提取音頻到PCM(並保存到WAV)。然後你手中有答案:只要將不同的提取部分提交給SuperpoweredOfflineAnalyzer的不同實例即可。

+0

感謝加博爾 - 我最初有同樣的想法,但當我看到'偏移量,長度'參數,並假設它是與WAV文件做的時候,我一直在想 - 我會嘗試你的建議! –