it-swarm-id.com

Memainkan suara sistem tanpa mengimpor sendiri

Apakah mungkin untuk memutar suara sistem yang sudah ada tanpa mengimpor sendiri?

43
Oksana

Kode ini memainkan suara sistem Apple "Tock.aiff" .. Saya yakin Anda dapat memainkan suara sistem yang berbeda menggunakan ini

NSString *path = [[NSBundle bundleWithIdentifier:@"com.Apple.UIKit"] pathForResource:@"Tock" ofType:@"aiff"];
SystemSoundID soundID;
AudioServicesCreateSystemSoundID((CFURLRef)[NSURL fileURLWithPath:path], &soundID);
AudioServicesPlaySystemSound(soundID);
AudioServicesDisposeSystemSoundID(soundID);

Lihat ini utas

Dokumentasi Apple tentang suara Sistem

https://developer.Apple.com/documentation/audiotoolbox/system_sound_services

39
Krishnabhadra

Saya menemukan daftar systemSoundID ini sangat berguna untuk mengakses ID suara secara langsung.
http://iphonedevwiki.net/index.php/AudioServices

Misalnya, untuk memainkan tombol tekan tombol tock sound.

#define systemSoundID    1104
AudioServicesPlaySystemSound (systemSoundID);

Anda juga perlu menambahkan kerangka AudioToolbox di proyek Anda, dan menambahkan #include <AudioToolbox.h> ke file .m atau .h Anda. 

51
yannc2021

Anda dapat menggunakan ini untuk semua audio sistem default.

Contoh, untuk pengguna suara tap ini:

AudioServicesPlaySystemSound(1104);

Untuk suara positif, gunakan ini:

 AudioServicesPlaySystemSound(1054);

Dan, suara negatif gunakan ini:

 AudioServicesPlaySystemSound(1053);

Daftar lengkapnya bisa Anda lihat di sini .

26
Matheus Veloza

Daftar semua suara sistem: iOSSystemSoundsLibrary

Anda dapat memainkan semua suara ini dengan:

AudioServicesPlaySystemSound (systemSoundID);
15
TUNER88

diadaptasi dari @ yannc2021

http://iphonedevwiki.net/index.php/AudioServices

jika Anda ingin menggunakan suara sistem di Swift 

// import this
import AVFoundation

// add this method
required init(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)
}

// declared system sound here
let systemSoundID: SystemSoundID = 1104

// to play sound
AudioServicesPlaySystemSound (systemSoundID)
6
Sruit A.Suk

Swift 4 +

CATATAN: Coba hanya di perangkat nyata:

import AVKit
AudioServicesPlaySystemSound(1007);

Atau Anda dapat mencoba dengan URL sebagai -

let url = URL(fileURLWithPath: "/System/Library/Audio/UISounds/payment_success.caf")
var soundID: SystemSoundID = 0
AudioServicesCreateSystemSoundID(url as CFURL, &soundID)
AudioServicesPlaySystemSound(soundID);

https://github.com/klaas/SwiftySystemSounds/blob/master/README.md

4
Jack

Untuk Swift, Anda dapat melihat daftar lengkap bunyi dan nada dering sistem contoh.

Sunting: Ok, berikut adalah bagian kode yang paling penting dari contoh ini:

    ///The directories where sound files are located.
    let rootSoundDirectories: [String] = ["/Library/Ringtones", "/System/Library/Audio/UISounds"]

    ///Array to hold directories when we find them.
    var directories: [String] = []

    ///Tuple to hold directories and an array of file names within.
    var soundFiles: [(directory: String, files: [String])] = []

    //Starting with the "/Library/Ringtones" & "/System/Library/Audio/UISounds" directories, it looks for other sub-directories just one level lower and saves their relative path in directories array.
    //- URLs: All of the contents of the directory (files and sub-directories).
    func getDirectories() {
        let fileManager: NSFileManager = NSFileManager()
        for directory in rootSoundDirectories {
            let directoryURL: NSURL = NSURL(fileURLWithPath: "\(directory)", isDirectory: true)

            do {
                if let URLs: [NSURL] = try fileManager.contentsOfDirectoryAtURL(directoryURL, includingPropertiesForKeys: [NSURLIsDirectoryKey], options: NSDirectoryEnumerationOptions()) {
                    var urlIsaDirectory: ObjCBool = ObjCBool(false)
                    for url in URLs {
                        if fileManager.fileExistsAtPath(url.path!, isDirectory: &urlIsaDirectory) {
                            if urlIsaDirectory {
                                let directory: String = "\(url.relativePath!)"
                                let files: [String] = []
                                let newSoundFile: (directory: String, files: [String]) = (directory, files)
                                directories.append("\(directory)")
                                soundFiles.append(newSoundFile)
                            }
                        }
                    }
                }
            } catch {
                debugPrint("\(error)")
            }
        }
    }

    //For each directory, it looks at each item (file or directory) and only appends the sound files to the soundfiles[i]files array.
    //- URLs: All of the contents of the directory (files and sub-directories).
        func loadSoundFiles() {
            for i in 0...directories.count-1 {
                let fileManager: NSFileManager = NSFileManager()
                let directoryURL: NSURL = NSURL(fileURLWithPath: directories[i], isDirectory: true)

                do {
                    if let URLs: [NSURL] = try fileManager.contentsOfDirectoryAtURL(directoryURL, includingPropertiesForKeys: [NSURLIsDirectoryKey], options: NSDirectoryEnumerationOptions()) {
                        var urlIsaDirectory: ObjCBool = ObjCBool(false)
                        for url in URLs {
                            if fileManager.fileExistsAtPath(url.path!, isDirectory: &urlIsaDirectory) {
                                if !urlIsaDirectory {
                                    soundFiles[i].files.append("\(url.lastPathComponent!)")
                                }
                            }
                        }
                    }
                } catch {
                    debugPrint("\(error)")
                }
            }
        }

Contoh menunjukkan file suara sistem dalam tampilan tabel. Suara dimainkan seperti yang ditunjukkan dalam fungsi ini:

override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
        //Play the sound
        let directory: String = soundFiles[indexPath.section].directory
        let fileName: String = soundFiles[indexPath.section].files[indexPath.row]
        let fileURL: NSURL = NSURL(fileURLWithPath: "\(directory)/\(fileName)")
        do {
            model.audioPlayer = try AVAudioPlayer(contentsOfURL: fileURL)
            model.audioPlayer.play()
        } catch {
            debugPrint("\(error)")
        }
    }

Di mana model.audioPlayer hanyalah sebuah instance dari AVAudioPlayer:

///Audio player responsible for playing sound files.
var audioPlayer: AVAudioPlayer = AVAudioPlayer()
4
Despotovic

Solusi khusus kakao ini menggunakan file audio yang ada untuk memutar suara . Metode ini dapat digunakan untuk memutar file suara apa pun . AVFoundation.framework harus ditambahkan ke kerangka kerja Anda . Anda harus menentukan atau hapus makro yang saya gunakan yang cukup jelas.

Saya menambahkan kategori ke AVAudioPlayer sebagai berikut:

AVAudioPlayer + .h 

 #import <AVFoundation/AVAudioPlayer.h>

@interface AVAudioPlayer ( CapSpecs )
+ (AVAudioPlayer*) click;
+ (AVAudioPlayer*) tink;
+ (AVAudioPlayer*) tock;
+ (AVAudioPlayer*) withResourceName: (NSString*) aName;
@end

AVAudioPlayer + .m

 #import "AVAudioPlayer+.h"

@implementation AVAudioPlayer ( CapSpecs )
+ (AVAudioPlayer*) click {
    StaticReturn ( [AVAudioPlayer withResourceName: @"iPod Click"] );
}
+ (AVAudioPlayer*) tink {
    StaticReturn ( [AVAudioPlayer withResourceName: @"Tink"] );
}
+ (AVAudioPlayer*) tock {
    StaticReturn ( [AVAudioPlayer withResourceName: @"Tock"] );
}
+ (AVAudioPlayer*) withResourceName: (NSString*) aName {
    NSBundle* zBundle = [NSBundle bundleWithIdentifier: @"com.Apple.UIKit"];
    NSURL* zURL = [zBundle URLForResource: aName withExtension: @"aiff"];
    (void) RaiseIfNil ( nil, zURL, ([SWF @"URL for %@",aName]) );
    NSError* zError = nil;
    AVAudioPlayer* zAudio = [[AVAudioPlayer alloc] initWithContentsOfURL: zURL error: &zError];
    RaiseError ( nil, zError, @"AVAudioPlayer init error" );

#ifdef DEBUG
    //  Apple records the console dump which occurs as a bug in the iOS simulator
    //  all of the following commented code causes the BS console dump to be hidden
    int zOldConsole = dup(STDERR_FILENO);   // record the old console
    freopen("/dev/null", "a+", stderr); // send console output to nowhere
    (void)[zAudio prepareToPlay];       // create the BS dump
    fflush(stderr);             // flush the console output
    dup2(zOldConsole, STDERR_FILENO);   // restore the console output
#endif

    return zAudio;
}
@end
1
carmin

Untuk Swift

import AVFoundation

func play(sound: String) {
        var soundID: SystemSoundID = SystemSoundID()
        let mainBundle = CFBundleGetMainBundle()
        if let ref = CFBundleCopyResourceURL(mainBundle, sound as CFString, nil, nil) {
            AudioServicesCreateSystemSoundID(ref, &soundID);
            AudioServicesPlaySystemSound(soundID);
        }
}

implementasi @ Krishnabhadra

0
alecnash