কীভাবে সাউফ্ট ব্যবহার করে একটি শব্দ বাজানো যায়?


148

আমি সুইফ্ট ব্যবহার করে একটি শব্দ বাজাতে চাই।

আমার কোডটি সুইফট ১.০ এ কাজ করেছিল তবে এখন এটি সুইফট 2 বা আরও নতুনতে কাজ করে না।

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

1
সুইফটি সাউন্ড একবার দেখুন । এই উত্তরে আরও বিশদ ।
আদম

আপনি যদি কেবল সিস্টেম থেকে শব্দ চান তবে দেখুন: আইওএস অ্যাপে বিদ্যমান সিস্টেমের শব্দ ব্যবহার করা
মধু

উত্তর:


291

সর্বাধিক আপনি এভিফাউন্ডেশন ব্যবহার করতে চান । এটি অডিওভিজুয়াল মিডিয়াগুলির সাথে কাজ করার জন্য সমস্ত প্রয়োজনীয় সরবরাহ করে।

আপডেট: মন্তব্যগুলির মধ্যে আপনার পরামর্শ অনুসারে সুইফট 2 , সুইফট 3 এবং সুইফট 4 এর সাথে সামঞ্জস্যপূর্ণ ।


সুইফট 2.3

import AVFoundation

var player: AVAudioPlayer?

func playSound() {
    let url = NSBundle.mainBundle().URLForResource("soundName", withExtension: "mp3")!

    do {
        player = try AVAudioPlayer(contentsOfURL: url)
        guard let player = player else { return }

        player.prepareToPlay()
        player.play()

    } catch let error as NSError {
        print(error.description)
    }
}

সুইফট 3

import AVFoundation

var player: AVAudioPlayer?

func playSound() {
    guard let url = Bundle.main.url(forResource: "soundName", withExtension: "mp3") else { return }

    do {
        try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback)
        try AVAudioSession.sharedInstance().setActive(true)

        let player = try AVAudioPlayer(contentsOf: url)

        player.play()

    } catch let error {
        print(error.localizedDescription)
    }
}

সুইফট 4 (আইওএস 13 সামঞ্জস্যপূর্ণ)

import AVFoundation

var player: AVAudioPlayer?

func playSound() {
    guard let url = Bundle.main.url(forResource: "soundName", withExtension: "mp3") else { return }

    do {
        try AVAudioSession.sharedInstance().setCategory(.playback, mode: .default)            
        try AVAudioSession.sharedInstance().setActive(true)

        /* The following line is required for the player to work on iOS 11. Change the file type accordingly*/
        player = try AVAudioPlayer(contentsOf: url, fileTypeHint: AVFileType.mp3.rawValue)

        /* iOS 10 and earlier require the following line:
        player = try AVAudioPlayer(contentsOf: url, fileTypeHint: AVFileTypeMPEGLayer3) */

        guard let player = player else { return }

        player.play()

    } catch let error {
        print(error.localizedDescription)
    }
}

আপনার টিউনের নামটিও পাশাপাশি এক্সটেনশানটি পরিবর্তন করতে ভুলবেন না । ফাইলটি সঠিকভাবে আমদানি করা প্রয়োজন ( Project Build Phases> Copy Bundle Resources)। assets.xcassetsবৃহত্তর সুবিধার জন্য আপনি এটি স্থাপন করতে চাইতে পারেন ।

সংক্ষিপ্ত সাউন্ড ফাইলগুলির জন্য আপনি অ-সংকুচিত অডিও ফর্ম্যাটগুলির জন্য যেতে চাইতে পারেন যেমন .wavতাদের সেরা মানের এবং কম সিপিইউ প্রভাব রয়েছে। সংক্ষিপ্ত সাউন্ড ফাইলগুলির জন্য উচ্চতর ডিস্ক-স্পেস খরচ বড় হওয়া উচিত নয়। ফাইলগুলি যত দীর্ঘ হয়, আপনি সংকোচযুক্ত ফর্ম্যাট যেমন .mp3পিপি ইত্যাদির জন্য যেতে চাইতে পারেন of এর সামঞ্জস্যপূর্ণ অডিও ফর্ম্যাটগুলি পরীক্ষা করুন CoreAudio


মজাদার ঘটনা: এখানে খুব সুন্দর লাইব্রেরি রয়েছে যা বাজানোর শব্দকে আরও সহজ করে তোলে। :)
উদাহরণস্বরূপ: সুইফটি সাউন্ড


দুঃখিত, তবে এই কোডটি সুইফট ২.০ তে আর কাজ করে না এটি একটি ত্রুটি দেয় "কল ফেলতে পারে তবে এটি 'চেষ্টা' দিয়ে চিহ্নিত করা হয়নি এবং ত্রুটিটি পরিচালনা করা হয় না"
মিশেল কানসৌ

2
প্রতিস্থাপন bgMusic = AVAudioPlayer(contentsOfURL: bgMusicURL, fileTypeHint: nil)সঙ্গেdo { bgMusic = try AVAudioPlayer(contentsOfURL: bgMusicURL, fileTypeHint: nil) } catch _ { return \\ if it doesn't exist, don't play it}
saagarjha

11
এটিতে কাজ পেতে আমাকে AVAudioPlayer অবজেক্টকে একটি উদাহরণের পরিবর্তনশীল করতে হয়েছিল। স্থানীয় পরিবর্তনশীল হিসাবে এটি কোনও কিছু খেলবে না, ত্রুটি নেই। প্রতিনিধিদের ডাকা হত না, হয়।
কালেব

2
আপনি এখানে একজন প্রহরী কেন ব্যবহার করেন? player = try AVAudioPlayer(contentsOf: url) guard let player = player else { return }আমার কাছে অতিরিক্ত কাজের মতো মনে হচ্ছে, শুধু কেন নয় let player = try AVAudioPlayer(contentsOf: url)?
xendermonkey

2
গার্ড স্টেটমেন্ট ব্যবহার করা আপনাকে শূন্যতার কারণে ক্রাশ হওয়া থেকে নিরাপদ করে তোলে।
আশিষ

43

জন্য সুইফট 3 :

import AVFoundation

/// **must** define instance variable outside, because .play() will deallocate AVAudioPlayer 
/// immediately and you won't hear a thing
var player: AVAudioPlayer?

func playSound() {
    guard let url = Bundle.main.url(forResource: "soundName", withExtension: "mp3") else {
        print("url not found")
        return
    }

    do {
        /// this codes for making this app ready to takeover the device audio
        try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback)
        try AVAudioSession.sharedInstance().setActive(true)

        /// change fileTypeHint according to the type of your audio file (you can omit this)

        player = try AVAudioPlayer(contentsOf: url, fileTypeHint: AVFileTypeMPEGLayer3)

        // no need for prepareToPlay because prepareToPlay is happen automatically when calling play()
        player!.play()
    } catch let error as NSError {
        print("error: \(error.localizedDescription)")
    }
}

স্থানীয় সম্পদের জন্য সর্বোত্তম অনুশীলন হ'ল এটি ভিতরে রাখা assets.xcassetsএবং আপনি ফাইলটি লোড করুন:

func playSound() {
    guard let url = Bundle.main.url(forResource: "soundName", withExtension: "mp3") else {
        print("url not found")
        return
    }

    do {
        /// this codes for making this app ready to takeover the device audio
        try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback)
        try AVAudioSession.sharedInstance().setActive(true)

        /// change fileTypeHint according to the type of your audio file (you can omit this)

        /// for iOS 11 onward, use :
        player = try AVAudioPlayer(contentsOf: url, fileTypeHint: AVFileType.mp3.rawValue)

        /// else :
        /// player = try AVAudioPlayer(contentsOf: url, fileTypeHint: AVFileTypeMPEGLayer3)

        // no need for prepareToPlay because prepareToPlay is happen automatically when calling play()
        player!.play()
    } catch let error as NSError {
        print("error: \(error.localizedDescription)")
    }
}

এই কোডটি আইওএস 10.2.1, এক্সকোড 8.2.1 এ আমার জন্য কাজ করেছিল। আমার জন্য, দুটি "এভিএডিউসেশন চেষ্টা করুন" লাইনগুলি সত্যিকারের ডিভাইসে আসলে শোনা যাচ্ছে এমন শব্দের মধ্যে পার্থক্য তৈরি করেছে। তাদের ছাড়া কোনও শব্দ নেই।
pvanallen

এটি আমাকে এক টন সহায়তা করেছে, doব্লকটিতে কী ঘটেছিল তা বুঝতে আমার কিছুটা সমস্যা হচ্ছে । স্পষ্টত player!.play()স্ব স্ব বর্ণনামূলক। তবে পদ্ধতি setCategoryএবং setActiveপদ্ধতিগুলির উদ্দেশ্য কী ?
শান রবার্টসন

2
আপনি যদি সরবরাহ AVAudioSessionCategoryPlaybackকরেন setCategoryতবে ফোনটি লক স্ক্রিনে বা নিঃশব্দ মোডে থাকা সত্ত্বেও এটি অডিও সর্বদা প্লে হবে তা নিশ্চিত করবে। setActiveএটি সিস্টেমটিকে বলার মতো যা আপনার অ্যাপটি অডিও খেলতে প্রস্তুত
আদি নুগ্রোহো

@AdiNugroho আপনি মনে করেন আপনি আমার প্রশ্নের সঙ্গে সাহায্য করতে পারে: stackoverflow.com/questions/44201592/... ?
জেমসজি

আইওএস ১১-এ এটি নিয়ে আমার অনেক সমস্যা হচ্ছে It এটি কাজ করত তবে এখন হঠাৎ করে তা হয় না। কোন ধারনা?
নিকডনক

15

আইওএস 12 - এক্সকোড 10 বিটা 6 - সুইফট 4.2

কেবলমাত্র 1 আইবিএ কার্যক্রম ব্যবহার করুন এবং সমস্ত বোতামটি সেই 1 ক্রিয়ায় নির্দেশ করুন।

import AVFoundation

var player = AVAudioPlayer()

@IBAction func notePressed(_ sender: UIButton) {
    print(sender.tag) // testing button pressed tag
    let path = Bundle.main.path(forResource: "note\(sender.tag)", ofType : "wav")!
    let url = URL(fileURLWithPath : path)
    do {
        player = try AVAudioPlayer(contentsOf: url)
        player.play()
    } catch {
        print ("There is an issue with this code!")
    }
}

5
এটি মজার বিষয় যে আপনি ধরেই নিচ্ছেন যে প্রত্যেকে "আইওএস 11 এবং সুইফট 4 - সম্পূর্ণ iOS অ্যাপ্লিকেশন বিকাশ বুটক্যাম্প" kar
কার্লিংগেন

12

কোড যদি কোনও ত্রুটি সৃষ্টি না করে তবে আপনি শব্দটি শুনতে পান না - উদাহরণ হিসাবে প্লেয়ারটি তৈরি করুন:

   static var player: AVAudioPlayer!

আমার জন্য প্রথম সমাধানটি কাজ করেছিল যখন আমি এই পরিবর্তনটি করেছি :)


আমার জন্য কাজ কর. কেউ কি জানেন যে আপনি কেন এটি স্থির হিসাবে সেট করতে হবে?
কুজডু

3
আমি মনে করি না এটি স্থির হতে হবে (আর?), তবে মনে হয় এটি তৈরির পরে আপনি যদি এটিকে সুযোগের বাইরে চলে যেতে দেন, এমনকি আপনি যদি নাটক () বলে থাকেন তবে এটি খেলবে না? আমি এটিকে আমার ক্লাসের একটি উদাহরণ পরিবর্তনশীল করে দিয়েছি এবং এটি কাজ করে।
বায়োমিকার

3
@ কুজডু এটি playerআপনার বাইরের ক্ষেত্রের মধ্যে না রাখার কারণে । অন্যথায়, playerডেলোক্যালাইজড হয়ে যায় এবং তাই এর অস্তিত্ব থাকায় কোনও শব্দ বাজতে পারে না।
জর্জি_ ই

আমার জন্য কাজ করেছেন - ছাড়াইstatic
টড

5

সুইফট 4, 4.2 এবং 5

ইউআরএল এবং আপনার প্রকল্প থেকে অডিও খেলুন (স্থানীয় ফাইল)

import UIKit
import AVFoundation

class ViewController: UIViewController{

var audioPlayer : AVPlayer!

override func viewDidLoad() {
        super.viewDidLoad()
// call what ever function you want.
    }

    private func playAudioFromURL() {
        guard let url = URL(string: "https://geekanddummy.com/wp-content/uploads/2014/01/coin-spin-light.mp3") else {
            print("error to get the mp3 file")
            return
        }
        do {
            audioPlayer = try AVPlayer(url: url as URL)
        } catch {
            print("audio file error")
        }
        audioPlayer?.play()
    }

    private func playAudioFromProject() {
        guard let url = Bundle.main.url(forResource: "azanMakkah2016", withExtension: "mp3") else {
            print("error to get the mp3 file")
            return
        }

        do {
            audioPlayer = try AVPlayer(url: url)
        } catch {
            print("audio file error")
        }
        audioPlayer?.play()
    }

}

3

সুইফট 3

import AVFoundation


var myAudio: AVAudioPlayer!

    let path = Bundle.main.path(forResource: "example", ofType: "mp3")!
    let url = URL(fileURLWithPath: path)
do {
    let sound = try AVAudioPlayer(contentsOf: url)
    myAudio = sound
    sound.play()
} catch {
    // 
}

//If you want to stop the sound, you should use its stop()method.if you try to stop a sound that doesn't exist your app will crash, so it's best to check that it exists.

if myAudio != nil {
    myAudio.stop()
    myAudio = nil
}

1

প্রথমে এই গ্রন্থাগারগুলি আমদানি করুন

import AVFoundation

import AudioToolbox    

এই মত প্রতিনিধি সেট করুন

   AVAudioPlayerDelegate

বোতাম ক্রিয়া বা কিছু ক্রিয়াতে এই সুন্দর কোডটি লিখুন:

guard let url = Bundle.main.url(forResource: "ring", withExtension: "mp3") else { return }
    do {
        try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback)
        try AVAudioSession.sharedInstance().setActive(true)
        player = try AVAudioPlayer(contentsOf: url, fileTypeHint: AVFileType.mp3.rawValue)
        guard let player = player else { return }

        player.play()
    }catch let error{
        print(error.localizedDescription)
    }

আমার প্রকল্পে 100% কাজ করছে এবং পরীক্ষিত


2
AudioToolboxএই জায়গায় আমদানি করার দরকার নেই ।
ixany

1

সুইফট 4 এবং আইওএস 12 দিয়ে পরীক্ষিত:

import UIKit
import AVFoundation
class ViewController: UIViewController{
    var player: AVAudioPlayer!
    override func viewDidLoad() {
        super.viewDidLoad()
    }

    func playTone(number: Int) {
        let path = Bundle.main.path(forResource: "note\(number)", ofType : "wav")!
        let url = URL(fileURLWithPath : path)
        do {
            player = try AVAudioPlayer(contentsOf: url)
            print ("note\(number)")
            player.play()
        }
        catch {
            print (error)
        }
    }

    @IBAction func notePressed(_ sender: UIButton) {
        playTone(number: sender.tag)
    }
}

1

সুইফট 4 (আইওএস 12 সামঞ্জস্যপূর্ণ)

var player: AVAudioPlayer?

let path = Bundle.main.path(forResource: "note\(sender.tag)", ofType: "wav")
let url = URL(fileURLWithPath: path ?? "")
    
do {
   player = try AVAudioPlayer(contentsOf: url)
   player?.play()
} catch let error {
   print(error.localizedDescription)
}

আমি নিম্নলিখিত ত্রুটির পাবেন: The operation couldn’t be completed. (OSStatus error 1954115647.)। আমি সর্বত্র দেখেছি, এবং এর সমাধান খুঁজে পাচ্ছি না। এটি সম্পর্কে একটি প্রশ্ন পোস্ট করতে পারে।
জর্জি_ ই

1

গেম শৈলী:

Sfx.swift ফাইল

import AVFoundation

public let sfx = Sfx.shared
public final class Sfx: NSObject {
    
    static let shared = Sfx()
    
    var apCheer: AVAudioPlayer? = nil
    
    private override init() {
        guard let s = Bundle.main.path(forResource: "cheer", ofType: "mp3") else {
            return  print("Sfx woe")
        }
        do {
            apComment = try AVAudioPlayer(contentsOf: URL(fileURLWithPath: s))
        } catch {
            return  print("Sfx woe")
        }
    }
    
    func cheer() { apCheer?.play() }
    func plonk() { apPlonk?.play() }
    func crack() { apCrack?.play() } .. etc
}

কোড যে কোনও জায়গায়

sfx.explosion()
sfx.cheer()

1

এটি সুইফটে একটি অডিও ফাইল সন্ধান এবং প্লে করার জন্য মৌলিক কোড।

আপনার অডিও ফাইলটি আপনার এক্সকোডে যুক্ত করুন এবং নীচের কোডটি যুক্ত করুন।

import AVFoundation

class ViewController: UIViewController {

   var audioPlayer = AVAudioPlayer() // declare globally

   override func viewDidLoad() {
        super.viewDidLoad()

        guard let sound = Bundle.main.path(forResource: "audiofilename", ofType: "mp3") else {
            print("Error getting the mp3 file from the main bundle.")
            return
        }
        do {
            audioPlayer = try AVAudioPlayer(contentsOf: URL(fileURLWithPath: sound))
        } catch {
            print("Audio file error.")
        }
        audioPlayer.play()
    }

    @IBAction func notePressed(_ sender: UIButton) { // Button action
        audioPlayer.stop()
    }
}

0
import UIKit
import AVFoundation

class ViewController: UIViewController{

    var player: AVAudioPlayer?

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

    @IBAction func notePressed(_ sender: UIButton) {

        guard let url = Bundle.main.url(forResource: "note1", withExtension: "wav") else { return }

        do {
            try AVAudioSession.sharedInstance().setCategory((AVAudioSession.Category.playback), mode: .default, options: [])
            try AVAudioSession.sharedInstance().setActive(true)


            /* The following line is required for the player to work on iOS 11. Change the file type accordingly*/
            player = try AVAudioPlayer(contentsOf: url, fileTypeHint: AVFileType.wav.rawValue)

            /* iOS 10 and earlier require the following line:
             player = try AVAudioPlayer(contentsOf: url, fileTypeHint: AVFileTypeMPEGLayer3) *//

            guard let player = player else { return }

            player.play()

        } catch let error {
            print(error.localizedDescription)
        }

    }

}

0
var soundEffect = AVAudioPlayer()

func playSound(_ buttonTag : Int){

    let path = Bundle.main.path(forResource: "note\(buttonTag)", ofType : "wav")!
    let url = URL(fileURLWithPath : path)

    do{
        soundEffect = try AVAudioPlayer(contentsOf: url)
        soundEffect?.play()
        // to stop the spound .stop()
    }catch{
        print ("file could not be loaded or other error!")
    }
}

দ্রুত 4 সর্বশেষ সংস্করণে কাজ করে। বাটনট্যাগটি আপনার ইন্টারফেসের একটি বোতামে একটি ট্যাগ হবে। নোটগুলি মেইনস্টোরিবোর্ডের সমান্তরালে একটি ফোল্ডারে রয়েছে। প্রতিটি নোটকে নোট 1, নোট 2, ইত্যাদি হিসাবে নামকরণ করা হয়েছে। বোতামট্যাগ বোতামটি ক্লিক করে 1, 2 ইত্যাদি প্রদান করছে যা পরম হিসাবে পাস করা হয়েছে


0

এভিফাউন্ডেশন আমদানি করুন

অডিওটুলবক্স আমদানি করুন

পাবলিক ফাইনাল ক্লাস এমপি 3 প্লেয়ার: এনএসবজেক্ট {

// Singleton class
static let shared:MP3Player = MP3Player()

private var player: AVAudioPlayer? = nil

// Play only mp3 which are stored in the local
public func playLocalFile(name:String) {
    guard let url = Bundle.main.url(forResource: name, withExtension: "mp3") else { return }

    do {
        try AVAudioSession.sharedInstance().setCategory(AVAudioSession.Category.playback)
        try AVAudioSession.sharedInstance().setActive(true)
        player = try AVAudioPlayer(contentsOf: url, fileTypeHint: AVFileType.mp3.rawValue)
        guard let player = player else { return }

        player.play()
    }catch let error{
        print(error.localizedDescription)
    }
}

}

// এই ফাংশন কল করতে

এমপিথ্রি প্লেয়ার.শ্রেড.প্লে লোকালফিল (নাম: "জঙ্গলবুক")


-1
import AVFoundation
var player:AVAudioPlayer!

func Play(){
    guard let path = Bundle.main.path(forResource: "KurdishSong", ofType: "mp3")else{return}
    let soundURl = URL(fileURLWithPath: path)
    player = try? AVAudioPlayer(contentsOf: soundURl)
    player.prepareToPlay()
    player.play()
    //player.pause()
    //player.stop()
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.