Jadi yang ingin saya lakukan adalah membuat dan memutar suara dengan cepat yang akan diputar saat saya menekan tombol, saya tahu cara melakukannya di Objective-C, tetapi adakah yang tahu cara melakukannya di Swift?
Ini akan menjadi seperti ini untuk Objective-C:
NSURL *soundURL = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"mysoundname" ofType:@"wav"]];
AudioServicesCreateSystemSoundID((__bridge CFURLRef)soundURL, &mySound);
Dan kemudian untuk memainkannya, saya akan melakukan:
AudioServicesPlaySystemSound(Explosion);
Adakah yang tahu bagaimana saya bisa melakukan ini?
ios
objective-c
audio
swift
Jacob Banks
sumber
sumber
var url :NSURL = NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource("mysoundname", ofType: "wav"))
Jawaban:
Ini sedikit kode yang saya tambahkan ke FlappySwift yang berfungsi:
sumber
coinSound
danaudioPlayer
denganlet
alih - alihvar
karena Anda tidak mau ubah objek ini di lain waktu.do { (player object) } catch _ { }
atau Anda akan terkena bug! :)Ini mirip dengan beberapa jawaban lain, tetapi mungkin sedikit lebih "Swifty":
Perhatikan bahwa ini adalah contoh sepele yang mereproduksi efek kode dalam pertanyaan. Anda harus memastikannya
import AudioToolbox
, ditambah pola umum untuk jenis kode ini adalah memuat suara Anda saat aplikasi Anda mulai, menyimpannya dalamSystemSoundID
variabel instance di suatu tempat, menggunakannya di seluruh aplikasi Anda, lalu memanggilnyaAudioServicesDisposeSystemSoundID
setelah Anda selesai dengan mereka.sumber
AudioServicesDisposeSystemSoundID(mySound)
untuk mengosongkan memori nanti? jika Anda melakukannya segera, suara pada dasarnya tidak diputar (dibersihkan secara instan) jadi saya melakukannyadispatch_after
dan membersihkannya 10 detik kemudian.Ekstensi Swift yang berguna:
Kemudian, dari mana saja di aplikasi Anda (ingat untuk
import AudioToolbox
), Anda dapat meneleponuntuk memutar "sound.mp3"
sumber
DispatchQueue.global(qos: .userInitiated).async {}
.NSBundle
telah diganti olehBundle
, gunakanBundle.main.url(forResource: fileName, withExtension: fileExtension)
sebagai gantinyaIni membuat
SystemSoundID
dari file bernamaCha-Ching.aiff
.sumber
Dengan kelas & AudioToolbox:
Pemakaian:
sumber
sumber
Kode ini bekerja untuk saya. Gunakan Coba dan Tangkap untuk AVAudioPlayer
sumber
"Morse.aiff" adalah suara sistem OSX, tetapi jika Anda hanya mengklik "bernama" dalam XCode, Anda akan dapat melihat (di panel QuickHelp) di mana fungsi ini mencari suara. Ini bisa berada di folder "File pendukung"
sumber
Menurut Swift 2.0 baru, kita harus menggunakan do try catch. Kode tersebut akan terlihat seperti ini:
sumber
ini bekerja dengan Swift 4:
sumber
sumber
Mari kita lihat pendekatan yang lebih diperbarui untuk pertanyaan ini:
sumber
Solusi Matt Gibson berhasil untuk saya, ini adalah versi 3 yang cepat.
sumber
Cepat 4
atau
sumber
bekerja di
Xcode 9.2
sumber
Contoh kode Swift :
sumber
Anda dapat mencoba ini di Swift 5.2:
sumber
swift 4 & iOS 12
}
sumber
Gunakan Fungsi Ini untuk mengeluarkan suara di Swift (Anda dapat menggunakan fungsi ini di tempat Anda ingin mengeluarkan suara.)
Pertama Tambahkan SpriteKit dan AVFoundation Framework.
sumber
Kode ini berfungsi untuk saya:
sumber
Untuk Swift 3 :
sumber
Swift 3 inilah cara saya melakukannya.
sumber
Tidak bisakah Anda
import AVFoundation
memilih pemutar audio (var audioPlayer : AVAudioPlayer!
), dan memutar suaranya? (let soundURL = Bundle.main.url(forResource: "sound", withExtension: "wav"
)sumber
sumber