Chciałbym odtworzyć dźwięk za pomocą Swift.
Mój kod działał w Swift 1.0, ale teraz nie działa już w Swift 2 lub nowszym.
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
źródło
źródło
Odpowiedzi:
Najkorzystniej możesz użyć AVFoundation . Zawiera wszystkie niezbędne elementy do pracy z mediami audiowizualnymi.
Swift 2.3
Szybki 3
Swift 4 (kompatybilny z iOS 13)
W przypadku krótkich plików dźwiękowych możesz wybrać nieskompresowane formaty audio, na przykład
.wav
ponieważ mają one najlepszą jakość i niski wpływ na procesor. W przypadku krótkich plików dźwiękowych większe zużycie miejsca na dysku nie powinno być wielkim problemem. Im dłużej pliki są, można przejść do skompresowanego formatu takiego jak.mp3
itp pp. Sprawdź kompatybilnych formatów audio zCoreAudio
.Ciekawostka: istnieją zgrabne małe biblioteki, które sprawiają, że odtwarzanie dźwięków jest jeszcze łatwiejsze. :)
Na przykład: SwiftySound
źródło
bgMusic = AVAudioPlayer(contentsOfURL: bgMusicURL, fileTypeHint: nil)
zdo { 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 }
wydaje mi się dodatkową pracą, dlaczego nie po prostulet player = try AVAudioPlayer(contentsOf: url)
?Dla Swift 3 :
Najlepszą praktyką w przypadku zasobów lokalnych jest umieszczenie ich w środku
assets.xcassets
i załadowanie pliku w następujący sposób:źródło
do
chociaż mam pewne problemy ze zrozumieniem, co dzieje się w bloku. oczywiścieplayer!.play()
jest oczywiste. Ale jaki jest cel metodsetCategory
isetActive
?AVAudioSessionCategoryPlayback
tosetCategory
, że dźwięk będzie zawsze odtwarzany, nawet jeśli telefon jest w trybie blokady lub w trybie cichym.setActive
to tak, jakby powiedzieć systemowi, że Twoja aplikacja jest gotowa do odtwarzania dźwiękuiOS 12 - Xcode 10 beta 6 - Swift 4.2.0
Użyj tylko 1 IBAction i skieruj wszystkie przyciski na tę 1 akcję.
źródło
Jeśli kod nie generuje żadnego błędu, ale nie słychać dźwięku - utwórz odtwarzacz jako instancję:
U mnie pierwsze rozwiązanie zadziałało, gdy zrobiłem tę zmianę :)
źródło
player
tego poza zakresem. W przeciwnym razieplayer
zostaje zdelokalizowany i dlatego nie może odtwarzać żadnego dźwięku, ponieważ już nie istnieje.static
Swift 4, 4,2 i 5
Odtwórz dźwięk z adresu URL i z projektu (plik lokalny)
źródło
Szybki 3
źródło
Najpierw zaimportuj te biblioteki
ustawić delegata w ten sposób
napisz ten ładny kod na akcji przycisku lub innej akcji:
100% pracujący w moim projekcie i sprawdzony
źródło
AudioToolbox
w tym miejscu.Testowane z Swift 4 i iOS 12:
źródło
Swift 4 (kompatybilny z iOS 12)
źródło
The operation couldn’t be completed. (OSStatus error 1954115647.)
. Szukałem wszędzie i nie mogę znaleźć rozwiązania. Może zadać pytanie na ten temat.Styl gry:
plik Sfx.swift
Wszędzie w kodzie
źródło
To jest podstawowy kod do wyszukiwania i odtwarzania pliku audio w Swift.
Dodaj plik audio do Xcode i dodaj poniższy kod.
źródło
źródło
działa w najnowszej wersji swift 4. ButtonTag byłby tagiem na przycisku w Twoim interfejsie. Notatki znajdują się w folderze w folderze równoległym do Main.storyboard. Każda nuta nosi nazwę note1, note2 itd. ButtonTag podaje liczbę 1, 2 itd. Z klikniętego przycisku, który jest przekazywany jako parametr
źródło
import AVFoundation
import AudioToolbox
public final class MP3Player: NSObject {
}
// Aby wywołać tę funkcję
MP3Player.shared.playLocalFile (nazwa: „JungleBook”)
źródło
źródło