有没有办法在IOS swift中播放.amr文件?

时间:2015-03-24 12:45:43

标签: ios iphone swift ios8

我有一些amr格式的音频文件,我无法转换为任何其他格式,有没有办法在IOS中使用swift (AVFoundation)播放这些文件?

我试过这段代码

var audioPlaying = AVAudioPlayer()
audioPlaying = AVAudioPlayer(contentsOfURL: NSURL(fileURLWithPath:
       NSBundle.mainBundle().pathForResource("music", ofType: "mp3")!), error: nil)
audioPlaying.play()

但是当我在"amr"中使用ofType:时,收到错误的文件不存在。

3 个答案:

答案 0 :(得分:4)

Opencore-AMR iOS框架可能是您最好的起点。

github.com/feuvan/opencore-amr-iOS

此处还有关于如何为iOS编译它的指南,因为它不是一件容易的事:

http://swati-ios.blogspot.co.uk/2013/01/compile-opencore-amr-for-ios-projects.html

答案 1 :(得分:3)

Apple的{p> AMR格式为no longer supported(自iOS 4.3起)。

如果你想播放录制,你必须使用一些工具(如opencore-amr库)to change the format

答案 2 :(得分:1)

以下是在Swift 4和Xcode 9中完美运行的解决方案:

1-使用以下库通过迦太基将Amr解码为Wav: https://github.com/teambition/AMRAudioSwift

有关如何使用Carthage在Xcode上安装FrameWork的信息,请访问以下链接: https://github.com/Carthage/Carthage

将这些库导入您的代码中:

import AMRAudioSwift
import AVFoundation

2-使用以下代码播放AMR文件:

var player: AVAudioPlayer?
func playAmr() {
    guard let url = Bundle.main.url(forResource: "Your Amr File", withExtension: "amr", subdirectory:"your Amr Parent Folder") else { return }

    do {
        let audioRecorder = AMRAudioRecorder()
        audioRecorder.volume = 3
        audioRecorder.delegate = self as? AMRAudioRecorderDelegate
        let wavData = AMRAudio.decodeAMRDataToWAVEData(amrData: try!Data(contentsOf:url))
        player = try AVAudioPlayer(data:wavData , fileTypeHint: AVFileType.wav.rawValue)
        guard let player = player else { return }
        player.play()

    } catch let error {
        print(error.localizedDescription)
    }
}

祝您AMR文件运气好!