2016-05-19 11 views
2

複数のボタンを追加して専用のサウンドを再生しようとしています。ボタン1はサウンド1を再生し、ボタン2はサウンド2を再生し、ボタン3はサウンド3を再生します。私は以下のコードを使用して試しました:複数のサウンドをすばやく再生する

import UIKit 
import AVFoundation 

class ViewController: UIViewController { 

var PlaySound = NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource("tea-pot-whistle", ofType: "wav")!) 
var Sound1audioPlayer = AVAudioPlayer() 
var pianoSound = NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource("wind_1234", ofType: "wav")!) 
var Sound2audioPlayer = AVAudioPlayer() 
var pianoSound2 = NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource("Evil_Laugh", ofType: "wav")!) 
var Sound3audioPlayer = AVAudioPlayer() 

@IBOutlet weak var Btn1 : UIButton! 
@IBOutlet weak var Btn2 : UIButton! 
@IBOutlet weak var Btn3 : UIButton! 

@IBAction func likedThis(sender: UIButton) { 

    if (Btn1.tag == 1){ 
     Sound1audioPlayer.play() 
    } 
    if(Btn2.tag == 2){ 
     Sound2audioPlayer.play() 
    } 
    if (Btn3.tag == 3){ 
     Sound3audioPlayer.play() 
    } 



    /* 
    CFBundleRef mainBundle = CFBundleGetMainBundle(); 
    CFURLRef soundFileURLRef; 
    soundFileURLRef = CFBundleCopyResourceURL(mainBundle, (CFStringRef) @"givewater", CFSTR ("wav"), NULL); 
    UInt32 SoundID; 
    AudioServicesCreateSystemSoundID(soundFileURLRef, &SoundID); 
    AudioServicesPlaySystemSound(SoundID);*/ 

} 


override func viewDidLoad() { 
    super.viewDidLoad() 
    // Do any additional setup after loading the view, typically from a nib. 
    Btn1.tag = 1; 
    Btn2.tag = 2; 
    Btn3.tag = 3; 

    Sound1audioPlayer = try! AVAudioPlayer(contentsOfURL: pianoSound) 
    Sound2audioPlayer = try! AVAudioPlayer(contentsOfURL: PlaySound) 
    Sound3audioPlayer = try! AVAudioPlayer(contentsOfURL: pianoSound2) 

    Sound1audioPlayer.prepareToPlay() 
    Sound2audioPlayer.prepareToPlay() 
    Sound3audioPlayer.prepareToPlay() 

} 

override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
    // Dispose of any resources that can be recreated. 
} 


} 

このコードはサウンドを再生しますが、どのボタンが押されたかによって3つすべてを再生します。私はすぐに新しいです、客観的なcで私は各ボタンのために各IBActionを書いていました。次に、すべてのボタンを1つのアクションに結びつけるようにコードを修正し、タグを使用してどのボタンが押されたかを判断しました。私はこのタイプの統合を迅速に行うことができますか?どんな助けでも大歓迎です。

+1

を助ける

・ホープ音。あなたのコードをよりコンパクトにする – Paulw11

+0

あなたの質問を少しはっきりさせてください、私はそれを2度読んで、あなたがするべきことを言うように聞こえますが、明らかにそうではありません。特にこの部分は: "このコードは音を演奏しますが、押されたボタンに応じて3つすべてを演奏します。" – CherryDT

+0

申し訳ありませんが、3つのボタンのいずれかが押されたときに、「お気に入り」機能のすべてのサウンドが同時に再生されることを意味しました。以下のライオンが提供した答えは注目されました。 – JoeShmoe

答えて

1

は、あなたがsender.tagを使用する必要があります

if (sender.tag == 1){ 
    Sound1audioPlayer.play() 
} 
if(sender.tag == 2){ 
    Sound2audioPlayer.play() 
} 
if (sender.tag == 3){ 
    Sound3audioPlayer.play() 
} 

を使用して、

if (Btn1.tag == 1){ 
    Sound1audioPlayer.play() 
} 
if(Btn2.tag == 2){ 
    Sound2audioPlayer.play() 
} 
if (Btn3.tag == 3){ 
    Sound3audioPlayer.play() 
} 

を交換します! btn.tagをチェックすると、すべての条件が真となります!それはあなたがあなたのif文で確認する必要がありますが、本当にあなたのための配列を使用する必要がありますbuttonタグであるので、これは、 `sender`がタップされたボタンで、あなたの関数では:)

+0

ありがとうございました!私は質問がありますPaulw11は、私は私が3つの音をこの関数によって呼び出される配列にどのように置くだろう上に持っているものに基づいて配列にすべての私の音を入れなければならないと言った?申し訳ありません、大声で考えてみましょう。ご協力いただきありがとうございます。 – JoeShmoe

+0

あなたは大歓迎です:)あなたが求めているものは得られません!彼がそれを提案すれば、パウロからそれを知る方が良いでしょう。 – Lion

関連する問題