200 likes | 283 Views
Unit 12. MediaPlayer 元件 SurfaceView 元件語法 MediaPlayer 與 SurfaceView 結合 錄製音訊. 播放音訊視訊與錄音. 12.1 播放音訊. 越來越大的手機螢幕搭配功能強大的中央處理器,都是為了增強手機的多媒體效能;而今天能夠人手一支手機,強大的多媒體功能是主要原因之一。 使用手機聽音樂、看影片是手機族群除了電話功能外最常使用的功能,甚至要錄音也非難事。本章將製作這些功能應用軟體,詳細解說其中原理,讀者略做修改將可做出獨一無二的多媒體工具。. 12.1.1 MediaPlayer 元件
E N D
Unit 12 • MediaPlayer元件 • SurfaceView元件語法 • MediaPlayer與 SurfaceView結合 • 錄製音訊 播放音訊視訊與錄音
12.1 播放音訊 • 越來越大的手機螢幕搭配功能強大的中央處理器,都是為了增強手機的多媒體效能;而今天能夠人手一支手機,強大的多媒體功能是主要原因之一。 • 使用手機聽音樂、看影片是手機族群除了電話功能外最常使用的功能,甚至要錄音也非難事。本章將製作這些功能應用軟體,詳細解說其中原理,讀者略做修改將可做出獨一無二的多媒體工具。
12.1.1 MediaPlayer元件 • 首先製作播放音訊的工具。在 Android 中可以使用 MediaPlayer元件來播放音訊及視訊,MediaPlayer元件有許多方法可控制多媒體,常用方法如下表:
12.1.2 模擬器 SD 卡儲存檔案 • 多媒體檔案通常非常龐大,若使用可貴的手機系統記憶體來儲存,將是一種浪費,因此實作時大部分都把多媒體檔案存於 SD 記憶卡中。本章各節範例都需使用 SD 卡中的多媒體檔案,要將檔案複製到模擬器的 SD 卡中,可在 File Explorer 內操作。例如複製光碟 <ch14/mediafi le> 資料夾的 <greensleeves.mp3> 到模擬器的 SD 卡: • 在 EClipse整合環境中啟動模擬器,按Eclipse 整合環境右上角的DDMS,於 File Explorer 頁籤中點按要匯入檔案的資料夾, 此處點選 <mnt/sdcard>,按 匯入 鈕。
12.1.3 播放 SD 卡音訊 • 使用手機聽音樂是最基本的功能,在公共場所如公車、捷運、夜市等常看到年輕人戴著耳機聽手機歌曲。MediaPlayer元件可以播放多種格式的語音檔案,如:mp3、Midi、wav 及 ogg等。 • 要播放音訊 SD 卡中的音訊檔案,操作步驟如下: • 第一步當然是建立 MediaPlayer元件,例如建立一個名稱為 mediaplayer的 MediaPlayer元件:
12.1.4 範例:SD 卡音訊播放器 • 本範例是播放位於 SD 卡中音訊檔的播放軟體,不只有播放、暫停、停止等基本功能,而且能列出歌曲清單供點播,上一首、下一首、播完單曲後會自動播下一首,且結束最後一首後會回到第一首,循環不息。 • 螢幕下方列出 SD 卡中歌曲清單,點按歌曲名稱就會播放該歌曲,且在上方顯示歌曲名稱。六個按鈕功能依序為上一首、停止、播放、暫停、下一首、結束程式。播完單曲後會自動播下一首,在第一首按 鈕會到最後一首,同理,在最後一首按 鈕會到第一首。
12.1.5 播放資源檔案音訊 • 將多媒體檔案存放在 SD 卡上固然可以節省大量系統記憶體,但要發佈應用程式讓他人使用時,無法將 SD 卡中的檔案一起發佈。許多應用程式如遊戲軟體,會用到大量音效,這些音效大部分時間短暫,檔案很小,而且一定要隨應用程式一起發佈給他人使用,此時就要使用資源檔案音訊。 • 所謂資源檔案音訊就是將音訊檔案置於 <res/raw> 資料夾中,這樣就可以連應用程式一起發佈。取得資源檔案的方式為: • 播放資源音訊檔的方式與播放 SD 卡音訊檔並不完全相同,設定音訊檔案不是使用 setDataSource方法,而是使用 create 方法,語法為:
另外,prepare 方法一定要置於 try⋯catch偵錯區塊中,否則會產生錯誤。 • prepare 的語法為:
12.2 播放視訊 • 12.2.1 VideoView視訊播放器 • Android 系統內建了 VideoView元件用來播放視訊,使用此元件可輕易製作視訊播放器。VideoView元件的常用方法有:
使用 VideoView元件播放視訊檔案非常簡單,首先用 setVideoPath方法取得視訊檔案,語法為: • 在 VideoView元件可用 OnPreparedListener監聽事件來判斷是否正在播放視訊,其語法為:
12.2.2 範例:VideoView視訊播放器 • 點按下方 影片一 或 影片二 鈕就可播放影片,上方會顯示影片檔案名稱,移動控制軸或按下方控制鈕可改變影片播放位置。
12.2.3 SurfaceView元件語法 • SurfaceView繼承 View 類別,應用程式中繪圖、視訊播放及 Camera 照相等功能一般都使用 SurfaceView元件來呈現,為什麼呢?因為 SurfaceView元件可以控制顯示介面的格式,比如顯示的大小、位置等,而且 Android 還提供了 GPU 加速功能,能加快顯示速度。 • 對於 SurfaceView元件的存取,Android 提供了 SurfaceHolder類別來操作,使用 SurfaceView元件 的 getHolder方法即可取得 SurfaceHolder物件。 • 此處以建立一個顯示視訊的 SurfaceView元件為例:首先在版面配置檔中加入名稱為 sufVideo的 SurfaceView元件,接著建立 SurfaceHolder物件來操作 SurfaceView元件,語法為:
只要以 setType方法設定適當的來源模式就可讓應用程式顯示圖形或視訊了。setType方法的語法為: • 如 果 是 要 顯 示 SD 卡 中 視 訊 檔 案 或 照 相 等 外 部 資 訊,「 來 源 參 數 」 需 設 為「SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS」,表示顯示來源不是系統資源,而是由外部提供。例如要設定 sufHolder的來源模式:
12.2.4 MediaPlayer與 SurfaceView結合 • MediaPlayer元件結合 SurfaceView元件即可依照個人需求製作視訊播放器:由 MediaPlayer元件播放視訊,SurfaceView元件顯示視訊。 • 使用 MediaPlayer元件播放視訊,步驟如下: • 以 setAudioStreamType方 法 設 定 串 流 資 料 的 格 式 為 AudioManager.STREAM_MUSIC, 語法為 (MediaPlayer元件名稱為 mediaplayer ): • 再以 setDisplay方法設定顯示的 SurfaceView元件,SurfaceView元件需以 SurfaceHolder物件操作,所以 setDisplay方法的語法為:
12.2.5 範例:自訂格式視訊播放器 • 本範例視訊播放器功能、介面與操作都與上一節的播放音訊範例相同。
12.3 錄製音訊 • 12.3.1 MediaRecorder元件語法 • Android 提供 MediaRecorder元件來進行媒體採樣,MediaRecorder元件常用的方法如下表:
在 Android 中執行錄製音訊的步驟如下: • 的第一步是建立 MediaRecorder元件,例如建立名稱為 mediarecorder的 MediaRecorder元件: • 接著設定麥克風為輸入音訊來源: • 設定輸出檔案格式及音訊編碼方式皆為預設值:
12.3.2 範例:MediaRecorder錄音機 • 程式開啟後,會自動讀取 SD 卡中的錄音檔顯示於下方列表,點按檔名即可播放錄音檔。按 鈕就開始錄音,按 鈕停止錄音,按 鈕可播放剛錄的音訊檔,螢幕上方會隨時顯示目前的工作狀態。錄音檔自動以錄製的日期及時間組合做為檔案名稱,以記錄錄製時間。按鈕會隨不同功能變化,灰階表示按鈕無效。