AVAudioPlayer 没有播放任何内容

tar*_*del 3 url avfoundation avaudioplayer swift document-directory

我有一个 tableViewCell,我想在其中播放通常为 .m4a 的声音。\n我已经AVAudioPlayer像这样全局声明了我的实例:

\n\n
var player = AVAudioPlayer()\n
Run Code Online (Sandbox Code Playgroud)\n\n

然后我下载声音,将其放在文档中的目录中。但是,当我尝试从目录播放声音文件时,我收到此错误:

\n\n
Open failed\nThe operation couldn\xe2\x80\x99t be completed. (OSStatus error 2003334207.)\n
Run Code Online (Sandbox Code Playgroud)\n\n

这是我的代码我不知道你有什么问题。我在模拟器中找到了可以用 QuickTimePlayer 播放的文件。

\n\n
func downloadSound(_ message: ChatVoiceMessageStructure) {\n    guard let url = service?.networkManager.CDNURL else { return }\n    let doanloadURL = URL(string: url.appending(message.name!))\n    let docUrl:URL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first as URL!\n    let desURL = docUrl.appendingPathComponent("tmpsong.m4a")\n    var downloadTask:URLSessionDownloadTask\n    let request = URLRequest(url: doanloadURL!)\n    downloadTask = URLSession.shared.downloadTask(with: request, completionHandler: { [weak self](URLData, response, error) -> Void in\n        do{\n            let isFileFound:Bool? = FileManager.default.fileExists(atPath: desURL.path)\n            if isFileFound == true{\n                print(desURL) //delete tmpsong.m4a & copy\n            } else {\n                try FileManager.default.copyItem(at: URLData!, to: desURL)\n            }\n            let sPlayer = try AVAudioPlayer(contentsOf: desURL)\n            self?.player = sPlayer\n            self?.player.prepareToPlay()\n            self?.player.play()\n\n        } catch let err {\n            print(err.localizedDescription)\n        }\n\n    })\n    downloadTask.resume()\n\n}\n
Run Code Online (Sandbox Code Playgroud)\n

tar*_*del 5

感谢 MAhipal,我终于解决了这个问题。问题是 AVAudioPlayer 无法播放某种音频格式。就像音频扩展名是 MPEG4 但音频编码不是 AAC 时一样。所以要注意AVAudioPlayer支持的格式。CoreAudio你可以在Class 的子类中找到它们AudioFormatID。我花了几周的时间才解决这个问题,希望这可以节省其他人的时间。如果你想玩其他类型你可以使用AVPlayer

这些是供将来参考的类型:

public var kAudioFormatLinearPCM: AudioFormatID { get }
public var kAudioFormatAC3: AudioFormatID { get }
public var kAudioFormat60958AC3: AudioFormatID { get }
public var kAudioFormatAppleIMA4: AudioFormatID { get }
public var kAudioFormatMPEG4AAC: AudioFormatID { get }
public var kAudioFormatMPEG4CELP: AudioFormatID { get }
public var kAudioFormatMPEG4HVXC: AudioFormatID { get }
public var kAudioFormatMPEG4TwinVQ: AudioFormatID { get }
public var kAudioFormatMACE3: AudioFormatID { get }
public var kAudioFormatMACE6: AudioFormatID { get }
public var kAudioFormatULaw: AudioFormatID { get }
public var kAudioFormatALaw: AudioFormatID { get }
public var kAudioFormatQDesign: AudioFormatID { get }
public var kAudioFormatQDesign2: AudioFormatID { get }
public var kAudioFormatQUALCOMM: AudioFormatID { get }
public var kAudioFormatMPEGLayer1: AudioFormatID { get }
public var kAudioFormatMPEGLayer2: AudioFormatID { get }
public var kAudioFormatMPEGLayer3: AudioFormatID { get }
public var kAudioFormatTimeCode: AudioFormatID { get }
public var kAudioFormatMIDIStream: AudioFormatID { get }
public var kAudioFormatParameterValueStream: AudioFormatID { get }
public var kAudioFormatAppleLossless: AudioFormatID { get }
public var kAudioFormatMPEG4AAC_HE: AudioFormatID { get }
public var kAudioFormatMPEG4AAC_LD: AudioFormatID { get }
public var kAudioFormatMPEG4AAC_ELD: AudioFormatID { get }
public var kAudioFormatMPEG4AAC_ELD_SBR: AudioFormatID { get }
public var kAudioFormatMPEG4AAC_ELD_V2: AudioFormatID { get }
public var kAudioFormatMPEG4AAC_HE_V2: AudioFormatID { get }
public var kAudioFormatMPEG4AAC_Spatial: AudioFormatID { get }
public var kAudioFormatAMR: AudioFormatID { get }
public var kAudioFormatAMR_WB: AudioFormatID { get }
public var kAudioFormatAudible: AudioFormatID { get }
public var kAudioFormatiLBC: AudioFormatID { get }
public var kAudioFormatDVIIntelIMA: AudioFormatID { get }
public var kAudioFormatMicrosoftGSM: AudioFormatID { get }
public var kAudioFormatAES3: AudioFormatID { get }
public var kAudioFormatEnhancedAC3: AudioFormatID { get }
public var kAudioFormatFLAC: AudioFormatID { get }
public var kAudioFormatOpus: AudioFormatID { get }
Run Code Online (Sandbox Code Playgroud)