日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

iOS开发 AVAudioPlayer

發(fā)布時間:2024/4/13 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 iOS开发 AVAudioPlayer 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

簡述

AVAudioPlayer 是一個屬于 AVFoundation.framework 的一個類,它的功能類似于一個功能強大的播放器,AVAudioPlayer 支持廣泛的音頻格式,主要是以下這些格式。

  • AAC
  • AMR (Adaptive multi-Rate,一種語音格式)
  • ALAC (Apple lossless Audio Codec)
  • iLBC (internet Low Bitrate Codec,另一種語音格式)
  • IMA4 (IMA/ADPCM)
  • linearPCM (uncompressed)
  • u-law 和 a-law
  • MP3 (MPEG-Laudio Layer 3)

AVAudioPlayer 的使用

AVAudioPlayer 初始化

  • initWithContentsOfURL: error: 從URL加載音頻,返回 AVAudioPlayer 對象
  • initWithData: error: 加載NSdata對象的音頻文件,返回 AVAudioPlayer 對象
  • AVAudioPlayer方法調(diào)用

  • - (BOOL)play 開始或恢復(fù)播放,調(diào)用該方法時,如果該音頻還沒有準(zhǔn)備好,程序會隱士執(zhí)行 - (BOOL)prepareToPlay 方法
  • - (void)pause 暫停
  • - (void)stop 停止
  • - (BOOL)playAtTime:(NSTimeInterval)time NS_AVAILABLE(10_7, 4_0) 在某個時間點播放
  • - (BOOL)prepareToPlay 準(zhǔn)備開始播放
  • - (void)updateMeters 更新音頻測量值,注意如果要更新音頻測量值必須設(shè)置meteringEnabled為YES,通過音頻測量值可以即時獲得音頻分貝等信息
  • - (float)averagePowerForChannel:(NSUInteger)channelNumber 獲得指定聲道的分貝峰值,注意如果要獲得分貝峰值必須在此之前調(diào)用updateMeters方法
  • 使用 AVAudioPlayer 讀取音頻信息

  • volume 播放器的音頻增益,值:0.0~1.0
  • pan NS_AVAILABLE(10_7, 4_0) 立體聲設(shè)置 設(shè)為 -1.0 則左邊播放 設(shè)為 0.0 則中央播放 設(shè)為 1.0 則右邊播放
  • enableRate 是否允許改變播放速率
  • rate NS_AVAILABLE(10_8, 5_0) 播放速率 0.5 (半速播放) ~ 2.0(倍速播放) 注1.0 是正常速度
  • playing 是否正在播放音頻
  • numberOfLoops 循環(huán)次數(shù),如果要單曲循環(huán),設(shè)置為負(fù)數(shù)
  • numberOfChannels 該音頻的聲道次數(shù) (只讀)
  • duration 該音頻時長
  • currentTime 該音頻的播放點
  • deviceCurrentTime 輸出設(shè)備播放音頻的時間,注意如果播放中被暫停此時間也會繼續(xù)累加
  • url 音頻文件路徑,只讀
  • data 音頻數(shù)據(jù),只讀
  • channelAssignments 獲得或設(shè)置播放聲道
  • 代理方法

  • - (void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag; 音頻播放完成
  • - (void)audioPlayerDecodeErrorDidOccur:(AVAudioPlayer *)player error:(NSError * __nullable)error 音頻解碼發(fā)生錯誤
  • - (void)audioPlayerBeginInterruption:(AVAudioPlayer *)player 如果音頻被中斷,比如有電話呼入,該方法就會被回調(diào),該方法可以保存當(dāng)前播放信息,以便恢復(fù)繼續(xù)播放的進(jìn)度
  • 代碼

    AVAudioPlayer 初始化

    首先導(dǎo)入兩首格式為 mp3 的歌曲,再導(dǎo)入歌手圖片

    在 ViewController.h 導(dǎo)入

    #import <AVFoundation/AVFoundation.h> #import <MediaPlayer/MediaPlayer.h> 復(fù)制代碼

    然后必須持有一個 AVAudioPlayer 對象,若此對象不是屬性,則無法播放

    @property (nonatomic , strong) AVAudioPlayer *player; 復(fù)制代碼

    添加控件如圖所示,給控件命名

    獲取制定 url 對象

    NSURL *url = [[NSBundle mainBundle] URLForResource:@"吳亦凡-時間煮雨" withExtension:@"mp3"]; 復(fù)制代碼

    初始化 AVAudioPlayer 對象

    self.player = [[AVAudioPlayer alloc]initWithContentsOfURL:url error:nil]; 復(fù)制代碼

    設(shè)置代理

    self.player.delegate = self; 復(fù)制代碼

    這樣就播放器就初始化完成了

    將storyboard里面 開始 按鈕綁定 - (IBAction)start:(id)sender 方法

    - (IBAction)start:(id)sender {if ([self.player isPlaying]) {[self.startBtn setBackgroundImage:[UIImage imageNamed:@"播放"] forState:0];[self.player pause];}else{[self.startBtn setBackgroundImage:[UIImage imageNamed:@"暫停"] forState:0];[self.player play];}if (_timer == nil) {_timer = [NSTimer scheduledTimerWithTimeInterval:0.01 target:self selector:@selector(updateProgress) userInfo:nil repeats:YES];}} 復(fù)制代碼

    注: 上訴代碼中定義了一個 NSTimer 變量,因為播放器沒有播放進(jìn)程的委托,所以只能自定義NSTimer變量對播放器進(jìn)行監(jiān)控

    @property (strong, nonatomic) NSTimer *timer; 復(fù)制代碼

    將storyboard里面 停止 按鈕綁定 - (IBAction)stop:(id)sender 方法

    - (IBAction)stop:(id)sender {[self.player stop];//計時器停止[_timer invalidate];//釋放定時器_timer = nil; } 復(fù)制代碼

    設(shè)置剛才綁定的定時器調(diào)用方法updateProgress

    -(void)updateProgress{//進(jìn)度條顯示播放進(jìn)度self.progress.progress = self.player.currentTime/self.player.duration;self.info1.text = [NSString stringWithFormat:@"當(dāng)前播放時間%f",self.player.currentTime]; } 復(fù)制代碼

    實現(xiàn) AVAudioPlayer 的委托方法

    - (void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag{if (player == _player && flag) {[self.startBtn setBackgroundImage:[UIImage imageNamed:@"播放"] forState:0];} } -(void)audioPlayerBeginInterruption:(AVAudioPlayer *)player{if (player == _player){NSLog(@"播放被中斷");} }復(fù)制代碼

    此時,音樂就可以播放了!!!

    但是,人們使用音樂大都是后臺播放,那么如何添加后臺播放支持呢?

    后臺播放

    在項目里 info.plist 右鍵 open As -- source code 添加代碼:

    <key>UIBackgroundModes</key><array><string>audio</string></array> 復(fù)制代碼

    同樣,代碼里面也要添加后臺播放支持

    //設(shè)置鎖屏仍能繼續(xù)播放 [[AVAudioSession sharedInstance] setCategory: AVAudioSessionCategoryPlayback error:nil]; [[AVAudioSession sharedInstance] setActive: YES error: nil]; 復(fù)制代碼

    這樣 音樂在后臺就可以播放了!!

    那么很多播放器都有一個功能,那就是在用戶拔掉耳機的時候,暫停播放

    監(jiān)聽播放設(shè)備

    //添加通知,拔出耳機后暫停播放 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(routeChange:) name:AVAudioSessionRouteChangeNotification object:nil];/*** 一旦輸出改變則執(zhí)行此方法** @param notification 輸出改變通知對象*/ -(void)routeChange:(NSNotification *)notification{NSDictionary *dic=notification.userInfo;int changeReason= [dic[AVAudioSessionRouteChangeReasonKey] intValue];//等于AVAudioSessionRouteChangeReasonOldDeviceUnavailable表示舊輸出不可用if (changeReason==AVAudioSessionRouteChangeReasonOldDeviceUnavailable) {AVAudioSessionRouteDescription *routeDescription=dic[AVAudioSessionRouteChangePreviousRouteKey];AVAudioSessionPortDescription *portDescription= [routeDescription.outputs firstObject];//原設(shè)備為耳機則暫停if ([portDescription.portType isEqualToString:@"Headphones"]) {[self.player pause];}} } 復(fù)制代碼

    這樣就能在拔掉耳機的時候,暫停播放了!!!

    但是似乎還是差了一些什么,好像鎖屏界面空空如也啊!!!

    定制鎖屏界面

    設(shè)置后臺播放時顯示的東西,例如歌曲名字,圖片等

    要用到 <MediaPlayer/MediaPlayer.h> 這個庫,剛才已經(jīng)導(dǎo)入過

    - (void)setPlayingInfo {// 設(shè)置后臺播放時顯示的東西,例如歌曲名字,圖片等MPMediaItemArtwork *artWork = [[MPMediaItemArtwork alloc] initWithImage:[UIImage imageNamed:@"吳亦凡.jpg"]];NSDictionary *dic = @{MPMediaItemPropertyTitle:@"時間煮雨",MPMediaItemPropertyArtist:@"吳亦凡",MPMediaItemPropertyArtwork:artWork};[[MPNowPlayingInfoCenter defaultCenter] setNowPlayingInfo:dic]; } 復(fù)制代碼

    這樣,圖片就在鎖屏界面顯示了,不過,鎖屏界面上面的三個按鈕,怎么控制播放呢!!

    接收鎖屏歌曲按鈕控制 (上一首,播放,下一首)

    首先,你要在一個繼承 UIResponder 類里面接收遠(yuǎn)程控制,本文以 ViewController 為例

    添加如下代碼,接受遠(yuǎn)程控制和取消遠(yuǎn)程控制。

    - (void)viewDidAppear:(BOOL)animated {// 接受遠(yuǎn)程控制[self becomeFirstResponder];[[UIApplication sharedApplication] beginReceivingRemoteControlEvents]; }- (void)viewDidDisappear:(BOOL)animated {// 取消遠(yuǎn)程控制[self resignFirstResponder];[[UIApplication sharedApplication] endReceivingRemoteControlEvents]; } 復(fù)制代碼

    接收方法設(shè)置

    - (void)remoteControlReceivedWithEvent:(UIEvent *)event {if (event.type == UIEventTypeRemoteControl) { //判斷是否為遠(yuǎn)程控制switch (event.subtype) {case UIEventSubtypeRemoteControlPlay:if (![_player isPlaying]) {[_player play];}break;case UIEventSubtypeRemoteControlPause:if ([_player isPlaying]) {[_player pause];}break;case UIEventSubtypeRemoteControlNextTrack:NSLog(@"下一首");break;case UIEventSubtypeRemoteControlPreviousTrack:NSLog(@"上一首 ");break;default:break;}} } 復(fù)制代碼

    效果圖:

    這樣,播放器的基本功能就已經(jīng)完成 !! 代碼多有不祥之處,時間匆忙,敬請諒解,不實之處,請多包涵!!

    Demo地址: 點此下載

    總結(jié)

    以上是生活随笔為你收集整理的iOS开发 AVAudioPlayer的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 久久久精品视频网站 | 成人精品一区二区三区中文字幕 | 色激情五月| sm乳奴虐乳调教bdsm | 日韩中出| 亚洲AV不卡无码一区二区三区 | 加勒比波多野结衣 | 韩国伦理中文字幕 | 人人天天夜夜 | 好吊色av| 国产精品成人久久久久 | 天堂视频在线观看免费 | 69久久久久久 | 少妇一晚三次一区二区三区 | 欧美特黄aaa | 二男一女一级一片 | 日本一区二区三区欧美 | 在线观看1区 | 大尺度舌吻呻吟声 | 久久精品日韩无码 | 天堂亚洲| 激情爱爱网站 | 日韩激情图片 | 成人免费大片黄在线播放 | 伊人久久大香线蕉综合75 | 久久桃花网 | 精久久| www.欧美亚洲 | 成人久久久久久 | 国产一区二区三区电影在线观看 | 免费无码毛片一区二区app | 蜜桃视频一区二区 | 一区二区三区影院 | av视屏 | 国内一区二区三区 | 日本欧美国产一区二区三区 | 亚洲一区二区精品视频 | 中文字幕1区2区 | 精品国产高清在线观看 | 久久亚洲影院 | 欧美性tv| 鲁大师私人影院在线观看 | 欧美综合色区 | 国产精品激情偷乱一区二区∴ | 久久久免费 | 国产精品久久网 | 国产精品露脸视频 | 久久天天操 | 波多野吉衣在线观看视频 | 国产超碰人人爽人人做人人爱 | av中出| 亚洲精品男人的天堂 | 国产精品无码专区av免费播放 | 婷婷精品视频 | 999色综合| 免费在线黄色av | 国产精品二区一区二区aⅴ 一卡二卡三卡在线观看 | 波多野结衣1区 | 国产精品丝袜黑色高跟鞋 | 涩涩资源站 | 欧美日韩亚洲另类 | 人人艹人人 | 猫咪av网| 手机看片日韩 | 国产欧美网站 | 免费国产小视频 | 91插插插插插插插 | 精品国产中文字幕 | 欧美xxxxxx片免费播放软件 | 青青草原成人网 | 小泽玛利亚一区二区三区视频 | av中文在线观看 | 欧美性受xxxx白人性爽 | 欧美色图888| 亚洲www在线| 一本色道久久综合亚洲精品按摩 | 神马久久影院 | 久久黄色视屏 | 91精品看片 | 蜜臀av免费一区二区三区水牛 | 国产在线欧美日韩 | 免费黄色网址在线观看 | 国产xxxx做受性欧美88 | 91精品综合久久久久久五月天 | 成人小视频在线免费观看 | 亚洲精品在线视频 | 成人午夜免费福利视频 | 91夫妻视频 | xxxx视频在线| 色呦呦麻豆 | 五月天综合激情 | 人妻无码久久一区二区三区免费 | 一个色av | 久久免费视频2 | 好邻居韩国剧在线观看 | 精品视频一区二区 | 91亚洲精品久久久蜜桃借种 | 精品国产视频在线 | 在线免费观看福利 |