2017-03-23 10 views
0

私は、変数を持つようにしたいので、私はスウィフト3でオーディオを再生する方法はスウィフト3:変数の文字列に基づいて音声を再生

do { 
    audioPlayer = try AVAudioPlayer(contentsOf: URL.init(fileURLWithPath: Bundle.main.path(forResource: "name", ofType: "mp3")!)) 
    audioPlayer.prepareToPlay() 
    audioPlayer.play() 
} 
catch { 
print(error) 
} 

ではなく、「名前」のセット文字列になるであろうことがわかり文字列と呼ばれ、異なるファイル名に対応する100の異なる文字列のうちの1つになります。 Swiftは単に "名前"の代わりに文字列を置くことでこれを許可していません。

答えて

0

これが動作しない理由を私は見ていない:

とにかく
var audioPlayer: AVAudioPlayer! 
let string = "name" 
if let path = Bundle.main.path(forResource: string, ofType: "mp3") { 
    let url = URL(fileURLWithPath: path) 
    do { 
     audioPlayer = try AVAudioPlayer(contentsOf: url) 
     audioPlayer.prepareToPlay() 
     audioPlayer.play() 
    } 
    catch { 
     print(error) 
    } 
} 

、あなたの文字列変数の文字列を呼び出すと、おそらくベストプラクティスではありません。おそらく、あなたはそれを "resource"、 "resourceName"または "fileName"と呼ぶべきでしょうか?

+0

変わった。あなたはまったく正しい。なぜ私は前にトラブルがあったのか分かりませんが、 – EmperorPalpatine

+1

あなたは正しいと私の答えをマークできますか? :) – xxtesaxx

+0

@EmperorPalpatine「AVAudioPlayer」が保持されていないため、問題が発生している可能性があります。 – staticVoidMan

0

私はちょうどこのような関数を使い、名前とサウンドのタイプを渡します。

func playSound(name: String, type: String) { 
    var Sound: AVAudioPlayer? = { 
     let url = URL(fileURLWithPath: Bundle.main.path(forResource: "\(name)", ofType: "\(type)")!) 
     do { 
      let player = try AVAudioPlayer(contentsOf: url, fileTypeHint: nil) 
      return player 
     } 
     catch {return nil} }() 
} 

ホープ、このことができます

playSound(name: "The Sound", type: "mp4") 

のようにそれを呼び出します! :) もしそうなら、上に上がる:D

関連する問題