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#****