iOS Framework の AVFoundation 内の、AVAudioPlayerNodeを使ってのファイル再生を行おうとしています。
シミュレーター上ではファイル再生をすることが出来たのですが、実機上でファイル再生をしようとしても何も音が出ません。
なぜこのような差異が出るのか分からず、はまっています。。。
どなたかアドバイスお願いいたします。
手がかりになるか分からないのですが、実機上で動かした際、iPhoneのスピーカーに耳を近づけると小さく「サー」というホワイトノイズっぽい音が聞こえます。
アプリを閉じるとノイズも消えます。
環境は以下の通りです。
Xcode:7.3.1
シミュレーター:iPhone5S (iOS: 9.3)
実機:iPhone5S (iOS: 9.2.1)
ViewController.swift 上のコードは以下のようにしています。
シンプルにAVAudioNodeを使って "tobira-akete.wav" というWAVファイルを再生しています。
もちろんこのWAVファイルはプロジェクトに追加しています。
また実機で動かした際には特にエラーは起きておらず、ログを見ても、
ファイル読み込みに成功したことを示す、「Success to read audio file.」が出力されていることも確認できました。
Swift
1import UIKit 2import AVFoundation 3 4class ViewController: UIViewController { 5 var audioEngine : AVAudioEngine! 6 var audioFile : AVAudioFile! 7 var audioFilePlayer : AVAudioPlayerNode! 8 9 let audioFileName : String = "tobira-akete" 10 11 override func viewDidLoad() { 12 super.viewDidLoad() 13 // Do any additional setup after loading the view, typically from a nib. 14 initAudio() 15 } 16 17 override func didReceiveMemoryWarning() { 18 super.didReceiveMemoryWarning() 19 // Dispose of any resources that can be recreated. 20 } 21 22 23 func initAudio(){ 24 print("initAudio") 25 26 // Create audio engine. 27 audioEngine = AVAudioEngine() 28 29 // Init Player 30 initPlayer() 31 } 32 33 func initPlayer() { 34 // Create Player 35 audioFilePlayer = AVAudioPlayerNode() 36 37 // Get audio file path 38 let audioPath : NSURL = NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource(audioFileName, ofType: "wav")!) 39 40 41 // Create audio player 42 if let tempAudioFile = try? AVAudioFile(forReading: audioPath){ 43 print("Success to read audio file.") 44 audioFile = tempAudioFile 45 }else{ 46 print("Failed to read audio file") 47 return; 48 } 49 50 // Add AVPlayerNode to AVAudioEngine 51 audioEngine.attachNode(audioFilePlayer) 52 53 // Connect each node. 54 audioEngine.connect(audioFilePlayer, to: audioEngine.mainMixerNode, format: audioFile.processingFormat) 55 56 // Start audio engine. 57 do { 58 try audioEngine.start() 59 audioFilePlayer.scheduleFile(audioFile, atTime: nil, completionHandler: nil) 60 } catch { 61 // Error 62 print("Failed to start audio engine.") 63 } 64 } 65 66 @IBAction func pressPlayButton(sender: UIButton) { 67 print("Call playButton") 68 audioFilePlayer.play() 69 } 70 @IBAction func pressStopButton(sender: UIButton) { 71 print("Call stopButton") 72 audioFilePlayer.pause() 73 } 74}
回答2件
あなたの回答
tips
プレビュー