<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    讓變化成為計劃的一部分

    歡迎大家探討本Blog涉及的所有軟件課題。我的Google Talk ID:zhengyun(at)gmail.com。

    我最希望軟件帶給用戶的感受是:美好的體驗、舒適感、簡約、干凈...

    posts - 32, comments - 8, trackbacks - 0, articles - 0
      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

    [JavaME]手機同時播放兩個音樂

    探討一

    摘要:

    本文檔以及后續文檔試圖一步一步地探討如何在手機上同時播放兩個聲音文件,譬如一個是背景音樂,一個是按鍵觸發的游戲音效。請慢慢看下去,我們盡量糅合進各方匯集的一些經驗。

    1背景

    摘要:本章 簡單描述手機同時播放兩個音樂的背景。

     

    1.1. 常見于各大J2ME論壇的這個問題

    最近看到,不斷地有人再詢問同一類型的問題:

    “如何同步播放兩個音樂?”

    “如何在播放背景音效的同時,還能夠播放其他聲音?”

     

    大家眾說紛紜,不過有一部分的先行者已經琢磨出了實際可行之法。譬如,migjava曾經談及“索尼愛立信V800, Z800, K750, W800K600移動電話支持同時播放兩個聲音”。

    由于并不是所有機型支持,這個問題不是一個能夠用一攬子解決方法搞定的問題,換而言之,就算你能在一種類型的手機上驗證成功,也仍然會在其他廠商的手機上煩惱不已。

    原因是我們所用到的MMAPI是一個仍然帶有很大局限性的玩具,各大廠商實現它的方法各異,你很難找到一個統一指導。即使是同一個廠商,譬如說Nokia,你也不能指望有什么你不會遇到。

    我們編纂一下很多方面的抱怨,如下所示:

    1.2. 每個廠商都會給你帶來煩惱

    廠商之間的格式差別 

    Midiwav的編碼格式在Nokia上和其他廠家(譬如motorrolasiemens),所以逼迫你不得不在不同廠家機型上使用不同的wav文件。

    摩托羅拉V300-V500-V600同時播放音樂的講究 

    標題所指明的這幾款手機,唯一支持的同步播放音樂的辦法是,midiwav聲音混合播放。

    即使是這樣,也存在著一個限制:

    應用程序必須先播放midi(可以作為背景音樂),然后再播放wavwav文件還必須是以下的格式:

    n         PCM 8000KHZ

    n         8Bit

    n         Mono

     

    除了上面這種方法,只要是一個新的media被播放,上一個Player必須被停止而且釋放資源。

    MOTO手機中播放聲音有下面幾條約束 

    MOTO系列手機中JAVA程序播放一個聲音文件比較簡單,但是用于交互式音效時就有問題了。

    根據MOTO的一些資料顯示,在MOTO手機中播放聲音有下面幾條約束:

    1、除了同時播放一個MIDI和一個WAV以外,MOTO手機無法同時播放多個聲音,而且必須是先播放MIDI然后播放WAV

    2、除了MIDI或音階序列以外,不能同時實現player的多個實例進入prefetched狀態(預讀取聲音流);

    3、播放新的聲音之前,前一個player必須停止并釋放資源(stop();deallocate())。

    nokia6230i上的一些現象

    當一個Playerprefetched,那么其他Player也就不再能夠prefetched,除非它們都是midi或都是amr

    如果你沒有在start/prefetch一個Player之前把其他的Player停下來,那么你將得到一個MediaException

    Dodgy MMAPI implementations 

    老實說,在摩托羅拉和其他大多數手機上的MMAPI實現是“dodgy”的,大多時候你不得不忍受它。


    Nokia 3650K700i之比 

    不幸的是,老的Nokia S60系列在播放聲音上十分的不可靠,一個midi文件在一部手機上播放起來可能和另外一個同系列的手機上聽起來不同,特別是K700i相比而言。K700i提供了優秀的midi聲效,而一個Nokia 3650基本上屬于垃圾。

    甚至于有人憤怒地提出:dont try background sounds/music 

    I learned not to push nokia s60 sounds very far at all, the sound support is dire, my advice would be space the sound playing out (so that it isnt possible for your game to need to play 2 sounds at the same time or even one *directly* after another), dont try background sounds/music, dont try any time critical or constant sound calling (like from paint() constantly) .. Use a minimum amount of players, the limit on my ngage was 10, and i was having to prefetch but not realise for optimum results. Dont deallocate anything if you plan to reuse it. You cant reuse a player for a different sound. And finally, you cant always 100% of the time take the API commands at face value..

    As a word of encouragement, I was pissed off with nokia sound, but so long as you dont push it too much, and keep it simple, ultimately it does end up being reliable.  

    2 演示程序-TwinsMusic探索一

    TwinsMusicMainMenu 
        我們首先提供一個利用一個
    Player數組在不同線程中播放音效的例子,以體會下面幾點:

    l        這個程序在WTK2.3 beta的模擬器中是可以通過測試的,可以在播放背景midi音效的同時,按鍵觸發播放midi或者wav音效;

    l        在真機上的測試則不同。

    以后,我們將陸續提供各種方式的實現,以充分探討這一問題,我們不單單需要正確的解決方法,還需要了解哪些方法是在真機上不可行的。

           2.1. 程序說明

    首先,程序啟動之后,我們自行編寫了一個StringKeyItem,它擴展了CustomItem,所以它可以幫助你的Form高級UI接收用戶手機按鍵。它還打印了當前機型是否支持混音,如上圖所示,模擬器是支持混音的,所以同時播放兩個聲音是沒有問題的。但是我的Nokia7610上則清楚地表明它不支持混音!

    Form初始化的時候,就建立一個線程,播放背景音效“jazz.mid”。

    同時,Form當前的焦點在StringKeyItem上,所以用戶按鍵能夠被StringKeyItem所截獲,如下面代碼所示:

     代碼演示如何接收用戶按鍵事件

    public class StringKeyItem extends CustomItem{

    ...

    protected void keyPressed( int keyCode )

    {

        System.out.println("Key code=" + keyCode);

       

        int GameKeyCode = getGameAction( keyCode );

        int AudioPlayMusicKey = Audio.BEEP;

        switch(GameKeyCode)

        {

            case Canvas.FIRE:

            case Canvas.KEY_NUM7:

            case Canvas.KEY_NUM8:

            case Canvas.KEY_NUM9:

                        {

                    AudioPlayMusicKey = Audio.MESSAGE;

                    break;

                        }

    按鍵觸發了另一個線程播放音效:

     代碼演示根據按鍵播放不同的音效

    // 根據按鍵播放音樂

    Audio.playSound(m_nKeyCode);

    Audio是我們封裝的一個播放類。

     

           2.2. 使用說明

    我是在Nokia真機上測試的,啟動程序之后,就立即開始播放背景音效“jazz.mid”,但是每當一個按鍵按下,jazz.midi就會被打斷,并自動重新播放,但是按鍵所對應的音效并沒有被正確播放。

    我們將背景音效改為amr格式,也依然如此。

     

    但是一旦我們選擇命令“停止背景音”,然后再按鍵,就會清楚地聽到按鍵音效,說明那個播放前臺音效的線程還是可以正常播放音樂的,只要沒有其他的player在播放。

    3 資源

    網絡資源:

    1《[JavaME]手機同時播放兩個音樂 探討一

    2:下載midletTwinsMusic-Effect1-deployed.rar ,大約26KB。代碼TwinsMusic-Effect1.rar,大約65KB

    3http://www.j2medev.com/Article/ShowArticle.asp?ArticleID=547,索愛部分機型支持同時播放多個聲音;

    4Working with the Mobile Media API Part 2.pdf

    5Sound_Implementation_on_V300-V500-V600.pdf

    6CH_BriefIntroductiontoMMAPIv1_0.pdf

    7:《Sound_Whitepaper.pdfhttp://trix2.cellmania.com/downloads/downloads/pdf/Sound_Whitepaper.pdf

    8:《MG_E680_V1_2.pdfhttp://trix2.cellmania.com/downloads/downloads/pdf/MG_E680_V1_2.pdf,關于e680media開發指導》;

     

    鄭昀@ultrapower

    試驗品名稱

    試驗品版本

    Keyword: Mobile MMAPI Media 媒體播放 j2me

    TwinsMusic

    0.0.1 BETA

     

     

    4 歷史更新

    暫無。


    評論

    # re: [JavaME]手機同時播放兩個音樂 探討一   回復  更多評論   

    2005-11-23 14:30 by 讓變化成為計劃的一部分
    手機同時播放兩個音樂 探討二[JavaME]
    http://www.cnblogs.com/zhengyun_ustc/archive/2005/11/23/playsounds2.html

    摘要:簡單描述如何在NokiaS60系列手機同時播放兩個音樂。
    使用nokia的專有類Sound
    Nokia UI API有一個專門播放聲音的類,它支持兩種聲音:
    @ Single notes,給定了頻率和持續時間;
    @ Simple tunes,沿用了Nokia Smart Messaging ringing tone二進制格式。
    我們這里說的是后者。由此Nokia UI API支持從二進制音樂數據播放曲調。這個二進制格式是Nokia’s binary Ringing Tone Programming Language(RTPL),由Nokia Smart Messaging Specification(SMART)定義。
    主站蜘蛛池模板: 久久精品a一国产成人免费网站 | 久久久婷婷五月亚洲97号色| 亚洲精品无码久久久久YW| 久久综合国产乱子伦精品免费| 免费高清在线爱做视频| 亚洲欧洲国产成人精品| 日本免费高清视频| 亚洲伊人久久精品影院| 人人爽人人爽人人片A免费| 麻豆精品国产免费观看| 亚洲日本久久久午夜精品 | 亚洲好看的理论片电影| 一级做a爱过程免费视| 全免费a级毛片免费看不卡 | 久久精品视频亚洲| 香蕉97超级碰碰碰免费公| 亚洲AV乱码一区二区三区林ゆな| 久久精品国产大片免费观看| 亚洲春黄在线观看| 精品免费国产一区二区三区| 九一在线完整视频免费观看| 国内精品久久久久久久亚洲| 免费一级毛片在线播放视频| 亚洲国产精品成人精品小说 | 国产在线观看免费不卡| 一级做a爱片特黄在线观看免费看 一级做a爱过程免费视 | 免费观看毛片视频| ww在线观视频免费观看w| 久久亚洲精品无码| 成人片黄网站色大片免费| 一级特黄aaa大片免费看| 久久久久亚洲AV成人无码网站 | 一级午夜a毛片免费视频| 亚洲激情在线视频| 国内外成人免费视频| 四虎精品成人免费视频| 无码久久精品国产亚洲Av影片| 在线观看日本免费a∨视频| 免费人成大片在线观看播放电影 | 亚洲三级视频在线| 亚洲精品国产精品乱码不卡|