ios - 单击 AVAudioplayer Swift Xcode 中的按钮时自动更改文件(url、路径)

标签 ios swift audio path

每个屏幕 3 个图像,每个图像都有不同的声音文件“apple.wav”、“orange.wav”和“ball.wav”,单击时将播放。

我有 AVAudioPlayer 代码,但我正在尝试简化它,所以我没有为每张照片设置单独的函数 playSoundOrange(), playSoundofApple() , 等等

尝试使用相同的功能,但在按钮操作中输入文件名。

按钮代码:

@IBAction func OrangeButton(_ sender: UIButton) {
    print("pressed OrangeButton")
    playSoundFile(orange.wav) //having it like this would be ideal. 
}

我正在尝试修改当前函数,因此我可以为每个按钮使用代码 playSoundFile(orange.wav),只需将参数更改为 (apple.wav) 或(球.wav)。

var player : AVAudioPlayer?
func playSoundFile(){
    let path = Bundle.main.path(forResource: "*orange*",   ofType:"*wav*")!
    let url = URL(fileURLWithPath: path)

    do {
        let sound = try AVAudioPlayer(contentsOf: url)
        self.player = sound
        sound.numberOfLoops = 0
        sound.prepareToPlay()
        sound.play()
    } catch {
        print("error loading file")
        // couldn't load file :(
    }
}

非常感谢您的帮助。

最佳答案

更新您的 playSoundFile 方法以获取声音名称:

func playSoundFile(_ soundName: String) {
    let url = Bundle.main.url(forResource: soundName, withExtension: "wav")!

    do {
        let sound = try AVAudioPlayer(contentsOf: url)
        self.player = sound
        sound.numberOfLoops = 0
        sound.prepareToPlay()
        sound.play()
    } catch {
        print("error loading file")
        // couldn't load file :(
    }
}

现在您只需要一个可用于所有三个按钮的按钮操作。

@IBAction func buttonPressed(_ sender: UIButton) {
}

将该一项操作分配给所有三个按钮。

因为每个按钮都有一个导出,将 sender 属性与每个导出进行比较以确定要使用的文件名:

@IBAction func buttonPressed(_ sender: UIButton) {
    var soundName: String? = nil
    if sender == orangeButton {
        soundName = "orange"
    } else if sender == appleButton {
        soundName = "apple"
    } else if sender == ballButton {
        soundName = "ball"
    }

    if let soundName = soundName {
        playSoundFile(soundName)
    }
}

orangeButtonappleButtonballButton 替换为您商店的实际名称。

关于ios - 单击 AVAudioplayer Swift Xcode 中的按钮时自动更改文件(url、路径),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48133344/

相关文章:

ios - 干净的URL与查询的字符串-来 self 的iOS客户端的Web服务请求

ios - Objective-C 中的链表问题

ios - IGListKit:获取当前可见的单元格索引

ios - Realm Swift 模型是否分开?

Android Soundpool - 循环播放异常

ios - 类内的默认值

ios - -[UITableView _endCellAnimationsWithContext : 中的断言失败

ios - 滚动时 UISwitch 在 Collection View 单元格中复制/奇怪的覆盖

javascript - 单击按钮后如何从iframe启动音频流

c++ - 在C++中与alsa-lib同时播放 '.wav'音频的简单示例?