<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)定義。
    主站蜘蛛池模板: 久久久久亚洲av无码专区蜜芽 | 日本特黄特色aa大片免费| 久久国产亚洲电影天堂| 久久精品成人免费观看97| 久久国产成人精品国产成人亚洲| 日本系列1页亚洲系列| 国产在线98福利播放视频免费| 亚洲AV日韩AV永久无码色欲| 免费国产在线观看| 免费观看四虎精品成人| 国产精品亚洲综合专区片高清久久久| 国产va免费观看| 亚洲成av人影院| 亚洲精品国产免费| 亚洲卡一卡二卡乱码新区| 女人18毛片a级毛片免费| 亚洲精华液一二三产区| 国产精品亚洲综合一区| 男的把j放进女人下面视频免费| 亚洲欧洲国产精品你懂的| 国产精品视频免费| 久久亚洲AV成人无码国产最大| 国产日产成人免费视频在线观看 | 一个人看的免费高清视频日本| 亚洲一区二区三区免费| 成人性做爰aaa片免费看| 亚洲欧洲国产综合| 国产无遮挡又黄又爽免费视频| 国产精品1024在线永久免费| 亚洲伊人久久大香线蕉苏妲己| 2021国产精品成人免费视频| 羞羞漫画登录页面免费| 亚洲国产精品线在线观看| 成人毛片18女人毛片免费96| 人禽伦免费交视频播放| 亚洲视频免费在线播放| 免费看一级做a爰片久久| 色欲A∨无码蜜臀AV免费播| 亚洲小说图区综合在线| 伊人久久亚洲综合| 一个人免费高清在线观看|