swift स्विफ्ट 2 के साथ आईओएस ऐप्लिकेशन में ऑडियो का उपयोग कैसे करें?




avfoundation swift2 (3)

मैंने स्प्राइटकिट और स्विफ्ट का उपयोग करते हुए Xcode 7 बीटा पर एक गेम बनाया, मैंने इसमें ऑडियो डालने की कोशिश की लेकिन यह सही नहीं है क्योंकि Xcode को 3 त्रुटियां मिलीं, मैं शुरुआत कर रहा हूं और मुझे नहीं पता कि उन्हें कैसे तय करना है।

import AVFoundation

    var audioPlayer = AVAudioPlayer()


    func playAudio() {
        // Set the sound file name & extension
        var alertSound = NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource("Flip 02", ofType: "wav")!)

        // Preperation
        AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback, error: nil)
        AVAudioSession.sharedInstance().setActive(true, error: nil)

        // Play the sound
        var error: NSError?
        audioPlayer = AVAudioPlayer(contentsOfURL: alertSound, error: &error)
        audioPlayer.prepareToPlay()
        audioPlayer.play()
}

कोड की त्रुटि यहां दी गई है:

कोड 1:

AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback, error: nil)

त्रुटि 1:

कॉल में अतिरिक्त तर्क 'त्रुटि'

कोड 2:

AVAudioSession.sharedInstance().setActive(true, error: nil)

त्रुटि 2:

कॉल में अतिरिक्त तर्क 'त्रुटि'

कोड 3:

audioPlayer = AVAudioPlayer(contentsOfURL: alertSound, error: &error)

त्रुटि 3:

प्रकार 'एवाडियो प्लेयर' के लिए एक प्रारंभकर्ता नहीं मिल सकता है जो कि प्रकार की एक तर्क सूची स्वीकार करता है ('सामग्री ओफ़URL: एनएसयूआरएल, त्रुटि: एन-एस-आररआउट में?)'

आपका योगदान मेरी मदद करेगा धन्यवाद।


विचार AVAudioPlayer का विस्तार करना और किसी भी कक्षा में कॉल करने के लिए एक विधि का उपयोग करना है।

1) 'ऐप एक्स्टेंशन' नामक एक रिक्त वर्ग बनाएं निम्नलिखित जोड़ें

 //  AppExtensions.swift

    import Foundation
    import UIKit
    import SpriteKit
    import AVFoundation   

    //Audio
    var audioPlayer = AVAudioPlayer()

    extension AVAudioPlayer {

        func playMusic(audioFileName:String,audioFileType:String)
        {    
            do {

            let alertSound = NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource(audioFileName, ofType: audioFileType)!)

           // Removed deprecated use of AVAudioSessionDelegate protocol
            try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback)
            try AVAudioSession.sharedInstance().setActive(true)
            try audioPlayer = AVAudioPlayer(contentsOfURL: alertSound)
            audioPlayer.prepareToPlay()
            audioPlayer.play()

            }
            catch {
                print(error)
            }
    }
    }

2) किसी भी कक्षा में एक्सटेंशन विधि को कॉल करें।

var audioPlayer1 = AVAudioPlayer()
audioPlayer1.playMusic(audioFileName:"tik",audioFileType:"wav")

अंदर फंक्शंस का उपयोग try और फेंकने वाले लोगों के लिए try करें:

var audioPlayer = AVAudioPlayer()

func playAudio() {
    do {
        if let bundle = NSBundle.mainBundle().pathForResource("Flip 02", ofType: "wav") {
            let alertSound = NSURL(fileURLWithPath: bundle)
            try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback)
            try AVAudioSession.sharedInstance().setActive(true)
            try audioPlayer = AVAudioPlayer(contentsOfURL: alertSound)
            audioPlayer.prepareToPlay()
            audioPlayer.play()
        }
    } catch {
        print(error)
    }
}

पूर्ण स्विफ्ट 2 त्रुटि हैंडलिंग स्पष्टीकरण के लिए यह जवाब देखें।


स्विफ्ट 2.0 में त्रुटियों को संभालना बदल गया है। फाउंडेशन और अन्य सिस्टम चौखटे अब नई प्रकार की त्रुटि हैंडलिंग का उपयोग करते हैं जो कि तंत्र का उपयोग करने और पकड़ने का उपयोग करता है

कोको में, त्रुटियों का उत्पादन करने वाले तरीकों से एक NSError पॉइंटर पैरामीटर अंतिम पैरामीटर होता है, जो एक त्रुटि उत्पन्न होने पर NSError ऑब्जेक्ट के साथ अपने तर्क को पॉप्युलेट करता है। स्विफ्ट स्वचालित रूप से उद्देश्य-सी विधियों का अनुवाद करती है जो ऐसी त्रुटियों में त्रुटियां उत्पन्न करती हैं जो स्विफ्ट की मूल त्रुटि हैंडलिंग कार्यक्षमता के अनुसार एक त्रुटि फेंकते हैं।

यदि आप अपने द्वारा उपयोग किए जाने वाले कार्यों की परिभाषा को देखते हैं तो आप यह देख सकते हैं कि वे अब फेंक देते हैं। उदाहरण के लिए:

public func setActive(active: Bool) throws

आप देख सकते हैं कि फ़ंक्शन फेंकता त्रुटि के कारण कोई त्रुटि पैरामीटर नहीं है। यह बहुत एनएसआईआरआर्ट हैंडलिंग दर्द को कम करता है और यह आपको लिखने के लिए आवश्यक कोड की मात्रा भी कम कर देता है।

इसलिए जहां भी आप फ़ंक्शन में अंतिम पैरामीटर के रूप में त्रुटि देखते हैं, इसे हटा दें और कोशिश लिखिए! इसके सामने। एक उदाहरण यह है:

try! AVAudioSession.sharedInstance().setActive(true)

चूंकि त्रुटि से निपटने इस प्रश्न का दायरा नहीं है, इसलिए आप इसके बारे में यहां अधिक पढ़ सकते हैं।

आपके द्वारा लिखे गए कोड का यह सही संस्करण है:

import AVFoundation

var audioPlayer = AVAudioPlayer()

func playAudio() {
    // Set the sound file name & extension
    let alertSound = NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource("Flip 02", ofType: "wav")!)

    // Preperation
    try! AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback, withOptions: [])
    try! AVAudioSession.sharedInstance().setActive(true)

    // Play the sound
    do {
        try audioPlayer = AVAudioPlayer(contentsOfURL: alertSound)
        audioPlayer.prepareToPlay()
        audioPlayer.play()
    } catch {
        print("there is \(error)")
    }
}




swift2