1. 程式人生 > >iOS播放系統音訊的幾種方式

iOS播放系統音訊的幾種方式

播放系統音訊的幾種方式

  1. 系統提示音的播放,有一個很方便的工具類AudioToolbox
    參照這裡的系統提示音id對照表
#import <AudioToolbox/AudioToolbox.h>

//播放系統提示音,通過自動定義好的soundID就可以直接播放
SystemSoundID soundIDTest = 1007;
AudioServicesPlaySystemSound(soundIDTest);
  1. 這個工具類還可以播放自定義的聲音檔案,通過AudioServicesCreateSystemSoundID建立一個soundId就能播放
#import <AudioToolbox/AudioToolbox.h>
//播放test.wav檔案 static SystemSoundID soundIDTest = 0;//當soundIDTest == kSystemSoundID_Vibrate的時候為震動 NSString * path = [[NSBundle mainBundle] pathForResource:@"test" ofType:@"wav"]; //這個path也可以是系統音訊資料夾的位置 //提示音音訊檔案位置:/System/Library/Audio/UISounds //電話音訊檔案位置:/Library/Ringtones //NSString * path = @"/Library/Ringtones/Waves.m4r"
if (path) { AudioServicesCreateSystemSoundID( (__bridge CFURLRef)[NSURL fileURLWithPath:path], &soundIDTest ); } AudioServicesPlaySystemSound( soundIDTest );
  1. 用AVFoundation播放,這個有更多的控制功能,帶有delegate
NSString *filePath = [mainBundle pathForResource:@"MySong"ofType:@"mp3"];//獲取音訊檔案
NSData *fileData = [NSData dataWithContentsOfFile:filePath];
NSError
*error = nil; //可以通過NSData初始化,也可以通過FileUrl self.audioPlayer = [[AVAudioPlayer alloc] initWithData:fileDataerror:&error]; //fileUrl初始化 //NSURL *url = [NSURL fileURLWithPath:filePath]; //AVAudioPlayer *avAudioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:nil]; if (self.audioPlayer != nil) { self.audioPlayer.delegate = self; if ([self.audioPlayer prepareToPlay] &&[self.audioPlayer play]) { //成功播放音樂 } else { //播放失敗 } } else { /* 無法例項AVAudioPlayer */ } #pragma mark - 播放器代理方法 -(void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag{ NSLog(@"音樂播放完成..."); }

疑問

既然iOS的檔案系統是有沙盒隔離的,為什麼直接訪問系統音訊的兩個系統目錄卻有許可權?

相關推薦

iOS播放系統音訊方式

播放系統音訊的幾種方式 系統提示音的播放,有一個很方便的工具類AudioToolbox 參照這裡的系統提示音id對照表 #import <AudioToolbox/AudioToolbox.h> //播放系統提示音,通過自動定義好的s

iOS 連線外設的方式

    聯絡人:石虎 QQ:1224614774   暱稱: 嗡嘛呢叭咪哄                         &

iOS 執行緒同步方式

多執行緒同步目的有以下幾個方面:第一,對一段程式碼的執行進行保護,如果同時執行一段程式碼,中間的臨時變數可能會互相干擾造成結果不對;第二,對資源的保護,多個執行緒執行不同的程式碼,但是可能涉及同一個資源;第三,訊息傳遞,一個執行緒通知另外一個執行緒發生了一件事。

IOS 之資料庫 的方式

在iOS開發過程中,不管是做什麼應用,都會碰到資料儲存的問題。將資料儲存到本地,能夠讓程式的執行更加 流暢,不會出現讓人厭惡的菊花形狀,使得使用者體驗更好。下面介紹⼀一下資料儲存的方式: 1.NSKeyedArchiver:採用歸檔的形式來儲存資料,該資料物件需要遵守NSCoding協議,並且該物件對應

iOS 資料儲存的方式

在iOS開發過程中常用的本地化儲存有五種方式: 1.plist (XML屬性列表歸檔 NSArray\NSDictionary) 2.preference (偏好設定\NSUserDefaults) (本質還是通過plist來儲存資料,但是使用更加簡單,無需關注檔案、資料夾

Java播放聲音的方式

課程設計用的方法 import Java.applet.AudioClip; import java.io.*; import java.applet.Applet; import java.awt.Frame; import java.NET.Malformed

應用系統之間數據傳輸的方式

導致 最簡 批量 發生 插入 響應報文 開放 src www 轉載自:http://www.cnblogs.com/aigongsi/archive/2012/04/26/2413646.html 隨著近年來SOA(面向服務技術架構)的興起,越來越多的應用系統開始進行分布式

iOS代碼加密的方式

red .sh 最簡 應用安全 adr 變量名 尋找 技術分享 混淆 眾所周知的是大部分iOS代碼一般不會做加密加固,因為iOS APP一般是通過AppStore發布的,而且蘋果的系統難以攻破,所以在iOS裏做代碼加固一般是一件出力不討好的事情。萬事皆有例外,不管iOS、a

Linux系統軟件安裝的方式

rpm包管理 沒有 hat 步驟 xxx 安裝步驟 ger 所有 最好 Linux系統,一個文件能不能執行看的是有沒有可執行權限x,不過真正的可執行文件是二進制文件(binary file),舉例來說Linux上的c語言源碼編寫完後,通過gcc程序編譯後就可以創建一個可執

iOS關於載入圖片的方式選擇

最近在開發過程中遇到一些效能優化的東西,這次來說說關於圖片載入的效能優化和選擇。 大家都知道建立UIImage常用以下幾種方式 + (nullable UIImage *)imageNamed:(NSString *)name; // load from main bundle

iOS中保證執行緒安全的方式與效能對比

一、前言 前段時間看了幾個開源專案,發現他們保持執行緒同步的方式各不相同,有@synchronized、NSLock、dispatch_semaphore、NSCondition、pthread_mutex、OSSpinLock。後來網上查了一下,發現他們的實現機制各不相同,效能也各不一

Linux系統中安裝軟體的方式

目錄 紅帽派: Linux有很多種發行版本,各種發行版本之間安裝軟體方式和命令不一樣,同一個版本之間安裝軟體也有不同的方法。但是,大體來說,Linux有兩大派系,一個是紅帽派系,包含Redhat、Centos、Fedora等。還有一個是Debian

iOS 實現圖片圓角的方式

第一種方法:通過設定layer的屬性 最簡單的一種,但是很影響效能,一般在正常的開發中使用很少. UIImageView *imageView = [[UIImageView alloc]initWithFrame:CGRectMake(100, 100, 100, 10

C語言獲取系統時間的方式

C語言中如何獲取時間?精度如何? 1 使用time_t time( time_t * timer ) 精確到秒 2 使用clock_t clock() 得到的是CPU時間 精確到1/CLOCKS_PER_SEC秒 3 計算時間差使用double difftime( time_t timer1, time_

Android開發——去掉系統自帶標題欄的方式

    今天在練習自定義標題欄(Android初級開發(四)——補充3)的過程中遇到了隱藏系統自帶標題欄的問題,現將幾種去掉系統自帶標題欄的方式做一總結。大體上可以分為兩種方式,一種是修改xml檔案(這種方式產生的效果作用於所有Activity),一種是編碼實現(這種方式產

iOS NSthread & Thread 開啟執行緒的方式

一、開啟執行緒執行指定物件的方法 /** 引數1: 執行引數2方法的物件 引數2: 開啟執行緒後執行的方法 引數3: 傳遞的物件資料(引數2的方法可以直接用) */ // OC - (

應用系統之間資料傳遞的方式

隨著近年來SOA(面向服務技術架構)的興起,越來越多的應用系統開始進行分散式的設計和部署。 系統由原來單一的技術架構變成面向服務的多系統架構。 原來在一個系統之間可以完成的業務流程,通過多系統的之間多次互動來實現。 這裡不打算介紹如何進行S

C語言獲取系統時間的方式

四.設定計時器 定義TIMER ID #define TIMERID_JISUANFANGSHI 2 在適當的地方設定時鐘,需要開始其作用的地方; SetTimer(TIMERID_JISUANFANGSHI,200,NULL); 在不需要定時器的時候的時候銷燬掉時鐘 KillTimer(TIMERID_J

【C獲取系統時間】C語言獲取系統時間的方式

C 語言中如何獲取時間?精度如何? 1 使用 time_t time( time_t * timer ) 精確到秒 2 使用 clock_t clock() 得到的是 CPU 時間 精確到 1/CLOCKS_PER_SEC 秒 3 計算時間差使用 double difftime( time_t tim

iOS中ViewController載入View的方式

ViewController 載入 View 的方式有: 建立 ViewController 的同時載入 View,此種方式可分別通過載入關聯1了 VC 的 xib,或純程式碼建立實現。相關的呼叫方法有: init 載入關聯了 VC 的 xib,或者純