手机同时播放两个音乐 探讨二[JavaME]

 

[JavaME]手机同时播放两个音乐 <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

探讨二

摘要:

本文档以及后续文档试图一步一步地探讨如何在手机上同时播放两个声音文件,譬如一个是背景音乐,一个是按键触发的游戏音效。请慢慢看下去,我们尽量糅合进各方汇集的一些经验。

1探讨适合Nokia的同步播放方法

摘要:本章 简单描述如何在NokiaS60系列手机同时播放两个音乐

 

1.1. 使用nokia的专有类Sound

Nokia UI API有一个专门播放声音的类,它支持两种声音:

l         Single notes,给定了频率和持续时间;

l         Simple tunes,沿用了Nokia Smart Messaging ringing tone二进制格式。

 

我们这里说的是后者。由此Nokia UI API支持从二进制音乐数据播放曲调。这个二进制格式是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,所以在手机菜单中你会看到有名字;但是对于Nokia UI API,不使用名字,所以推荐使用Temporary-song

 

要想使用Sound类播放二进制曲调,请导入nokiaui.zip。一般来说,它的位置在%Nokia开发包安装目录%\Devices\Nokia_Prototype_SDK_2_0\devices\Prototype_2_0_S60_MIDP_Emulator\lib\ext下。

然后,代码中

import com.nokia.mid.sound.*;

下面给出本次测试程序说明:

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

原本背景音效线程是调用MMAPIManager.createPlayer方式播放midi或者amr音乐的,但据说,在Nokia S60系列手机上, 可以做到背景音效用Nokia专有类Sound来播放,前台音效用wav播放,即可实现同时播放互不干扰(称之为测试A)。我们同时也测试了背景音效用midi播放,前台音效用Nokia专有类Sound这种情况(称之为测试B) (此办法在http://community.csdn.net/Expert/topic/4358/4358221.xml提及)

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

调用com.nokia.mid.sound.*类播放曲调 

 

ExpandedBlockStart.gif ContractedBlock.gif /**/ /*
InBlock.gif      * 用nokia特有的sounds类的方式播放背景音效
ExpandedBlockEnd.gif      
*/

None.gif     
private  Sound m_kSound  =   null ;
ExpandedBlockStart.gifContractedBlock.gif      
private   byte [] m_dataPlayBack  =   dot.gif {
InBlock.gif          (
byte)0x02,(byte)0x4a,(byte)0x3a,(byte)0x40,(byte)0x04,(byte)0x00
InBlock.gif          ,(
byte)0x35,(byte)0x1e,(byte)0xa2,(byte)0xa8,(byte)0x2c,(byte)0xc3
InBlock.gif          ,(
byte)0x0c,(byte)0x30,(byte)0xc2,(byte)0xcc,(byte)0x2a,(byte)0xc2
InBlock.gif          ,(
byte)0x6c,(byte)0x2a,(byte)0x82,(byte)0x6c,(byte)0x22,(byte)0xc4
InBlock.gif          ,(
byte)0x9c,(byte)0x42,(byte)0x88,(byte)0xa1,(byte)0x26,(byte)0x90
InBlock.gif          ,(
byte)0x59,(byte)0x06,(byte)0x90,(byte)0xa2,(byte)0x28,(byte)0x22
InBlock.gif          ,(
byte)0x92,(byte)0x70,(byte)0x2b,(byte)0x02,(byte)0x64,(byte)0x00,
ExpandedBlockEnd.gif     }
;
None.gif 
None.gif 
private   synchronized   void  stopSounds()
ExpandedBlockStart.gifContractedBlock.gif      
dot.gif {
InBlock.gif         
if(m_kSound != null)
ExpandedSubBlockStart.gifContractedSubBlock.gif          
dot.gif{
InBlock.gif             m_kSound.stop();
InBlock.gif             m_kSound 
= null;
ExpandedSubBlockEnd.gif         }

ExpandedBlockEnd.gif     }

None.gif 
ExpandedBlockStart.gifContractedBlock.gif  
/**/ /*
InBlock.gif    * 用nokia特有的sounds类的方式播放背景音效
ExpandedBlockEnd.gif    
*/

None.gif     stopSounds();
None.gif     m_kSound 
=   new  Sound(m_dataPlayBack, Sound.FORMAT_TONE);
None.gif      m_kSound.setGain(
35 );  // 设置音量
None.gif
     m_kSound.play( 0 );     // 循环播放
None.gif

 

       1.3. 使用说明

由于使用到了nokia专有类,所以建议事先在Nokia S60系列模拟器中模拟运行。当然也可以像这位网友所说的:

WTK怎么nokialib

nokia开发工具目

..\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,解应该可以得到com\nokia\ui\Sound\sound.class,

然后把整再打包成一zip文件,放到目的lib下。就行了。

或者直接一点,把class.zip直接方到lib下也可以。

wtk编译打好package后,再打开你jar文件,把包含sound.class的那com文件

除,最后再把jad中的jar-size根据实际改一下。

ok

反正我就是这么做的,麻烦是很麻烦。

我按照他的方法试验了,但是始终提示

有一个superclass:“com\nokia\phone\sdk\concept\event\EventHandler”找不到,但是nokiaui.zip包中却没有这个class

  

测试A结果:

之后在Nokia 7610真机上测试,启动程序之后,就立即开始播放背景音效,就是那一个

private byte[] m_dataPlayBack = <?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />{
         (
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,
    };

数组啦,但是当一个按键按下,背景音效就会被打断,并不再播放。与上一次试验不同的是,按键所对应的音效还是被清晰播放了。

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

 

测试B结果:

背景音效midi播放过程中,按键之后,并没有打断背景音,但是按键音也没有播放。如果用命令停止背景音,再按键,那么Sound类正常播放那个数组给出的曲调。

 

希望能找到一个支持混音的Nokia手机测试一下。

2 资源

网络资源:

1《[JavaME]手机同时播放两个音乐 探讨一

《[JavaME]手机同时播放两个音乐 探讨

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播放声音的几个问题(nokia)》;

 

郑昀@ultrapower

试验品名称

试验品版本

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

TwinsMusic

0.0.1 BETA

 

转载于:https://www.cnblogs.com/zhengyun_ustc/archive/2005/11/23/playsounds2.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值