钢琴app

tag和AVFoundation

storyboard上布局:

stack view上捆绑7个按钮,更改以下三个属性:
在这里插入图片描述
调整每个按钮的tag属性:
在这里插入图片描述

把每个按钮托在一个IBAction里面
效果:
在这里插入图片描述

创建播放器:

import UIKit
import AVFoundation
   class ViewController: UIViewController {
    var player: AVAudioPlayer!; //player相当于一个CD机,里面不知道有没有CD所以是option类型
    @IBAction func soundsButton(_ sender: UIButton) {
    }
    override func viewDidLoad() {
        super.viewDidLoad()
    }
}

创建一个保存所有声音的sounds字符串数组,配合tag实现声音的调用

class ViewController: UIViewController {
    var player: AVAudioPlayer!;
    var sounds = ["note1","note2","note3","note4","note5","note6","note7"];
    @IBAction func soundsButton(_ sender: UIButton) {
        play(tag: sender.tag);//这里的sender就是被按下的Button本身
    }
    
    override func viewDidLoad() {
        super.viewDidLoad()
    }
    func play(tag:Int) {
        let url = Bundle.main.url(forResource: sounds[tag], withExtension: "wav")
        //通过Bundle.main.url找到声音的路径,相当于找到一张CD
        do{
            player = try AVAudioPlayer(contentsOf: url!);//尝试将CD放进CD机内
            player.play()//运行CD机
        }catch{
            print(error)
        }
    }

}

最后完成的代码

import UIKit
import AVFoundation


//作用域--scope--在大括号里面定义的变量,出了大括号是没法使用的
class ViewController: UIViewController{

    var player:AVAudioPlayer!//创建一个播放器(类似于CD机)
    let sounds = ["note1","note2","note3","note4","note5","note6","note7"]//全局变量
    
    //页面加载时执行
    override func viewDidLoad() {
        super.viewDidLoad()
    }

    //用户按下按钮时执行
    @IBAction func notePressed(_ sender: UIButton) {

        play(tag:sender.tag)//调用函数
        
    }
    
    //创建一个发出声音的功能函数
    func play(tag: Int){
        //找到音频文件(类似于拿出一张CD光盘)-局部变量
        let url = Bundle.main.url(forResource: sounds[tag-1], withExtension: "wav")
        
        do{
            player = try AVAudioPlayer(contentsOf: url!)//在CD机里面放入CD光盘
            player.play()//按下播放按钮
        }catch{
            print(error)//放入的CD光盘可能有损坏导致CD机读不出来,我们需要用docatch来捕捉可能的错误,防止App闪退
        }
    }
  
}


发布了6 篇原创文章 · 获赞 8 · 访问量 354

猜你喜欢

转载自blog.csdn.net/qq_44864362/article/details/100170484
今日推荐