1. 程式人生 > >iOS開發————幾種音訊播放方式

iOS開發————幾種音訊播放方式

這篇同樣是編者對自己學習的小總結以及對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);
}