Chcę więc stworzyć i odtworzyć dźwięk w języku Swift, który będzie odtwarzany po naciśnięciu przycisku. Wiem, jak to zrobić w Objective-C, ale czy ktoś wie, jak to zrobić w Swift?
Tak wyglądałoby w przypadku Objective-C:
NSURL *soundURL = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"mysoundname" ofType:@"wav"]];
AudioServicesCreateSystemSoundID((__bridge CFURLRef)soundURL, &mySound);
A potem, żeby to zagrać, zrobiłbym:
AudioServicesPlaySystemSound(Explosion);
Czy ktoś wie, jak mogłem to zrobić?
ios
objective-c
audio
swift
Jacob Banks
źródło
źródło
var url :NSURL = NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource("mysoundname", ofType: "wav"))
Odpowiedzi:
Oto fragment kodu, który dodałem do FlappySwift, który działa:
źródło
coinSound
iaudioPlayer
zlet
zamiast,var
ponieważ nie chcesz zmienić te obiekty w późniejszym czasie.do { (player object) } catch _ { }
albo pojawi się błąd! :)Jest to podobne do innych odpowiedzi, ale być może trochę bardziej „szybkie”:
Zauważ, że jest to trywialny przykład odtwarzający efekt kodu w pytaniu. Musisz się upewnić
import AudioToolbox
, a ogólny wzorzec dla tego rodzaju kodu polegałby na ładowaniu dźwięków podczas uruchamiania aplikacji, zapisywaniu ichSystemSoundID
gdzieś w zmiennych instancji, używaniu ich w całej aplikacji, a następnie wywołaniu,AudioServicesDisposeSystemSoundID
gdy skończysz z nimi.źródło
AudioServicesDisposeSystemSoundID(mySound)
później zadzwonić, aby zwolnić pamięć? jeśli zrobisz to od razu, dźwięk w zasadzie nie jest odtwarzany (jest natychmiast czyszczony), więc zrobiłemdispatch_after
i wyczyściłem go 10 sekund później.Poręczne rozszerzenie Swift:
Następnie
import AudioToolbox
możesz dzwonić z dowolnego miejsca w aplikacji (pamiętaj o tym )aby odtworzyć „sound.mp3”
źródło
DispatchQueue.global(qos: .userInitiated).async {}
.NSBundle
został zastąpiony przezBundle
, użyjBundle.main.url(forResource: fileName, withExtension: fileExtension)
zamiast tegoTworzy to
SystemSoundID
z pliku o nazwieCha-Ching.aiff
.źródło
Z klasą i AudioToolbox:
Stosowanie:
źródło
źródło
Ten kod działa dla mnie. Użyj Try and Catch dla AVAudioPlayer
źródło
„Morse.aiff” to dźwięk systemowy OSX, ale jeśli po prostu klikniesz „named” w XCode, będziesz mógł zobaczyć (w panelu QuickHelp), gdzie ta funkcja wyszukuje dźwięki. Może znajdować się w folderze „Pliki pomocnicze”
źródło
Zgodnie z nowym Swiftem 2.0 powinniśmy używać do try catch. Kod wyglądałby tak:
źródło
to działa ze Swift 4:
źródło
źródło
Zobaczmy bardziej aktualne podejście do tego pytania:
źródło
Rozwiązanie Matta Gibsona zadziałało dla mnie, oto wersja Swift 3.
źródło
Szybki 4
lub
źródło
pracuje w
Xcode 9.2
źródło
Przykład szybkiego kodu :
źródło
Możesz spróbować tego w Swift 5.2:
źródło
swift 4 i iOS 12
}
źródło
Użyj tej funkcji, aby uzyskać dźwięk w języku Swift (możesz użyć tej funkcji, jeśli chcesz uzyskać dźwięk).
Najpierw dodaj SpriteKit i AVFoundation Framework.
źródło
Ten kod działa dla mnie:
źródło
Dla Swift 3 :
źródło
Swift 3 Oto jak to zrobić.
źródło
Nie mógłbyś po prostu
import AVFoundation
wybrać odtwarzacza audio (var audioPlayer : AVAudioPlayer!
) i odtworzyć dźwięk? (let soundURL = Bundle.main.url(forResource: "sound", withExtension: "wav"
)źródło
źródło