[Ios] Creazione e riproduzione di un suono in rapido


Answers

Questo è simile ad altre risposte, ma forse un po 'più "Swifty":

// Load "mysoundname.wav"
if let soundURL = NSBundle.mainBundle().URLForResource("mysoundname", withExtension: "wav") {
    var mySound: SystemSoundID = 0
    AudioServicesCreateSystemSoundID(soundURL, &mySound)
    // Play
    AudioServicesPlaySystemSound(mySound);
}

Si noti che questo è un esempio banale che riproduce l'effetto del codice nella domanda. Dovrai assicurarti di import AudioToolbox , inoltre lo schema generale per questo tipo di codice sarebbe quello di caricare i tuoi suoni all'avvio dell'app, salvandoli in variabili di istanza SystemSoundID da qualche parte, utilizzarli in tutta l'app, quindi chiamare AudioServicesDisposeSystemSoundID quando hai finito con loro.

Question

Quindi quello che voglio fare è creare e riprodurre un suono in rapido che suonerà quando premo un pulsante, so come farlo in Objective-C, ma qualcuno sa come farlo in Swift?

Sarebbe così per Objective-C:

NSURL *soundURL = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"mysoundname" ofType:@"wav"]];
AudioServicesCreateSystemSoundID((__bridge CFURLRef)soundURL, &mySound);

E poi a giocare lo farei:

AudioServicesPlaySystemSound(Explosion);

Qualcuno sa come potrei fare questo?




Esempio di codice Swift :

import UIKit
import AudioToolbox

class ViewController: UIViewController {  

override func viewDidLoad() {
    super.viewDidLoad()
}

@IBAction func notePressed(_ sender: UIButton) {

    // Load "mysoundname.wav"

    if let soundURL = Bundle.main.url(forResource: "note1", withExtension: "wav") {
        var mySound: SystemSoundID = 0
        AudioServicesCreateSystemSoundID(soundURL as CFURL, &mySound)
    // Play

        AudioServicesPlaySystemSound(mySound);
    }
}



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()
    }
}



var mySound = NSSound(named:"Morse.aiff")
mySound.play()

"Morse.aiff" è un suono di sistema di OSX, ma se fai semplicemente clic su "named" all'interno di XCode, sarai in grado di visualizzare (nel riquadro QuickHelp) dove questa funzione sta cercando i suoni. Può trovarsi nella cartella "File di supporto"




funziona con Xcode 9.2

if let soundURL = Bundle.main.url(forResource: "note1", withExtension: "wav") {
   var mySound: SystemSoundID = 0
   AudioServicesCreateSystemSoundID(soundURL as CFURL, &mySound)
   // Play
    AudioServicesPlaySystemSound(mySound);
 }



La soluzione di Matt Gibson ha funzionato per me, ecco la versione swift 3.

if let soundURL = Bundle.main.url(forResource: "ringSound", withExtension: "aiff") {
  var mySound: SystemSoundID = 0
  AudioServicesCreateSystemSoundID(soundURL as CFURL, &mySound)
  AudioServicesPlaySystemSound(mySound);
}



questo funziona con Swift 4:

if let soundURL = Bundle.main.url(forResource: "note3", withExtension: "wav") {
                var mySound: SystemSoundID = 0
                AudioServicesCreateSystemSoundID(soundURL as CFURL, &mySound)
                // Play
                AudioServicesPlaySystemSound(mySound);
            }



Questo codice funziona per me:

class ViewController: UIViewController {

    var audioFilePathURL : NSURL!
    var soundSystemServicesId : SystemSoundID = 0

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        audioFilePathURL = NSBundle.mainBundle().URLForResource("MetalBell", withExtension: "wav")

        AudioServicesCreateSystemSoundID( audioFilePathURL, &soundSystemServicesId)


    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.


    }


    @IBAction func PlayAlertSound(sender: UIButton) {

         AudioServicesPlayAlertSound(soundSystemServicesId)
    }
}



Questo crea un SystemSoundID da un file chiamato 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
}



Links