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