讓變化成為計(jì)劃的一部分

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

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

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

          [JavaME]手機(jī)同時(shí)播放兩個(gè)音樂

          探討二

          摘要:

          本文檔以及后續(xù)文檔試圖一步一步地探討如何在手機(jī)上同時(shí)播放兩個(gè)聲音文件,譬如一個(gè)是背景音樂,一個(gè)是按鍵觸發(fā)的游戲音效。請慢慢看下去,我們盡量糅合進(jìn)各方匯集的一些經(jīng)驗(yàn)。

          1探討適合Nokia的同步播放方法

          摘要:本章 簡單描述如何在NokiaS60系列手機(jī)同時(shí)播放兩個(gè)音樂

           

          1.1. 使用nokia的專有類Sound

          Nokia UI API有一個(gè)專門播放聲音的類,它支持兩種聲音:

          l         Single notes,給定了頻率和持續(xù)時(shí)間;

          l         Simple tunes,沿用了Nokia Smart Messaging ringing tone二進(jìn)制格式。

           

          我們這里說的是后者。由此Nokia UI API支持從二進(jìn)制音樂數(shù)據(jù)播放曲調(diào)。這個(gè)二進(jìn)制格式是Nokia’s binary Ringing Tone Programming Language(RTPL),由Nokia Smart Messaging Specification(SMART)定義。

           

          RTPL定義了兩種鈴音:

          l         Basic-song(named)

          l         Temporary-song(unnamed)

          Nokia UI API都支持。一般的下載鈴聲都是basic-song,所以在手機(jī)菜單中你會(huì)看到有名字;但是對于Nokia UI API,不使用名字,所以推薦使用Temporary-song

           

          要想使用Sound類播放二進(jìn)制曲調(diào),請導(dǎo)入nokiaui.zip。一般來說,它的位置在%Nokia開發(fā)包安裝目錄%\Devices\Nokia_Prototype_SDK_2_0\devices\Prototype_2_0_S60_MIDP_Emulator\lib\ext下。

          然后,代碼中

          import com.nokia.mid.sound.*;

          下面給出本次測試程序說明:

          1.2. 只是修改了背景音效播放線程的播放方式

          原本背景音效線程是調(diào)用MMAPIManager.createPlayer方式播放midi或者amr音樂的,但據(jù)說,在Nokia S60系列手機(jī)上,可以做到背景音效用Nokia專有類Sound來播放,前臺音效用wav播放,即可實(shí)現(xiàn)同時(shí)播放互不干擾(稱之為測試A)。我們同時(shí)也測試了背景音效用midi播放,前臺音效用Nokia專有類Sound這種情況(稱之為測試B) (此辦法在http://community.csdn.net/Expert/topic/4358/4358221.xml提及)

          所以,我們修改了TwinsMusic\src\com\ultrapower\model下的ThreadPlayBackground.java(測試A)或者ThreadPlayForeGround.java(測試B)如下所示:

          /*
               * 用nokia特有的sounds類的方式播放背景音效
               
          */

              
          private Sound m_kSound = null;
              
          private byte[] m_dataPlayBack = {
                   (
          byte)0x02,(byte)0x4a,(byte)0x3a,(byte)0x40,(byte)0x04,(byte)0x00
                   ,(
          byte)0x35,(byte)0x1e,(byte)0xa2,(byte)0xa8,(byte)0x2c,(byte)0xc3
                   ,(
          byte)0x0c,(byte)0x30,(byte)0xc2,(byte)0xcc,(byte)0x2a,(byte)0xc2
                   ,(
          byte)0x6c,(byte)0x2a,(byte)0x82,(byte)0x6c,(byte)0x22,(byte)0xc4
                   ,(
          byte)0x9c,(byte)0x42,(byte)0x88,(byte)0xa1,(byte)0x26,(byte)0x90
                   ,(
          byte)0x59,(byte)0x06,(byte)0x90,(byte)0xa2,(byte)0x28,(byte)0x22
                   ,(
          byte)0x92,(byte)0x70,(byte)0x2b,(byte)0x02,(byte)0x64,(byte)0x00,
              }
          ;

          private synchronized void stopSounds()
              
          {
                  
          if(m_kSound != null)
                  
          {
                      m_kSound.stop();
                      m_kSound 
          = null;
                  }

              }


          /*
                                   * 用nokia特有的sounds類的方式播放背景音效
                                   
          */

                                  stopSounds();
                                  m_kSound 
          = new Sound(m_dataPlayBack, Sound.FORMAT_TONE);
                                  m_kSound.setGain(
          35); //設(shè)置音量
                                  m_kSound.play(0);    //循環(huán)播放

          1.3. 使用說明

          由于使用到了nokia專有類,所以建議事先在Nokia S60系列模擬器中模擬運(yùn)行。當(dāng)然也可以像這位網(wǎng)友所說的:

          關(guān)WTK怎么nokialib

          nokia開發(fā)工具目

          ..\Nokia\Devices\Nokia_7210_MIDP_SDK_v1_0\lib 或者

          ..\Nokia\Devices\Series_60_MIDP_Concept_SDK_Beta_0_3_Nokia_edition\lib

          中找到class.zip。打,找到Sound.class,解應(yīng)該可以得到com\nokia\ui\Sound\sound.class,

          然后把整個(gè)再打包成一個(gè)zip文件,放到項(xiàng)目的lib下。就行了。

          或者直接一點(diǎn),把class.zip直接方到lib下也可以。

          wtk編譯打好package后,再打開你jar文件,把包含sound.class的那個(gè)com文件

          除,最后再把jad中的jar-size根據(jù)實(shí)際改一下。

          ok

          反正我就是這么做的,麻煩是很麻煩。

          我按照他的方法試驗(yàn)了,但是始終提示

          有一個(gè)superclass:“com\nokia\phone\sdk\concept\event\EventHandler”找不到,但是nokiaui.zip包中卻沒有這個(gè)class

           

          測試A結(jié)果:

          之后在Nokia 7610真機(jī)上測試,啟動(dòng)程序之后,就立即開始播放背景音效,就是那一個(gè)

          private byte[] m_dataPlayBack =  {
                   (
          byte)0x02,(byte)0x4a,(byte)0x3a,(byte)0x40,(byte)0x04,(byte)0x00
                   ,(
          byte)0x35,(byte)0x1e,(byte)0xa2,(byte)0xa8,(byte)0x2c,(byte)0xc3
                   ,(
          byte)0x0c,(byte)0x30,(byte)0xc2,(byte)0xcc,(byte)0x2a,(byte)0xc2
                   ,(
          byte)0x6c,(byte)0x2a,(byte)0x82,(byte)0x6c,(byte)0x22,(byte)0xc4
                   ,(
          byte)0x9c,(byte)0x42,(byte)0x88,(byte)0xa1,(byte)0x26,(byte)0x90
                   ,(
          byte)0x59,(byte)0x06,(byte)0x90,(byte)0xa2,(byte)0x28,(byte)0x22
                   ,(
          byte)0x92,(byte)0x70,(byte)0x2b,(byte)0x02,(byte)0x64,(byte)0x00,
              };

          數(shù)組啦,但是當(dāng)一個(gè)按鍵按下,背景音效就會(huì)被打斷,并不再播放。與上一次試驗(yàn)不同的是,按鍵所對應(yīng)的音效還是被清晰播放了。

          原因還是Nokia 7610不支持混音。

           

          測試B結(jié)果:

          背景音效midi播放過程中,按鍵之后,并沒有打斷背景音,但是按鍵音也沒有播放。如果用命令停止背景音,再按鍵,那么Sound類正常播放那個(gè)數(shù)組給出的曲調(diào)。

           

          希望能找到一個(gè)支持混音的Nokia手機(jī)測試一下。

          2 資源

          網(wǎng)絡(luò)資源:

          1《[JavaME]手機(jī)同時(shí)播放兩個(gè)音樂 探討一

          《[JavaME]手機(jī)同時(shí)播放兩個(gè)音樂 探討

          2Nokia_UIAPI_Guide.pdf, http://www.it-c.dk/courses/JPMA/E2002/Nokia_UIAPI_Guide.pdf

          3:《CH_Using_the_Nokia_UI_API_Extension_for_Gaming_Cover_v1_0.pdf

          http://sw.nokia.com/id/b2e08592-dd77-4feb-8230-2e318217e066/CH_Using_the_Nokia_UI_API_Extension_for_Gaming_Cover_v1_0.pdf

          4:《J2ME播放聲音的幾個(gè)問題(nokia)》;

           

          鄭昀@ultrapower

          試驗(yàn)品名稱

          試驗(yàn)品版本

          Keyword: Mobile MMAPI Media 媒體播放 j2me 同步播放

          TwinsMusic

          0.0.1 BETA

           

          主站蜘蛛池模板: 兴义市| 万宁市| 揭西县| 鄂温| 噶尔县| 龙江县| 彭山县| 太原市| 长宁区| 南澳县| 拜城县| 昌吉市| 比如县| 铜川市| 申扎县| 天水市| 娱乐| 阿图什市| 肥乡县| 巴林右旗| 衢州市| 诸暨市| 丹凤县| 许昌县| 普兰店市| 扎囊县| 库伦旗| 巴中市| 绥化市| 永胜县| 青阳县| 南木林县| 乌兰察布市| 宝清县| 祁阳县| 邛崃市| 西畴县| 德保县| 潢川县| 云梦县| 镇平县|