2017-10-16 6 views
1

以下は、オーディオプレーヤーのファイルを表すコードです。私は自分のプログラムで音を再生するためにそれを利用しようとしています。私はAVPlayerの機能をすべてのView Controllerで繰り返し再生する必要はないので、必要に応じてすべてを1か所に配置し、特定の機能(音楽、クリック、イントロ)を呼び出す方法を探していますオーディオを別のスウィフトファイルで再生する

import UIKit 
import AVFoundation 

class player: UIViewController 
{ 
var music:Bool = true 
var sound:Bool = true 
var intro:Bool = true 

var soundPlayer: AVAudioPlayer? 
var clickPlayer: AVAudioPlayer? 
var musicPlayer : AVAudioPlayer? 
{ 
    get 
    { 
     let appDelegate = UIApplication.shared.delegate as! AppDelegate 
     return appDelegate.musicPlayer 
    } 
    set 
    { 
     let appDelegate = UIApplication.shared.delegate as! AppDelegate 
     appDelegate.musicPlayer = newValue 
    } 
} 

func playSound(title: String, format: String) 
{ 
    if sound == true 
    { 
     guard let url = Bundle.main.url(forResource: title, withExtension: format) 

      else { return } 

     do 
     { 
      try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback) 
      try AVAudioSession.sharedInstance().setActive(true) 

      soundPlayer = try AVAudioPlayer(contentsOf: url) 

      soundPlayer?.play() 
     } 
     catch let error 
     { 
      print(error.localizedDescription) 
     } 
    } 
} 

func playClick() 
{ 
    if sound == true 
    { 
     guard let url = Bundle.main.url(forResource: "click", withExtension: "mp3") 

      else { return } 

     do 
     { 
      try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback) 
      try AVAudioSession.sharedInstance().setActive(true) 

      let clickPlayer = try AVAudioPlayer(contentsOf: url) 

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

func playMusic() 
{ 
    if music == true 
    { 
     guard let url = Bundle.main.url(forResource: "ambientMusic", withExtension: "mp3") 

      else { return } 

     do 
     { 
      try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback) 
      try AVAudioSession.sharedInstance().setActive(true) 

      musicPlayer = try AVAudioPlayer(contentsOf: url) 

      musicPlayer?.play() 
      musicPlayer?.numberOfLoops = -1 
     } 
     catch let error 
     { 
      print(error.localizedDescription) 
     } 
    } 
} 
} 

異なるファイル:

@IBAction func play(_ sender: Any) 
{ 
    player().playClick() 
    performSegue(withIdentifier: "menuToIntro", sender: self) 
} 

しかし、それは何も再生されません。ただ、プリントがAQDefaultDeviceを記録(173):議論hereこのことから、入力ストリーム0 0 0x0の

答えて

1

をスキップするとXcodeのシミュレータのバグであり、あなたは環境変数OS_ACTIVITY_MODEを追加するスキーム]> [実行]> [引数を編集しようと 試してみてください、値無効。

+0

よく、私はコンソール内のログを取り除いていますが、問題は解決しません –

1

いいえ、問題が見つかりました。私の場合、破壊されないプロパティや他の変数としてプレーヤを格納する必要があります。そのためログは再生されましたが、ただちに終了しました。私はAppDelegateでAVAudioPlayersを宣言して修正しました

関連する問題