Mettre du son sur un bouton

Voici mon bout de code qui coince :
func audioPlay(audioName: String){

    soundPath = Bundle.main.bundlePath + "/" + audioName + ".aif"
    let fileUrl = URL(fileURLWithPath: soundPath)
    let audioURL: AVURLAsset = AVURLAsset(url: fileUrl)
        do{
        audioPlayer = try AVAudioPlayer(contentsOf: fileUrl)
        audioPlayer.prepareToPlay()
        audioPlayer.play()
        }
        catch{
                print(error)
        }
   
}

Pour une raison qui m’échappe, l’audioPlayer bute sur une erreur Error Domain=NSOSStatusErrorDomain Code=2003334207 « (null) » que je ne comprend pas, étant donné que la constitution de l’url est bonne, que l’audiosession a été préparée au niveau de l’AppDelegate, que les capacités audio ont été cochées dans le projet… C’est quoi le truc qui m’échappe ?

Ringard. Laisser tomber le passage par le path et aller directement à l’url :
soundPath = Bundle.main.url(forResource: audioName, withExtension: « aif »)
marche beaucoup mieux.

1 « J'aime »

Cool content que tu aies trouvé Francois :+1: C’est toujours compliqué de s’y retrouver dans les fichiers du bundle (avec les locales et cie) du coup il vaut toujours mieux passer par les fonctions spéciales qui retournent un chemin tout prêt ; comme la fonction Bundle.main.url(forResource:"", withExtension: "")

Oui, mais depuis Swift 4.2, la méthode Bundle.main.path(forResource: «  », ofType:"") ne marche plus.

Ça n’a pas l’air d’être très signalé dans les changements qui sont publiés à chaque version ou alors ça m’a échappé, c’est toujours présent dans la complétion automatique de Xcode, peut-être pour la rétrocompatibilité, je ne sais pas ?

Mais enfin Xcode sait normalement, dans le projet, en quoi on code, et du coup ça induit en erreur, raison pour laquelle j’ai cherché ce bête microscopique bout de code salvateur durant une semaine ; alors, si ça peut éviter l’erreur à quelqu’un qui voudrait mettre du son dans son appli, voilà. J’ai d’ailleurs bien cru que je n’y arriverais pas, c’est pourquoi en désespoir de cause suis-je venu poser la question sur le forum, mais finalement, ouf! j’ai trouvé — cette fonction qui était sous mon nez depuis le début et que je m’acharnais à ne pas voir à force de regarder ce que faisaient les autres sur Stackoverflow.

1 « J'aime »

Hello,

Le « oftype » m’a posé problème aussi. A la fin je fais comme ceci …

let path_1 = Bundle.main.path(forResource: "harp.wav", ofType:nil)!

MARC