ios Creazione e riproduzione di un suono in rapido





9 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.

ios objective-c audio swift

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?




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
}



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"




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



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



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



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



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



Related