SwiftのAVAudioPlayer でサーバーから音声ファイル(3gp)をダウンロードした後に再生したいがエラーとなる
下記の環境、ソースコードでAVAudioPlayerのイニシャライザでエラーが発生します。
よろしくお願いします。
環境
- Xcode 7.3
- Swift 2.2
- iPhone 5(実機)
エラー内容
Error Domain=NSOSStatusErrorDomain Code=2003334207 "(null)"
ソースコード
class ViewController: UIViewController,NSURLSessionDownloadDelegate,AVAudioPlayerDelegate {
var audioPlayer:AVAudioPlayer!
func URLSession(session: NSURLSession, downloadTask: NSURLSessionDownloadTask, didFinishDownloadingToURL location: NSURL) {
do{
audioPlayer = try AVAudioPlayer(contentsOfURL: location)
audioPlayer.delegate = self
audioPlayer.prepareToPlay()
audioPlayer.play()
} catch let error as NSError{
print(error)
}
}
}
追記
状況
- サーバーから音声ファイルをダウンロードすることには成功している
- ダウンロードされたものは”hoge.tmp”というように拡張子が”tmp”である
- ダウンロードするときに指定するURLは”https://server/hoge.3gp”のように拡張子が”3gp”である
- シミュレータではエラーにならず意図通り動作する(音声が再生される)
ただし、このソースコードの前画面でaudioPlayer.prepareToPlay()
(ここでいうaudioPlayer
は前画面のグローバル変数)を実行した場合に限る。(これを実行しないと音声は再生されない
追記その2
シミュレータでの動作の詳細。
シミュレータでもエラーになる場合とならない場合がある
class ViewController: UIViewController ,AVAudioPlayerDelegate{
var audioPlayer:AVAudioPlayer!
var audioPlayer2:AVAudioPlayer!
override func viewDidLoad() {
let URL_TEST = NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource("hakucyou", ofType: "mp3")!)
let URL_TEST2 = NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource("1458897593 (5)", ofType: "3gp")!)//サーバーからDLした音声ファイル
do{
audioPlayer = try AVAudioPlayer(contentsOfURL: URL_TEST, fileTypeHint:"mp3")
audioPlayer.delegate = self
//audioPlayer.prepareToPlay()
audioPlayer2 = try AVAudioPlayer(contentsOfURL: URL_TEST2)
audioPlayer2.prepareToPlay()
} catch let error as NSError {
print(error)
}
}
}
このソースコードを実行するとaudioPlayer2 = try AVAudioPlayer(contentsOfURL: URL_TEST2)
で同エラーが発生します。
ここで//audioPlayer.prepareToPlay()
のコメントを外すとエラーとなりません。