播放系统声音而不导入自己的

是否有可能播放已有的系统声音而不导入自己的?

这个代码播放苹果系统的声音“Tock.aiff”..我相信你可以使用这个播放不同的系统声音

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

看到这个线程

系统声音的苹果的文件

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

我发现这个systemSoundID列表对于直接访问声音ID非常有用。
http://iphonedevwiki.net/index.php/AudioServices

例如,要播放一个按键的声音。

 #define systemSoundID 1104 AudioServicesPlaySystemSound (systemSoundID); 

您还需要在您的项目中添加AudioToolbox框架,并将#include <AudioToolbox.h>添加到.m或.h文件中。

您可以将其用于所有默认系统audio。

例如,对于轻敲声音用户来说:

 AudioServicesPlaySystemSound(1104); 

对于积极的声音,使用这个:

  AudioServicesPlaySystemSound(1054); 

负面的声音使用这个:

  AudioServicesPlaySystemSound(1053); 

完整的列表,你可以在这里看到。

所有系统声音列表: iOSSystemSoundsLibrary

你可以播放所有这些声音:

 AudioServicesPlaySystemSound (systemSoundID); 

改编自@ yannc2021

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

如果你想在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) 

对于快捷方式 ,您可以查看系统声音和铃声示例的完整列表 。

编辑:好的,这里是这个例子中最重要的代码:

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

该示例显示了表格视图中的系统声音文件。 声音播放如下所示:

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

其中model.audioPlayer只是AVAudioPlayer一个实例:

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

这种仅用于cocoa的解决scheme使用现有的audio文件来播放声音。 这种方法可以用来播放任何声音文件。 AVFoundation.framework将不得不被添加到你的框架。 你将不得不定义或删除我自己说明的macros。

我向AVAudioPlayer添加了一个类别,如下所示:

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 

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

@Krishnabhadra的执行