第 8 章


使用 Mobile Media API

JSR 135 (Mobile Media API (MMAPI)) 提供標準的 API,供您描繪與擷取時間型式的媒體,例如音效或視訊。此 API 的設計可彈性適應不同裝置支援的媒體格式、協定與功能。如需有關使用 MMAPI 進行程式設計的資訊,請參閱以下文章︰

http://developers.sun.com/techtopics/mobility/apis/articles/mmapi_overview/
http://developers.sun.com/techtopics/mobility/midp/articles/mmapioverview/


8.1 支援的格式與協定

模擬器的 MMAPI 實作支援下列媒體類型。


表格 8-1 支援的 MMAPI 媒體格式

MIME 類型

描述

audio/amr

Adaptive Multi-Rate

audio/midi

MIDI 檔案

audio/sp-midi

Scalable Polyphony MIDI

audio/x-tone-seq

MIDP 2.0 鈴聲序列

audio/x-wav

WAV PCM 取樣音效

image/gif

GIF 89a (GIF 動畫)

video/mpeg

MPEG 視訊

video/vnd.sun.rgb565

視訊擷取

 


8.2 Adaptive Multi-Rate (AMR) 內容

Sun JavaTM Wireless Toolkit for CLDC 模擬對 Adaptive Multi-Rate (AMR) 內容 (http://www.ietf.org/rfc/rfc3267.txt) 的支援。儘管工具組無法解碼 AMR 內容,但實作將在收到請求時為 AMR 內容傳回播放程式。

8.2.1 Windows

在 Windows 上,AMR 檔案將轉換為一般 WAVE 檔案並傳送至 Qsound。由於 Windows 版本與 3GPP 實作可互通,因此您無須執行任何動作即可播放 AMR 檔案。

8.2.2 Linux

Linux 的 AMR 支援以 3GPP AMR Narrow Band (AMR-NB) Reference Implementation 解碼器與 SOX 音效處理器 (不支援 AMR Wide Band) 為基礎。

8.2.2.1 啟用 AMR 支援

遵循以下步驟啟用 AMR 支援。

1. 獲得 3GPP 提供的 AMR-NB RI。

有若干可用的版本。其中的一個版本位於︰

http://www.3gpp.org/ftp/Specs/archive/26_series/26.073/26073-530.zip

2. 開啟封裝中包含的 makefile。

找到以「CFLAGS =」開頭的行。

a. 增加 DMMS_IO 選項。

b. 移除 pedantic-errors 選項。

儲存與編譯。如果出現問題,另請嘗試移除 O3 (或 O2) 最佳化旗標 (二進位將近乎大小的兩倍)。

3. 若要生成 RI,請輸入︰ make VAD=VAD1

編譯後,您應具有一個名稱為 decoder 的二進位檔案。其為 AMR-NB 解碼器本身。

4. 設定環境變數 AMR_DECODER 以指向解碼器路徑。

例如,如果 ~/amr 是該解碼器的路徑,請指定︰

export AMR_DECODER=~/amr/decoder

5. 設定 decoder 檔案的執行存取權限。

在該解碼器的同一目錄下,鍵入︰

chmod 555 ./decoder

6. 按以下步驟測試解碼器︰

如第 A.13 節, MobileMediaAPI 所述,執行 MobileMediaAPI 示範 Simple Player。從主功能表中選取 [Simple Player],然後選取「AMR Narrow Band [jar]」。請記得打開喇叭。

8.2.2.2 AMR 格式支援

某些 AMR-NB 的「複製」版本也可能有問題。AMR-NB 編碼解碼器資料似乎至少有兩種檔案格式︰

其指定於 draft-ietf-avt-rtp-amr-10.txt 第 6.2 節,涵蓋在 Ericsson AMR 轉換器工具中。(此草案為 RFC 3267 的早期形式)。這些檔案由 Ericsson AMR 工具與 Nokia Series 60 電話處理。它們的標頭為 #!AMR\n,並使用 big-endian 編碼。

此格式指定於附錄 A 的 3GPP TS 26.101。這些檔案可由 3GPP TS 26.104 浮點參考編碼解碼器來源套裝軟體編碼與解碼。這些檔案沒有標頭,並使用 little-endian 編碼。

若要在這些格式間相互轉換,請嘗試此 Python 程序檔︰

http://www.connactivity.com/~eaw/amrwork/amrconv.py


8.3 使用 MediaControlSkin

Sun JavaTM Wireless Toolkit for CLDC 隨附一個著重於多媒體播放與控制的模擬器面板 MediaControlSkin。此面板包括的按鈕上,有代表播放、停止、音量大小和其他指令的符號。若要瞭解 MediaControlSkin 的用處,請以 MobileMediaAPI 示範應用程式試用。


8.4 媒體擷取

Sun JavaTM Wireless Toolkit for CLDC 模擬器支援音效與視訊擷取。音效擷取的支援方式,是利用模擬器執行系統的擷取功能。

視訊擷取的支援方式是模擬相機輸入。

如需示範如何擷取音效與視訊的詳細資訊與原始碼,請參考 MobileMediaAPI 應用程式範例。


8.5 正常 MIDlet

MIDlet 有 MIDP 規格所定義的生命週期。MIDlet 可因事件而暫停,如來電事件。正常 MIDlet 會在暫停時釋出重要裝置資源,並在 MIDlet 重新繼續時重新配置或重新啟動這些資源。在 MMAPI 中,任何描繪內容的 [播放程式] 應在 MIDlet 暫停時停止。

Sun JavaTM Wireless Toolkit for CLDC 會在您暫停 MIDlet 但其執行中的 [播放程式] 卻沒有停止時,於主控台上顯示訊息。您可使用在 MobileMediaAPI 示範應用程式中的 Pausing Audio Test MIDlet 來測試這項功能。如需詳細資訊,請參閱附錄 A。

每一執行中模擬器的警告訊息僅顯示一次。


8.6 鈴聲

如第 A.13.1 節, Simple Tones 與第 A.13.2 節, Simple Player 所示,MMAPI 可用於播放鈴聲。常用的鈴聲格式有好幾種。您可以下載鈴聲或建立自己的鈴聲。

8.6.1 下載鈴聲

鈴聲可從許多網站下載,包括︰

8.6.2 鈴聲格式

本小節提供了若干格式範例

http://www.convertyourtone.com/rtttl.html

以下提供了 Nokia Composer 格式的貝多芬第九號交響曲︰

16g1,16g1,16g1,4#d1,16f1,16f1,16f1,4d1,16g1,16g1,16g1,16#d1,

16#g1,16#g1,16#g1,16g1,16#d2,16#d2,16#d2,4c2,16g1,16g1,16g1,

16d1,16#g1,16#g1,16#g1, 16g1,16f2,16f2,16f2,4d2

貝多芬 G大調小步舞曲︰

a b + c b + c b + c b + C p + d a B p + c g A

p f g a g a g a g A p b f G p a e F

貝多芬第九號交響曲主旋律︰

f f f # C # d # d # d C p f f f # c # f #f # f f +# c + # c + # c # A ff f c # f # f # f f + # d + # d + # d

Inspector Gadget 主旋律︰

C2(1/8) D2(1/16) Dis2(1/8) F2(1/16) G2(1/8)

P(1/16) Dis2(1/8) P(1/16) Fis2(1/8) P(1/16)

D2(1/8) P(1/16) F2(1/8) P(1/16) Dis2(1/8)

P(1/16) C2(1/8) D2(1/16) Dis2(1/8) F2(1/16)

G2(1/8) P(1/16) C3(1/8) P(1/16) B2(1/2) P(1/4)

C2(1/8) D2(1/16) Dis2(1/8) F2(1/16) G2(1/8) P(1/16)

Dis2(1/8) P(1/16) Fis2(1/8) P(1/16) D2(1/8) P(1/16)

F2(1/8) P(1/16) Dis2(1/8) P(1/16) C3(1/8) B2(1/16)

Ais2(1/8) A2(1/16) Gis2(1/2) G2(1/8) P(1/16) C3(1/2)

貝多芬第九號交響曲︰

4 F2 F2 F2 C#4 D#2 D#2 D#2 C4 R2 F2 F2 F2 C#2 F#2 F#2

F#2 F2 C#+2 C#+2 C#+2 A#4 F2 F2 F2 C2 F#2 F#2 F#2 F2

D#+2 D#+2 D#+2

貝多芬第九號交響曲︰

444** 444** 444** 1111* 4444** 4444** 4444** 111*

0** 444** 444** 444** 1111** 4444** 4444** 4444**

444** 11** 11** 11** 6666* 444** 444** 444** 111**

4444** 4444** 4444** 444** 22** 22** 22**

貝多芬第九號交響曲︰

444****444****444****111#*****444#****444#****444#****

111*****(JD)0000444****444****444****111#****444#****

444#****444#****444****11#****11#****11#****666#*****

444****444****444****111****444#****444#****

444#****444****22#****22#****22#****