그래서 제가하고 싶은 것은 버튼을 눌렀을 때 재생되는 사운드를 신속하게 생성하고 재생하는 것입니다. Objective-C에서하는 방법을 알고 있지만 Swift에서하는 방법을 아는 사람이 있습니까?
Objective-C의 경우 다음과 같습니다.
NSURL *soundURL = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"mysoundname" ofType:@"wav"]];
AudioServicesCreateSystemSoundID((__bridge CFURLRef)soundURL, &mySound);
그리고 그것을 재생하려면 다음을 수행합니다.
AudioServicesPlaySystemSound(Explosion);
내가 어떻게 할 수 있는지 아는 사람 있나요?
답변
다음은 작동하는 FlappySwift에 추가 한 코드입니다.
import SpriteKit
import AVFoundation
class GameScene: SKScene {
// Grab the path, make sure to add it to your project!
var coinSound = NSURL(fileURLWithPath: Bundle.main.path(forResource: "coin", ofType: "wav")!)
var audioPlayer = AVAudioPlayer()
// Initial setup
override func didMoveToView(view: SKView) {
audioPlayer = AVAudioPlayer(contentsOfURL: coinSound, error: nil)
audioPlayer.prepareToPlay()
}
// Trigger the sound effect when the player grabs the coin
func didBeginContact(contact: SKPhysicsContact!) {
audioPlayer.play()
}
}
답변
이것은 다른 답변과 비슷하지만 약간 더 “Swifty”입니다.
// Load "mysoundname.wav"
if let soundURL = Bundle.main.url(forResource: "mysoundname", withExtension: "wav") {
var mySound: SystemSoundID = 0
AudioServicesCreateSystemSoundID(soundURL as CFURL, &mySound)
// Play
AudioServicesPlaySystemSound(mySound);
}
이것은 질문에있는 코드의 효과를 재현하는 사소한 예입니다. 을 확인해야합니다 import AudioToolbox
. 이러한 종류의 코드에 대한 일반적인 패턴은 앱이 시작될 때 사운드를로드하고 SystemSoundID
인스턴스 변수에 저장하고 앱 전체에서 사용한 다음 AudioServicesDisposeSystemSoundID
완료되면 호출하는 것입니다. 그들과 함께.
답변
편리한 Swift 확장 :
import AudioToolbox
extension SystemSoundID {
static func playFileNamed(fileName: String, withExtenstion fileExtension: String) {
var sound: SystemSoundID = 0
if let soundURL = NSBundle.mainBundle().URLForResource(fileName, withExtension: fileExtension) {
AudioServicesCreateSystemSoundID(soundURL, &sound)
AudioServicesPlaySystemSound(sound)
}
}
}
그런 다음 앱의 어느 곳에서나 (기억하세요 import AudioToolbox
)
SystemSoundID.playFileNamed("sound", withExtenstion: "mp3")
“sound.mp3″재생
답변
이것은 SystemSoundID
라는 파일에서 생성 됩니다 Cha-Ching.aiff
.
import AudioToolbox
let chaChingSound: SystemSoundID = createChaChingSound()
class CashRegisterViewController: UIViewController {
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(animated)
AudioServicesPlaySystemSound(chaChingSound)
}
}
func createChaChingSound() -> SystemSoundID {
var soundID: SystemSoundID = 0
let soundURL = CFBundleCopyResourceURL(CFBundleGetMainBundle(), "Cha-Ching", "aiff", nil)
AudioServicesCreateSystemSoundID(soundURL, &soundID)
CFRelease(soundURL)
return soundID
}
답변
클래스 및 AudioToolbox 사용 :
import AudioToolbox
class Sound {
var soundEffect: SystemSoundID = 0
init(name: String, type: String) {
let path = NSBundle.mainBundle().pathForResource(name, ofType: type)!
let pathURL = NSURL(fileURLWithPath: path)
AudioServicesCreateSystemSoundID(pathURL as CFURLRef, &soundEffect)
}
func play() {
AudioServicesPlaySystemSound(soundEffect)
}
}
용법:
testSound = Sound(name: "test", type: "caf")
testSound.play()
답변
import AVFoundation
var audioPlayer = AVAudioPlayer()
class GameScene: SKScene {
override func didMoveToView(view: SKView) {
let soundURL = NSBundle.mainBundle().URLForResource("04", withExtension: "mp3")
audioPlayer = AVAudioPlayer(contentsOfURL: soundURL, error: nil)
audioPlayer.play()
}
}
답변
이 코드는 저에게 효과적입니다. AVAudioPlayer에 Try and Catch 사용
import UIKit
import AVFoundation
class ViewController: UIViewController {
//Make sure that sound file is present in your Project.
var CatSound = NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource("Meow-sounds.mp3", ofType: "mp3")!)
var audioPlayer = AVAudioPlayer()
override func viewDidLoad() {
super.viewDidLoad()
do {
audioPlayer = try AVAudioPlayer(contentsOfURL: CatSound)
audioPlayer.prepareToPlay()
} catch {
print("Problem in getting File")
}
// Do any additional setup after loading the view, typically from a nib.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
@IBAction func button1Action(sender: AnyObject) {
audioPlayer.play()
}
}