1. 程式人生 > >AVAudioPlayer音訊播放器--及--AudioServicesPlaySystemSound音訊服務

AVAudioPlayer音訊播放器--及--AudioServicesPlaySystemSound音訊服務

AVAudioPlayer音訊播放器

IOS中有三種播放音訊的方式:AVAudioPlayer、音訊服務、音訊佇列。

       此文主要講AVAudioPlayer,其他兩個請見相關文章。

AVAudioPlayer在AVFoundation框架下,所以我們要匯入AVFoundation.framework。

AVAudioPlayer類封裝了播放單個聲音的能力。播放器可以用NSURL或者NSData來初始化,要注意的是NSURL並不可以是網路url而必須是本地檔案URL,因為       AVAudioPlayer不具備播放網路音訊的能力,不過我們可以用過一點小手段使其具備這個能力,留待稍後講解。

        一個AVAudioPlayer只能播放一個音訊,如果你想混音你可以建立多個AVAudioPlayer例項,每個相當於混音板上的一個軌道。

一、建立一個播放器

  1. #import <AVFoundation/AVFoundation.h>     
  2. NSError* err;  
  3. AVAudioPlayer* player = [[AVAudioPlayer alloc]  
  4.                         initWithContentsOfURL:[NSURL fileURLWithPath:  
  5.                                               [[NSBundle mainBundle]pathForResource:  
  6.                                            @"music" ofType:@"m4a"
  7.                                            inDirectory:@"/"]]  
  8.                         error:&err ];//使用本地URL建立
  1. AVAudioPlayer* player = [[AVAudioPlayer alloc]  
  2.                             initWithData:myData   
  3.                             error:&err ];//使用NSData建立

        我之前講過AVAudioPlayer不可以播放網路URL,但是可以播放NSData,我們似乎受到了點啟發,我們可以通過網路URL去建立NSData,然後在通過AVAudioPlayer來播放NSData,這樣是不是就可以播放網路音樂了呢?但是此法並不可取,因為AVAudioPlayer只能播放一個完整的檔案,並不支援流式播放,所以必須是緩衝完才能播放,所以如果網路檔案過大抑或是網速不夠豈不是要等很久?所以播放網路音訊我們一般用音訊佇列。

二、播放器屬性

        建立一個AVAudioPlayer以後你就可以對它的各種屬性進行訪問或設定了 。

1.音量

  1. player.volume=0.8;//0.0~1.0之間
2.迴圈次數
  1. player.numberOfLoops = 3;//預設只播放一次
3.播放位置
  1. player.currentTime = 15.0;//可以指定從任意位置開始播放
4.聲道數
  1. NSUInteger channels = player.numberOfChannels;//只讀屬性
5.持續時間
  1. NSTimeInterval duration = player.dueration;//獲取取樣的持續時間

6.儀表計數

  1. player.meteringEnabled = YES;//開啟儀表計數功能
  2. [ player updateMeters];//更新儀表讀數
  3. //讀取每個聲道的平均電平和峰值電平,代表每個聲道的分貝數,範圍在-100~0之間。
  4. for(int i = 0; i<player.numberOfChannels;i++){  
  5. float power = [player averagePowerForChannel:i];  
  6. float peak = [player peakPowerForChannel:i];  
  7. }  

三、播放聲音

        準備了這麼久,終於可以播放了,心情激動啊。

  1. [ player prepareToPlay];//分配播放所需的資源,並將其加入內部播放佇列
  2. [player play];//播放
  3. [player stop];//停止

         是否覺得準備了這麼久,一下子就結束掉了,太快了,不用急,還有幾個重點。

四、代理方法

          加入播放出現異常,或者被更高級別的系統任務打斷,我們的程式還沒來得及收場就掛了,怎麼辦?不急,我們可以通過幾個委託方法很好地處理所有的情形。

         首先給player設定委託是必須的:

  1. player.delegate = self;  
  1. - (void)audioPlayerDidFinishPlaying:(AVAudioPlayer*)player successfully:(BOOL)flag{  
  2. 相關推薦

    AVAudioPlayer音訊播放----AudioServicesPlaySystemSound音訊服務

    AVAudioPlayer音訊播放器 IOS中有三種播放音訊的方式:AVAudioPlayer、音訊服務、音訊佇列。        此文主要講AVAudioPlayer,其他兩個請見相關文章。 AVAudioPlayer在AVFoundati

    OCiOS開發:音訊播放 AVAudioPlayer

    簡介 AVAudioPlayer音訊播放器可以提供簡單的音訊播放功能,其標頭檔案包含在AVFoudation.framework中。 AVAudioPlayer未提供視覺化介面,需要通過其提供的播放控制介面自行實現。 AVAudioPlayer僅能播放本地音

    AVAudioPlayer音訊播放—IOS開發

     IOS中有三種播放音訊的方式:AVAudioPlayer、音訊服務、音訊佇列。        此文主要講AVAudioPlayer,其他兩個請見相關文章。 AVAudioPlayer在AVFoundation框架下,所以我們要匯入AVFoundation.frame

    Wavesurfer.js音訊播放外掛的使用教程

    Wavesurfer.js是一款基於HTML5 canvas和Web Audio的音訊播放器外掛,本文主要記錄它及其視覺效果外掛Regions外掛的使用方法。 1、建立例項 引入外掛 import WaveSurfer from "wavesurfer.js"; 建立例項物件 t

    ffmpeg簡易播放的實現-音訊播放

    基於FFmpeg和SDL實現的簡易視訊播放器,主要分為讀取視訊檔案解碼和呼叫SDL顯示兩大部分。詳細流程可參考程式碼註釋。 本篇實驗筆記主要參考如下兩篇文章: [1]. 最簡單的基於FFMPEG+SDL的視訊播放器ver2(採用SDL2.0) [2]. An ffmpeg and SDL Tutorial

    頁面中H5的使用標籤如音訊播放和視訊播放

    1.音訊播放器使用的標籤為: <audio src="音訊的地址" controls="controls" preload="auto" autoplay="autoplay" loop="loop"> 屬性中src 為音訊的地址路徑,loop 是迴圈播放,如

    最簡單的基於FFMPEG+SDL的音訊播放 ver2 (採用SDL2 0)

                    =====================================================最簡單的基於FFmpeg的音訊播放器系列文章列表:=====================================================簡介之前做過一個

    [6] ffmpeg + SDL2 實現的視訊播放「視音訊同步」

    日期:2016.10.8 作者:isshe github:github.com/isshe 郵箱:[email protected] 平臺:ubuntu16.04 64bit

    python-pcm音訊播放

    50行pcm音訊播放器 基於python、pysdl2的音訊播放器: 開發環境是ubuntu mate 16.04 程式碼相容python2、python3 請安裝pysdl2支援包 sudo apt install python-sdl2 程式碼總共不到

    [4] ffmpeg + SDL2 實現的有雜音的音訊播放

    日期:2016.10.4 作者:isshe github:github.com/isshe 郵箱:[email protected] 平臺:ubuntu16.04 64bit 前言 ffmpeg將資料解碼成pcm。 SDL

    微信小程式 帶可拖動進度條和時間顯示的音訊播放

    眾所周知,微信官方自帶的音訊播放器是沒有進度條的,為了實現有進度條,並且拖動,只能自己寫一個了; 下面是演示圖 ①頁面載入完成後,能夠直接顯示音訊的時長 ②播放時,進度條變化,播放時間變化,拖動進度條可以跳轉到改進度播放 話不多說,直接上程式碼 首先是微信官

    黃聰:原生js的音訊播放,相容pc端和移動端(原創)

    更新時間:2018/9/3 下午1:32:54 更新說明:新增音樂的loop設定和ended事件監聽 loop為ture的時候不執行ended事件 1 2 3 4 5 6 7 8 9 10 11 12 13 14 const wx 

    最簡單的基於FFMPEG+SDL的音訊播放:拆分-解碼播放

    =====================================================最簡單的基於FFmpeg的音訊播放器系列文章列表:=====================================================本文補充記錄《

    HTML5用audio標籤做一個最簡單的音訊播放

    在做系統的時候,要求做一個音訊播放器,就在網上查找了一些資料,發現這樣的資料還是很千篇一律的,EasyUI框架並沒有給我們一個音訊播放器的功能,在bootstrap上有,但是也是結合html5來寫的,因此,我們在這裡就用純的html5血一個音訊播放器,如何播放本地的音訊。

    IOS 音訊播放

    例項:1.新建Empty Application專案,新增HomeViewController頁面  HomeViewController.h程式碼如下: #import <UIKit/UIKit.h> #import <AVFoundation/AVFoundation.h> @

    iOS 視訊音訊播放 檔案管理的實現

    本人根據自己所學做了一款免費的播放器悅覽播放器,包含以下功能: - 視訊播放 - 音訊播放 - 檔案管理 - WiFi傳輸 - 格式轉換 - 面對面檔案傳輸 - 後臺音訊播放和控制 - 二維碼掃描和生成

    基於FFmpeg和OpenSL ES的Android音訊播放實現

    前言 在以前的博文中,我們通過FFmpeg解碼,並基於OpenGL ES完成了視訊的渲染。本文我們將基於OpenSL ES完成native音訊的注入播放。 OpenSL ES也是The Khronos Group Inc組織制定的一個音訊規範,網上資料很多,

    android 視訊+音訊播放Demo

    程式主介面 MainActivity.java    1.主介面,頭部是兩個TextView(自定義類似指標效果),底部是ViewPager。ViewPager中每個頁面對應的是一個Fragment.這樣就搭起了首頁。     xml檔案程式碼: <?xml ve

    iOS音訊播放 (六):簡單的音訊播放實現

    在前幾篇中我分別講到了AudioSession、AudioFileStream、AudioFile、AudioQueue,這些類的功能已經涵蓋了第一篇中所提到的音訊播放所需要的步驟: 讀取MP3檔案 NSFileHandle解析取樣率、位元速率、時長等資訊,分離MP3中的音訊幀 AudioFileStr

    HTML5做的音訊播放,可以動態的更換音訊檔案的內容

    在做一個播放按鈕時突然用到了這個技術,具體還是蠻簡單的,一看就會,就是那個音訊檔案的src屬性動態賦值的時候花了點時間。看程式碼吧! function playOrPaused(obj) {