【swift1.1】分けたファイルからAVAudioPlayerの操作がやっと出来ました | 30歳から始めたプログラミング

【swift1.1】分けたファイルからAVAudioPlayerの操作がやっと出来ました

ファイル分割作業を進めている中でビューの操作は出来るようになったのですが今度は音の操作で詰まってしまいました。別ファイルにコードを記述して音再生をしたいのですがうまく行きません。

 

どうやらポイントは2つで

 

・var audioPlayer: AVAudioPlayer?をメンバ変数(プロパティ)にしておく

・呼び出す側でもクラスをプロパティとしてインスタンス化する

 

↑※とにかくメソッドの中に入れずにクラスの直下で変数化しておくイメージです。

 

●したいこと

1.音声再生の部分(AVAudioPlayer)を別ファイルにしたい。

2.1.で作ったファイルを別のファイルで呼び出してViewController(デフォルトのファイル)以外でも使用できるようにしたい。

 

そして・・・

 

音再生用の専用ファイル

import AVFoundation    //ここでは必須(他の2ファイルはいらない)

 

class soundPlay: NSObject {

    

    var audioPlayer: AVAudioPlayer? //プロパティのところに記述(※重要)

    func playsound(file: NSString){

        let SN = NSURL(fileURLWithPath:NSBundle.mainBundle().pathForResource(file, ofType: "mp3")!)

        audioPlayer = AVAudioPlayer(contentsOfURL: SN, error: nil)

        if let sound = audioPlayer {

            sound.prepareToPlay()

            sound.play()

        }  

    }

}

 

メインでない別ファイル

class subView: NSObject {

    //soundPlayクラスをインスタンス化(上で作ったやつ)

    var SP: soundPlay = soundPlay() //これをプロパティのところに記述(※重要)

    func testPlay(){

        SP.playsound("sound")  //例:sound.mp3を鳴らしたい時

    }

}

 

メインのファイル(ViewController.swift)

//subViewクラスをインスタンス化(上で作ったやつ)

var subV: subView = subView() //これをプロパティのところに記述(※重要)

override func viewDidLoad() {

        super.viewDidLoad()

        subV.testPlay()    //実行したいサブビューを記述

}

 

 

これでもう当面は憂いなくガンガンファイルの分割化作業が捗るでしょう!

 

余談ですが、キータとやらに書いてデビューしようかとも思いましたがswift1.1では余り需要が無さそうなのでやめておきました。