Быстрые звуки не воспроизводят файл wav

#swift #audio #swift5

#быстрый #Аудио #swift5

Вопрос:

Я использую стручок какао Swifty Sounds, и я не могу воспроизвести звук. Вот функция, которую я вызываю для воспроизведения звука:

     func playSound() {
//        Sound.play(file: "ding.wav")
        
        duckVolume()
        guard let fileUrl = Bundle.main.path(forResource: "ding", ofType: "wav") else {
            print("cannot find file")
            return
        }
        guard let sound = Sound(url: URL(fileURLWithPath: fileUrl)) else {
            print("cant play sound")
            return
        }
        print("playing sound")
        
        Sound.enabled = true
        Sound.category = .playAndRecord
        sound.play()
        
        DispatchQueue.main.asyncAfter(deadline: .now()   2.0) {
            self.UnduckVolume()
        }
    }
 

Консоль выводит сообщение «воспроизведение звука», которое указывает на то, что найден правильный файл, но звук не воспроизводится. Интересно, что первая строка функции, которая закомментирована, не имеет проблем с воспроизведением звука. Однако использование этой функции лишает меня возможности управлять громкостью, и поэтому я не могу ее использовать.

Любая помощь будет признательна. Спасибо!

Комментарии:

1. в этой строке есть необязательный sound?.play() параметр . Убедитесь, что значение optional не равно нулю, например guard let sound = sound else { print("no sound") }; sound.play()

2. Спасибо за ответ, Кирилл, я обновил исходный вопрос, убедившись, что звуковой объект не равен нулю. Тем не менее, я получаю тот же результат: «воспроизведение звука» печатается, но звук не воспроизводится.

Ответ №1:

Вам нужно объявить Sound внешнюю вызывающую функцию (я не знаю, почему это так, помогите мне своими комментариями). Следующий код должен работать:

 class AnyClass {
    private dogSound : Sound? // declare here
    private catSound : Sound? // declare here

    private func getUrlFromFileName(fileName: String) -> URL {
        let path = Bundle.main.path(forResource: fileName, ofType:nil)!
        return URL(fileURLWithPath: path)
    }
    
    func playDogSound() {
        dogSound = Sound(url: getUrlFromFileName(fileName: "dog.mp3"))
        dogSound?.play()
    }

    func playCatSound() {
        catSound = Sound(url: getUrlFromFileName(fileName: "cat.mp3"))
        catSound?.play()
    }
}