воспроизводить звук в зависимости от количества раз, указанного в текстовом поле - PullRequest
0 голосов
/ 28 апреля 2018

Мой код ниже имеет текстовое поле и звуковую функцию. Я бы хотел, чтобы пользователь воспроизводил звуковой файл столько раз, сколько int находится в текстовом поле при нажатии кнопки.

import UIKit
import AVFoundation

class ViewController: UIViewController {
    @IBOutlet var sam : UITextField!
    var bombSoundEffect: AVAudioPlayer?

    func judo(){
        let path = Bundle.main.path(forResource: "example.mp3", ofType:nil)!
        let url = URL(fileURLWithPath: path)

        do {
            bombSoundEffect = try AVAudioPlayer(contentsOf: url)
            bombSoundEffect?.play()
        } catch {
            // couldn't load file :(
        }
    }
}

1 Ответ

0 голосов
/ 28 апреля 2018

Пожалуйста, используйте numberOfLoops: «numberOfLoops» - это количество раз, когда звук вернется в начало при достижении конца. Нулевое значение означает воспроизведение звука только один раз. Значение 1 приведет к воспроизведению звука дважды и т. Д. Любое отрицательное число будет повторяться бесконечно, пока не будет остановлено.

bombSoundEffect.numberOfLoops = 1

Вы можете сделать это другим способом с некоторой задержкой:

import UIKit
import AVFoundation

class ViewController: UIViewController {

    @IBOutlet weak var textField: UITextField!
    var player = AVAudioPlayer()
    var timer = Timer()
    var count: Int = 0

    override func viewDidLoad() {
        super.viewDidLoad()

    }

    @IBAction func playAction(_ sender: Any) {

        let alertSound = URL(fileURLWithPath: Bundle.main.path(forResource: "stereo", 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))
            self.present(alert, animated: true, completion: nil)
        }
    }
    func playWith(repeatCount: Int) {

        player.play()
        self.timer = Timer.scheduledTimer(withTimeInterval: 0.36, 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()
            }
        })
    }
}

Это именно то, что вы хотите. В этой демонстрации вы должны ввести номер входа в текстовое поле, и после этого звука будет воспроизводиться ввод номера раз.

Если вы хотите, чтобы интервал времени также был динамическим, то интервал времени также будет исходить из textField2, тогда используйте этот метод:

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()
            }
        })
    }
...