изменить звуковой файл для цикла while в swift4 - PullRequest
0 голосов
/ 12 мая 2018

Мой код имеет 2 текстовых поля.Один из них указывает, сколько раз будет воспроизводиться звук, а другой - какова длительность интервала между звуками.Я бы хотел, чтобы звук менялся через раз.Так что сейчас звуки просто играют аааааааа.Я хочу, чтобы он играл в Абабабабабу

import UIKit
import AVFoundation

class ViewController: UIViewController {
    @IBOutlet weak var whiste: UIImageView!
    @IBOutlet weak var textField: UITextField!
    @IBOutlet weak var textfield2: UITextField!
    var arrPlayer: [AVAudioPlayer] = []
    var player = AVAudioPlayer()
    var timer = Timer()
    var count: Int = 0
    var judo = 0

    @IBAction func i() {
        let alertSound = URL(fileURLWithPath: Bundle.main.path(forResource: "regularWHistle", ofType: "wav")!)

        do {
            player = try AVAudioPlayer(contentsOf: alertSound)
        } catch {
            print("No sound found by URL")
        }

        if let textValue = self.textField.text, let inputNumber = Int(textValue), inputNumber > 0 {
            playWith(repeatCount: inputNumber)
        } else {
            let alert = UIAlertController(title: "Alert", message: "Please enter number.", preferredStyle: .alert)
            alert.addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.cancel, handler: nil))

        }}

    func playWith(repeatCount: Int) {
        var timeInterval = 0.36
        if let textValue = self.textfield2.text, let inputNumber = Double(textValue), inputNumber > 0 {
            timeInterval = inputNumber
        }

        player.play()
        self.timer = Timer.scheduledTimer(withTimeInterval: timeInterval, repeats: true, block: { (timer) in
            self.count += 1
            print(self.count)
            if self.count != repeatCount {
                self.player.play()
            } else {
                self.count  = 0
                self.player.stop()
                self.timer.invalidate()
            }
        })
    }
}

1 Ответ

0 голосов
/ 12 мая 2018

Поскольку вы хотите чередовать звук при каждом воспроизведении внутри playWith, вам необходимо иметь два аудиопроигрывателя, по одному для каждого звука.

Затем чередуйте то, что вы проигрываете, исходя из количества.

class ViewController: UIViewController {
    @IBOutlet weak var whiste: UIImageView!
    @IBOutlet weak var textField: UITextField!
    @IBOutlet weak var textfield2: UITextField!
    var arrPlayer: [AVAudioPlayer] = []
    var playerA: AVAudioPlayer!
    var playerB: AVAudioPlayer!
    var judo = 0

    @IBAction func i() {
        let alertSoundA = Bundle.main.url(forResource: "regularWHistle", withExtension: "wav")!
        let alertSoundB = Bundle.main.url(forResource: "otherWHistle", withExtension: "wav")!

        do {
            playerA = try AVAudioPlayer(contentsOf: alertSoundA)
            playerB = try AVAudioPlayer(contentsOf: alertSoundB)
        } catch {
            print("No sound found by URL")
        }

        if let textValue = self.textField.text, let inputNumber = Int(textValue), inputNumber > 0 {
            playWith(repeatCount: inputNumber)
        } else {
            let alert = UIAlertController(title: "Alert", message: "Please enter number.", preferredStyle: .alert)
            alert.addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.cancel, handler: nil))

        }}

    func playWith(repeatCount: Int) {
        var timeInterval = 0.36
        if let textValue = self.textfield2.text, let inputNumber = Double(textValue), inputNumber > 0 {
            timeInterval = inputNumber
        }

        var count = 0
        let timer = Timer.scheduledTimer(withTimeInterval: timeInterval, repeats: true, block: { (timer) in
            print(count)
            if count != repeatCount {
                let player = count % 2 == 0 ? playerA : playerB
                player.play()
                count += 1
            } else {
                timer.invalidate()
            }
        })
        timer.fire()
    }
}
...