দ্রুত গতিতে একটি শব্দ তৈরি করা এবং প্লে করা


103

সুতরাং আমি যা করতে চাই তাড়াতাড়ি একটি সাউন্ড তৈরি এবং বাজানো যা আমি যখন একটি বোতাম টিপব তখন এটি বাজবে, আমি ওজেক্টিভ-সি-তে এটি কীভাবে করব তা জানি, তবে কী কেউ সুইফটে কীভাবে জানেন?

এটি উদ্দেশ্য-সি এর জন্য এটির মতো হবে:

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

এবং তারপরে এটি খেলতে আমি করব:

AudioServicesPlaySystemSound(Explosion);

কেউ কি জানেন যে আমি এটি কীভাবে করতে পারি?


2
এই প্রশ্নের মূলটি হল কীভাবে সি ফাংশনগুলি সুইফ্ট থেকে কল করা যায়। আমি এই সম্পর্কে কৌতূহল।
67চারি

এই লাইনটি সাউন্ড ইউআরএল তৈরি করতে পারে: var url :NSURL = NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource("mysoundname", ofType: "wav"))
কনার

@ কনর ধন্যবাদ যা কাজ করে তবে অডিও সার্ভিসক্রিয়েটসিস্টেমসোনডিআইডি
জ্যাকব ব্যাংকগুলি

আমি এটা সম্পর্কে অবগত নই. আমি দ্রুত থেকে উদ্দেশ্য-সি এপিআই কল করতে সক্ষম হয়েছি।
কনার

উত্তর:


83

এখানে ফ্ল্যাপ্পসইউফ্টে যুক্ত হওয়া কোডের একটি বিট রয়েছে যা কাজ করে:

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

}

দেখে মনে হচ্ছে আপনি এটির আগে ঠিক অডিওপ্লেয়ারটি ঘোষণা করতে পারেন, তবে সিমুলেটারে এটি আমার পক্ষে কার্যকর হয়নি work আপনার মতোই আমাকেও শীর্ষে ঘোষণা করতে হয়েছিল।
অ্যাডাম প্রেমের

প্রেমময় আপনি সঠিক এটি ব্যবহার করার পূর্বে audioPlayer ডিক্লেয়ার করতে পারেন @Adam, কিন্তু আপনি খেলা () একই ফাংশন আপনি এটা ঘোষিত আরও (যেমন ভাল উত্তর উল্টোদিকে) এ ডাকা নিশ্চিত, আমি ঘোষণা করা হবে coinSoundএবং audioPlayerসঙ্গে letপরিবর্তে varযেহেতু আপনি চাই না সময় পরে এই বিষয়গুলি পরিবর্তন করুন।
ফ্যাট 32

3
সুইফট 2 এ এটিকে চালানোর কথা মনে রাখবেন do { (player object) } catch _ { }বা আপনি একটি বাগ পাবেন! :)
প্যারিসনকিটা কেজেসার

1
কিন্তু মনোযোগ! এটি প্লেয়ারের পটভূমি সঙ্গীত থামিয়ে দেবে। সংক্ষিপ্ত শব্দ বাজানোর জন্য আমাদের নীচের উত্তরটি ব্যবহার করতে হবে
নিকিতা প্রানচিক

ডাউনভোট - এটি কোনও সিস্টেম সাউন্ড নয়, এটি আলাদা এপিআই ব্যবহার করছে
উইলিয়াম এন্টারিকেন

119

এটি অন্য কয়েকটি উত্তরের মতো, তবে সম্ভবত আরও কিছুটা "সুইফটি":

// 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আপনি যখন শেষ করবেন তখন কল করুন তাদের সাথে.


1
আপনাকে অডিওটুলবক্স
ব্রডি রবার্টসন

AudioServicesDisposeSystemSoundID(mySound)পরে কি স্মৃতি মুক্ত করার জন্য আপনার কল করা দরকার ? আপনি যদি এখনই এটি করেন তবে শব্দটি মূলত বাজায় না (তাত্ক্ষণিকভাবে পরিষ্কার হয়ে যায়) তাই আমি dispatch_afterএটি করেছি এবং 10 সেকেন্ড পরে এটি পরিষ্কার করেছি।
owenfi

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

@ozgur আপনি কেন Xcode- র একটি পুরানো সংস্করণ ব্যবহার করছেন? আমাদের "কাজ করছে না" এর অর্থ কী তা জানতে হবে এবং আপনার যদি নির্দিষ্ট সমস্যা থাকে তবে আপনি সম্ভবত একটি নতুন প্রশ্ন জিজ্ঞাসা করা ভাল।
ম্যাট গিবসন

আসলে এই wav ফাইলটি প্লে করার একমাত্র উপায়। এভিপ্লেয়ার কাজ করছে বলে মনে হচ্ছে না।
হাইতাও

18

হ্যান্ডি সুইফট এক্সটেনশন:

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

"সাউন্ড.এমপি 3" খেলতে


আমি যখন এটি স্প্রিটকিট গেমটিতে চালিত করি তখন শব্দটি বাজানোর আগে সবসময় পিছিয়ে থাকে। এমনকি যদি আমি এটি ভিতরে রাখি DispatchQueue.global(qos: .userInitiated).async {}
জন ক্যান্টনার

NSBundleদ্বারা প্রতিস্থাপিত হয়েছে Bundle, ব্যবহার Bundle.main.url(forResource: fileName, withExtension: fileExtension)পরিবর্তে
diachedelic

14

এটি কল করা 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
}

আপনি কোডটি সংকলনের চেষ্টা করেছিলেন? আমি ত্রুটি পাচ্ছি "এক্সট্রেশন এর ধরণের 'অব্যবস্থার <CFURL> রূপান্তর করতে পারছি না!' এই লাইনটি থেকে 'সিএফএসস্ট্রিং' টাইপ করতে "সাউন্ড ইউআরএল = সিএফবান্ডেলকপি রিসোর্স URL (সিএফবান্ডেলগেটমাইনবাণ্ডল ()," চা-চিং "," আইফ ", শূন্য)"
বিপোল্যাট

হ্যাঁ, এটি আমার জন্য সংকলন করে। দেখুন github.com/acani/Chats/blob/master/Chats/Chats/...
ma11hew28

2
এটি গ্রহণযোগ্য উত্তর হওয়া উচিত, প্রদত্ত ওবজ-সি উদাহরণটি অডিওটুলবক্স ফ্রেমওয়ার্কের ভিত্তিতে রয়েছে
এহারো

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

8

একটি ক্লাস এবং অডিওটুলবক্স সহ:

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

2
আমি এই উত্তর ভালবাসি। এটি সিস্টেম সাউন্ড হওয়ার কারণে, আমি এক্সকোড ৮ এর জন্য কনভোলটিতে AVAudioPlayer নিক্ষেপ করে না এমন সিস্টেম বার্তাটি পাই না
TPot

দয়া করে সহায়তা করুন আমি একই জিনিসটি করছি, শব্দ বাজায় তবে ভলিউম খুব কম। শুনতে পাচ্ছেন না
বীরেশ কুমার

5
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 (বিষয়বস্তু থেকে: সাউন্ডআরএল)
বক্সযুক্ত

5

এই কোডটি আমার পক্ষে কাজ করে। AVAudioPlayer এর জন্য ট্রাই এবং ক্যাচ ব্যবহার করুন

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

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

"মোর্স.এফ" হ'ল ওএসএক্সের একটি সিস্টেম শব্দ, তবে আপনি যদি এক্সকোডের মধ্যে কেবল "নামযুক্ত" এ ক্লিক করেন তবে আপনি দেখতে পাবেন (কুইকহেল্প ফলকে) যেখানে এই ফাংশনটি শব্দগুলি অনুসন্ধান করছে। এটি আপনার "সহায়ক ফাইলগুলি" ফোল্ডারে থাকতে পারে


4
প্রশ্নটি আইওএস সম্পর্কে।
rmaddy

আসলে ... সিমুলেটারে এটি তৈরি করা যায়নি। আজ পর্যন্ত কোনও ডক উপলব্ধ নেই
ফিলিপ্প

4

নতুন সুইফট ২.০ অনুসারে আমাদের ব্যবহারের চেষ্টা করা উচিত catch কোডটি এর মতো দেখায়:

var badumSound = NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource("BadumTss", ofType: "mp3"))
var audioPlayer = AVAudioPlayer()
 do {
     player = try AVAudioPlayer(contentsOfURL: badumSound)
 } catch {
     print("No sound found by URL:\(badumSound)")
 }
 player.prepareToPlay()

3

এটি সুইফট 4 এর সাথে কাজ করছে:

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

2
দয়া করে আপনার কোডটি ব্যাখ্যা করুন। কোড-কেবলমাত্র উত্তরগুলি ব্যাখ্যার চেয়ে কম মূল্যবান।
ভিনসেন্ট

@ ভিনসেন্ট +1, আসলে আমি ভাবছি এবং অপারেটর। এটি শব্দ এবং মেমরির মধ্যে উল্লেখ করা যেতে পারে।
এলিয়া

আপনাকে আমদানি অডিওটুলবক্স যোগ করতে হবে তারপরে উপরের কোডটি যুক্ত করুন
মোহাম্মদ আবোলনাসার

2
//Swift 4
import UIKit
import AVFoundation

class ViewController: UIViewController {

    var player : AVAudioPlayer?

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

    @IBAction func notePressed(_ sender: UIButton) {
        let path = Bundle.main.path(forResource: "note1", ofType: "wav")!
        let url = URL(fileURLWithPath: path)
        do {
            player = try AVAudioPlayer(contentsOf: url)
            player?.play()
        } catch {
            // error message
        }
    }
}

2

আসুন এই প্রশ্নের আরও আপডেট হওয়া পদ্ধতির দেখুন:

Import AudioToolbox

func noteSelector(noteNumber: String) {

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

1
কোডটি সুইফট 4-তে সূক্ষ্মভাবে কাজ করে, তবে দৃশ্যত নির্গত শব্দটি মিডিয়ার পরিমাণকে অনুসরণ করে না
ডেভিড ভার্গাস

1

ম্যাট গিবসনের সমাধানটি আমার পক্ষে কাজ করেছে, এখানে সুইফট 3 সংস্করণ রয়েছে।

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

1

সুইফট 4

import UIKit
import AudioToolbox

class ViewController: UIViewController{

var sounds : [SystemSoundID] = [1, 2, 3, 4, 5, 6, 7]

override func viewDidLoad() {
    super.viewDidLoad()

    for index in 0...sounds.count-1 {
        let fileName : String = "note\(sounds[index])"

        if let soundURL = Bundle.main.url(forResource: fileName, withExtension: "wav") {
            AudioServicesCreateSystemSoundID(soundURL as CFURL, &sounds[index])
        }
    }
}



@IBAction func notePressed(_ sender: UIButton) {
    switch sender.tag {
    case 1:
        AudioServicesPlaySystemSound(sounds[0])
    case 2:
        AudioServicesPlaySystemSound(sounds[1])
    case 3:
        AudioServicesPlaySystemSound(sounds[2])
    case 4:
        AudioServicesPlaySystemSound(sounds[3])
    case 5:
        AudioServicesPlaySystemSound(sounds[4])
    case 6:
        AudioServicesPlaySystemSound(sounds[5])
    default:
        AudioServicesPlaySystemSound(sounds[6])
    }
}
}

অথবা

import UIKit
import AVFoundation

class ViewController: UIViewController, AVAudioPlayerDelegate{

var audioPlayer : AVAudioPlayer!

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

@IBAction func notePressed(_ sender: UIButton) {

    let soundURL = Bundle.main.url(forResource: "note\(sender.tag)", withExtension: "wav")

    do {
        audioPlayer = try AVAudioPlayer(contentsOf: soundURL!)
    }
    catch {
        print(error)
    }

    audioPlayer.play()

}
}

1

কাজের ভিতর 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);
 }

1

সুইফট কোড উদাহরণ :

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

কেন এই কোডটি সহায়ক সে সম্পর্কে আরও বিশদ যুক্ত করুন।
বেরেনশট 20

1

আপনি সুইফ্ট 5.2 এ এটি ব্যবহার করতে পারেন:

func playSound() {
        let soundURL = Bundle.main.url(forResource: selectedSoundFileName, withExtension: "wav")
        do {
            audioPlayer = try AVAudioPlayer(contentsOf: soundURL!)
        }
        catch {
            print(error)
        }
        audioPlayer.play()
    }

1

সুইফট 4 এবং আইওএস 12

var audioPlayer: AVAudioPlayer?

override func viewDidLoad() {
    super.viewDidLoad()



}

@IBAction func notePressed(_ sender: UIButton) {

    // noise while pressing button

    _ = Bundle.main.path(forResource: "note1", ofType: "wav")

    if Bundle.main.path(forResource: "note1", ofType: "wav") != nil {
        print("Continue processing")
    } else {
        print("Error: No file with specified name exists")
    }

    do {
        if let fileURL = Bundle.main.path(forResource: "note1", ofType: "wav") {
            audioPlayer = try AVAudioPlayer(contentsOf: URL(fileURLWithPath: fileURL))
        } else {
            print("No file with specified name exists")
        }
    } catch let error {
        print("Can't play the audio file failed with an error \(error.localizedDescription)")
    }


    audioPlayer?.play()    }

}


শুধু কোড পোস্ট করবেন না - এটি কী করে তা ব্যাখ্যা করুন! stackoverflow.com/help/how-to-answer
নিনো Filiu

এই পোস্টের প্রশ্ন পড়ুন দয়া করে। আপনি আপনার উত্তর খুঁজে পেতে পারেন! আপনাকে ধন্যবাদ @ নিনোফিলিও
গুলশান বোরভূইয়া

0

সুইফটে শব্দ তৈরি করতে এই ফাংশনটি ব্যবহার করুন (আপনি যেখানে শব্দ তৈরি করতে চান সেখানে আপনি এই ফাংশনটি ব্যবহার করতে পারেন))

প্রথমে স্প্রিটকিট এবং এভিফাউন্ডেশন ফ্রেমওয়ার্ক যুক্ত করুন।

import SpriteKit
import AVFoundation
 func playEffectSound(filename: String){
   runAction(SKAction.playSoundFileNamed("\(filename)", waitForCompletion: false))
 }// use this function to play sound

playEffectSound("Sound File Name With Extension")
// Example :- playEffectSound("BS_SpiderWeb_CollectEgg_SFX.mp3")

0

এই কোডটি আমার পক্ষে কাজ করে:

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

0

জন্য সুইফট 3 :

extension SystemSoundID {
    static func playFileNamed(_ fileName: String, withExtenstion fileExtension: String) {
        var sound: SystemSoundID = 0
        if let soundURL = Bundle.main.url(forResource: fileName, withExtension: fileExtension) {
            AudioServicesCreateSystemSoundID(soundURL as CFURL, &sound)
            AudioServicesPlaySystemSound(sound)
        }
    }
}

0

আমি কীভাবে এটি করি তা এখানে সুইফ্ট 3।

{

import UIKit
import AVFoundation

        let url = Bundle.main.url(forResource: "yoursoundname", withExtension: "wav")!
        do {

            player = try AVAudioPlayer(contentsOf: url); guard let player = player else { return }

            player.prepareToPlay()
            player.play()
        } catch let error as Error {
            print(error)

        }
    }

0

আপনি কি পারবেন না import AVFoundation, কেবল অডিও প্লেয়ার ( var audioPlayer : AVAudioPlayer!) এবং শব্দটি খেলতে পারেন? ( let soundURL = Bundle.main.url(forResource: "sound", withExtension: "wav")


0
import UIKit
import AudioToolbox

class ViewController: UIViewController {

    let toneSound : Array =  ["note1","note2","note3","note4","note5","note6"]

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.

    }

    func playSound(theTone : String) {
        if let soundURL = Bundle.main.url(forResource: theTone, withExtension: "wav") {
            var mySound: SystemSoundID = 0
            do {
                AudioServicesCreateSystemSoundID(soundURL as CFURL, &mySound)
                // Play
                AudioServicesPlaySystemSound(mySound);
            }
            catch {
               print(error)
            }
        }
    }

    @IBAction func anypressed(_ sender: UIButton) {
        playSound(theTone: toneSound[sender.tag-1] )
    }    

}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.