Ich möchte also schnell einen Sound erstellen und abspielen, der abgespielt wird, wenn ich einen Knopf drücke. Ich weiß, wie es in Objective-C geht, aber weiß jemand, wie man es in Swift macht?
Für Objective-C wäre es so:
NSURL *soundURL = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"mysoundname" ofType:@"wav"]];
AudioServicesCreateSystemSoundID((__bridge CFURLRef)soundURL, &mySound);
Und um es dann zu spielen, würde ich tun:
AudioServicesPlaySystemSound(Explosion);
Weiß jemand, wie ich das machen könnte?
ios
objective-c
audio
swift
Jacob Banks
quelle
quelle
var url :NSURL = NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource("mysoundname", ofType: "wav"))
Antworten:
Hier ist ein bisschen Code, den ich zu FlappySwift hinzugefügt habe und der funktioniert:
quelle
coinSound
undaudioPlayer
mitlet
statt,var
da Sie dies nicht möchten Ändern Sie diese Objekte zu einem späteren Zeitpunkt.do { (player object) } catch _ { }
da sonst ein Fehler auftritt! :)Dies ähnelt einigen anderen Antworten, ist aber vielleicht etwas "schneller":
Beachten Sie, dass dies ein triviales Beispiel ist, das die Wirkung des Codes in der Frage reproduziert. Sie müssen sicherstellen
import AudioToolbox
, dass das allgemeine Muster für diese Art von Code darin besteht, Ihre Sounds beim Start Ihrer App zu laden, sieSystemSoundID
irgendwo in Instanzvariablen zu speichern , sie in Ihrer gesamten App zu verwenden und dann aufzurufen,AudioServicesDisposeSystemSoundID
wenn Sie fertig sind mit ihnen.quelle
AudioServicesDisposeSystemSoundID(mySound)
später anrufen , um den Speicher freizugeben? Wenn du es sofort machst, wird der Sound im Grunde nicht abgespielt (wird sofort bereinigt), also habe ich es getandispatch_after
und es 10 Sekunden später aufgeräumt.Handliche Swift-Erweiterung:
Dann können Sie von überall in Ihrer App (denken
import AudioToolbox
Sie daran ) anrufenum "sound.mp3" zu spielen
quelle
DispatchQueue.global(qos: .userInitiated).async {}
.NSBundle
wurde ersetzt durchBundle
,Bundle.main.url(forResource: fileName, withExtension: fileExtension)
stattdessen verwendenDies erstellt eine
SystemSoundID
aus einer Datei namensCha-Ching.aiff
.quelle
Mit einer Klasse & AudioToolbox:
Verwendung:
quelle
quelle
Dieser Code funktioniert für mich. Verwenden Sie Try and Catch für AVAudioPlayer
quelle
"Morse.aiff" ist ein System-Sound von OSX. Wenn Sie jedoch in XCode einfach auf "named" klicken, können Sie (im QuickHelp-Bereich) anzeigen, wo diese Funktion die Sounds durchsucht. Es kann sich in Ihrem Ordner "Unterstützende Dateien" befinden
quelle
Laut dem neuen Swift 2.0 sollten wir do try catch verwenden. Der Code würde folgendermaßen aussehen:
quelle
Dies funktioniert mit Swift 4:
quelle
quelle
Lassen Sie uns einen aktuelleren Ansatz für diese Frage sehen:
quelle
Die Lösung von Matt Gibson hat bei mir funktioniert, hier ist die Swift 3-Version.
quelle
Swift 4
oder
quelle
arbeitet in
Xcode 9.2
quelle
Schnelles Codebeispiel :
quelle
Sie können dies in Swift 5.2 versuchen:
quelle
Swift 4 & iOS 12
}}
quelle
Verwenden Sie diese Funktion, um in Swift Ton zu erzeugen (Sie können diese Funktion dort verwenden, wo Sie Ton erzeugen möchten.)
Fügen Sie zuerst SpriteKit und AVFoundation Framework hinzu.
quelle
Dieser Code funktioniert für mich:
quelle
Für Swift 3 :
quelle
Swift 3 hier ist, wie ich es mache.
quelle
Könnten Sie nicht einfach
import AVFoundation
den Audio-Player (var audioPlayer : AVAudioPlayer!
) auswählen und den Sound abspielen? (let soundURL = Bundle.main.url(forResource: "sound", withExtension: "wav"
)quelle
quelle