Ich möchte einen Sound mit Swift spielen.
Mein Code funktionierte in Swift 1.0, aber jetzt funktioniert er in Swift 2 oder neuer nicht mehr.
override func viewDidLoad() {
super.viewDidLoad()
let url:NSURL = NSBundle.mainBundle().URLForResource("soundName", withExtension: "mp3")!
do {
player = try AVAudioPlayer(contentsOfURL: url, fileTypeHint: nil)
} catch _{
return
}
bgMusic.numberOfLoops = 1
bgMusic.prepareToPlay()
if (Data.backgroundMenuPlayed == 0){
player.play()
Data.backgroundMenuPlayed = 1
}
}
ios
swift
avfoundation
Michel Kansou
quelle
quelle
Antworten:
Am besten bevorzugen Sie die Verwendung von AVFoundation . Es bietet alle wichtigen Informationen für die Arbeit mit audiovisuellen Medien.
Swift 2.3
Swift 3
Swift 4 (iOS 13 kompatibel)
Für kurze Audiodateien sollten Sie sich für nicht komprimierte Audioformate entscheiden, z. B.
.wav
weil sie die beste Qualität und eine geringe CPU-Auswirkung haben. Der höhere Speicherplatzverbrauch sollte für kurze Sounddateien keine große Rolle spielen. Je länger die Dateien sind, desto mehr möchten Sie möglicherweise ein komprimiertes Format wie z. B..mp3
S. wählen. Überprüfen Sie die kompatiblen Audioformate vonCoreAudio
.Wissenswertes: Es gibt nette kleine Bibliotheken, die das Abspielen von Sounds noch einfacher machen. :)
Zum Beispiel: SwiftySound
quelle
bgMusic = AVAudioPlayer(contentsOfURL: bgMusicURL, fileTypeHint: nil)
durchdo { bgMusic = try AVAudioPlayer(contentsOfURL: bgMusicURL, fileTypeHint: nil) } catch _ { return \\ if it doesn't exist, don't play it}
player = try AVAudioPlayer(contentsOf: url) guard let player = player else { return }
scheint mir zusätzliche Arbeit zu sein, warum nicht einfachlet player = try AVAudioPlayer(contentsOf: url)
?Für Swift 3 :
Die beste Vorgehensweise für lokale Assets besteht darin, sie einzulegen
assets.xcassets
und die Datei wie folgt zu laden:quelle
do
Block passiert . ist offensichtlichplayer!.play()
selbsterklärend. Aber was ist der Zweck dersetCategory
undsetActive
Methoden?AVAudioSessionCategoryPlayback
zusetCategory
, wird dafür sorgen , es das Audio immer noch gespielt wird , obwohl Telefon im Sperrbildschirm oder im Silent - Modus ist.setActive
ist wie dem System zu sagen, dass Ihre App bereit ist, Audio abzuspieleniOS 12 - Xcode 10 Beta 6 - Swift 4.2
Verwenden Sie nur 1 IBAction und zeigen Sie mit allen Schaltflächen auf diese 1 Aktion.
quelle
Wenn der Code keinen Fehler generiert, Sie jedoch keinen Ton hören, erstellen Sie den Player als Instanz:
Für mich hat die erste Lösung funktioniert, als ich diese Änderung vorgenommen habe :)
quelle
player
in den Außenbereich stellen. Andernfallsplayer
wird delokalisiert und kann daher keinen Ton wiedergeben, da dieser nicht mehr vorhanden ist.static
Swift 4, 4.2 und 5
Spielen Sie Audio von der URL und von Ihrem Projekt ab (lokale Datei)
quelle
Swift 3
quelle
Importieren Sie zuerst diese Bibliotheken
Setze den Delegaten so
Schreiben Sie diesen hübschen Code für eine Tastenaktion oder eine Aktion:
100% arbeiten in meinem Projekt und getestet
quelle
AudioToolbox
dieser Stelle muss nicht importiert werden .Getestet mit Swift 4 und iOS 12:
quelle
Swift 4 (iOS 12 kompatibel)
quelle
The operation couldn’t be completed. (OSStatus error 1954115647.)
. Ich habe überall gesucht und kann keine Lösung finden. Könnte eine Frage dazu posten.Spielstil:
Datei Sfx.swift
Überall im Code
quelle
Dies ist der grundlegende Code zum Suchen und Abspielen einer Audiodatei in Swift.
Fügen Sie Ihre Audiodatei zu Ihrem Xcode hinzu und fügen Sie den folgenden Code hinzu.
quelle
quelle
funktioniert in Swift 4 neueste Version. ButtonTag wäre ein Tag auf einer Schaltfläche auf Ihrer Benutzeroberfläche. Notizen befinden sich in einem Ordner in einem Ordner parallel zu Main.storyboard. Jede Note wird als Note1, Note2 usw. bezeichnet. ButtonTag gibt die Nummer 1, 2 usw. über die angeklickte Schaltfläche an, die als Parameter übergeben wird
quelle
AVFoundation importieren
AudioToolbox importieren
öffentliche letzte Klasse MP3Player: NSObject {
}}
// Um diese Funktion aufzurufen
MP3Player.shared.playLocalFile (Name: "JungleBook")
quelle
quelle