iOS開發————幾種音訊播放方式
阿新 • • 發佈:2019-01-24
這篇同樣是編者對自己學習的小總結以及對iOS初級開發者的小福利,大神莫吐槽...
首先來談談AVFoundation框架:它是iOS中用於處理基於時間的媒體資料的高階框架,也是基於Core Audio,Core Media,Core Video等框架構建的,充分利用了多核硬體的優勢並大量使用了Block和GCD機制。
所有的iOS App都具有預設的音訊會話,它定義了以下行為:
可以播放音訊,但是不能錄製音訊。
靜音模式下App播放的所有音訊都會靜音。
裝置鎖定時音訊處於靜音狀態。
App播放音訊時所有後臺播放的音訊都會靜音。
iOS系統中音訊播放方式:AVAudioPlayer,AVPlayer,播放系統聲音,音訊佇列(小編也不熟...)。
AVAudioPlayer:使用簡單,功能強大,但只能播放本地音訊。
AVPlayer:可以播放網路音訊,本地音訊和流媒體播放,但處理音訊不夠靈活。
播放系統聲音:系統聲音屬於非壓縮的儲存型別,但是系統聲音時長短,不超過30s,格式為 : caf / wav / aiff。
舉例:AVAudioPlayer
#import "ViewController.h" #import <AVFoundation/AVFoundation.h> @interface ViewController () <AVAudioPlayerDelegate> { AVAudioPlayer *_audioPlayer; AVPlayer *_avPlayer; } @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; //AVAudioPlayer //查詢本地音樂檔案路徑 NSString *filePath = [[NSBundle mainBundle] pathForResource:@"多遠都要在一起" ofType:@"mp3"]; //構建URL NSURL *url2 = [NSURL fileURLWithPath:filePath]; //建立音樂播放器 _audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:url2 error:nil]; //根據URL地址來讀取音樂檔案(寫在ViewDidLoad中會自動播放) [_audioPlayer prepareToPlay]; _audioPlayer.delegate = self; } - (IBAction)play:(id)sender { [_audioPlayer play]; } - (IBAction)pause:(id)sender { [_audioPlayer pause]; }
舉例:AVPlayer
舉例:播放系統聲音#import "ViewController.h" #import <AVFoundation/AVFoundation.h> @interface ViewController () <AVAudioPlayerDelegate> { AVAudioPlayer *_audioPlayer; AVPlayer *_avPlayer; } @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; //在iOS9之後,蘋果對http訪問進行了限制,需要設定info.plist檔案 //在info.plist檔案中加入欄位App Transport Secruity Settings //在其中新增Allow Arbitrary Loads ------ YES //使用AVPlayer來播放線上音樂 //@"http://218.76.27.57:8080/chinaschool_rs02/135275/153903/160861/160867/1370744550357/mp3" //建立URL NSURL *url = [NSURL URLWithString:@"http://218.76.27.57:8080/chinaschool_rs02/135275/153903/160861/160867/1370744550357.mp3"]; //建立播放器 _avPlayer = [[AVPlayer alloc] initWithURL:url]; [_avPlayer play]; }
#import "ViewController.h"
#import <AVFoundation/AVFoundation.h>
@interface ViewController () <AVAudioPlayerDelegate> {
AVAudioPlayer *_audioPlayer;
AVPlayer *_avPlayer;
SystemSoundID soundID;
}
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
//播放系統聲音
//查詢聲音檔案(此聲音檔案是編者自己新增到程式包中去的)
NSString *filePath2 = [[NSBundle mainBundle] pathForResource:@"44th Street Medium" ofType:@"caf"];
//構建URL
NSURL *url3 = [NSURL fileURLWithPath:filePath2];
//建立系統聲音ID
SystemSoundID soundID;
//註冊聲音檔案,並且將ID儲存
AudioServicesCreateSystemSoundID((__bridge CFURLRef _Nonnull)(url3), &soundID);
//播放聲音
AudioServicesPlaySystemSound(soundID);
}
//移除系統聲音
- (void)dealloc {
//移除註冊的系統聲音
AudioServicesRemoveSystemSoundCompletion(soundID);
}