2017-01-27 3 views
0

私はまだ多くのコーディング経験はありませんが、まだ初心者ですが、より効率的な方法が必要であると確信しています。SWIFT 3 - AVAudioPlayer - サウンドを簡単にオーディオプレーヤーに渡す機能を記述できますか?

2歳の娘のために非常にシンプルなアプリを作成しました。そこには動物アイコンのある画面があり、各アイコンは動物の写真がある新しいページに移動します。動物を押すと、音が出ます。非常に簡単です。

アプリは、このように構成されている:15個のアイコン、それに関連付けられたビュー・コントローラを有する新たなストーリーボードにセグエ各(すなわちのViewControllerのサブクラス'S)

一人ひとりと

ホームスクリーンsoundは変数として宣言され、プレーヤは主viewControllerにあります。 - その(2例)のように>

var lionSound:AVAudioPlayer = AVAudioPlayer() 
    var cowSound:AVAudioPlayer = AVAudioPlayer() 

    let lionAudio = Bundle.main.path(forResource: "sndLion", ofType: "wav") 
      try lionSound = AVAudioPlayer(contentsOf: NSURL(fileURLWithPath: lionAudio!) as URL) 

     let cowAudio = Bundle.main.path(forResource: "sndCow", ofType: "wav") 
      try cowSound = AVAudioPlayer(contentsOf: NSURL(fileURLWithPath: cowAudio!) as URL) 

私はその後のように、サウンドを再生し、個々の動物におけるIBActionボタンのViewControllerを作成しています。今、この質問は、信じられないほど愚か表示されることがあり

lionSound.play() 
    cowSound.play() 

、私はサウンドの名前/パスとそれを再生する要求を渡すことができる関数を書くことができる方法はありますか?私はここや他のウェブサイトで研究をしてきましたが、私が探しているものが見えないので、自分の考え方が間違っていると思います。

私が読んだチュートリアルから、良いコードは繰り返してはいけないと主張されてきました。さて私はこのアプリで自分自身をたくさん繰り返すように見えるので、良い方法がありますか?

お散歩に申し訳ありません...これまでのことを読んでくれてありがとう。 さらに詳しい情報が必要な場合は、それを提供してください。

おかげ

答えて

0

フォルダのディレクトリ(例えばyourAudioFileFolder)にすべてのオーディオファイルを置きます。 アプリケーションディレクトリのprint(NSHomeDirectory())にフォルダを作成し、ログパスをコピーしてFinder - > Go - > Go to Folderに移動し、ログパスを貼り付けてgoを押します。リターン配列はオーディオのすべてのファイル名のリストになります。

func audioFileInArray() -> [String] { 
    var audioFiles = [String]() 
    let filemanager:FileManager = FileManager() 
    let files = filemanager.enumerator(atPath: NSHomeDirectory()+"/yourAudioFileFolder") 
    while let file = files?.nextObject() { 
     audioFiles.append(file as! String) 
    } 
    return audioFiles 
} 

let yourAudioFiles = audioFileInArray() 
print(yourAudioFiles) 
+0

お返事いただきましてありがとうございます。私は明日の周りに遊びを持ち、それがどのように機能するかを教えてくれるでしょう。あなたの時間を感謝します! –

0

サウンドファイル名の配列(拡張子を引いたもの)を作成します。この方法は、サウンドプレーヤーを作成することを持っているplaySound(index:Int)メソッドを作成し、ファイル名を取得し、ファイルにURLを取得するためにurl(forResource:withExtension:)を使用するためにインデックスを使用して、あなたも作成することができinit(contentsOf:)

を使用して、そのURLからオーディオプレーヤーを作成します各値がサウンドファイル名の配列へのインデックスであるint enumを取得し、playSound関数をint:playSound(sound: SoundEnum)の代わりにenumにします。それはあなたのコードをより自己記述的にするでしょう。

関連する問題