[JavaME]手机同时播放两个音乐
探讨二
摘要:
本文档以及后续文档试图一步一步地探讨如何在手机上同时播放两个声音文件,譬如一个是背景音乐,一个是按键触发的游戏音效。请慢慢看下去,我们尽量糅合进各方汇集的一些经验。
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. 只是修改了背景音效播放线程的播放方式
原本背景音效线程是调用MMAPI的Manager.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),如下所示:
所以,我们修改了TwinsMusic\src\com\ultrapower\model下的ThreadPlayBackground.java(测试A)或者ThreadPlayForeGround.java(测试B),如下所示:
/**//*
*用nokia特有的sounds类的方式播放背景音效
*/
privateSoundm_kSound=null;
privatebyte[]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,
};
privatesynchronizedvoidstopSounds()
{
if(m_kSound!=null)
{
m_kSound.stop();
m_kSound=null;
}
}
/**//*
*用nokia特有的sounds类的方式播放背景音效
*/
stopSounds();
m_kSound=newSound(m_dataPlayBack,Sound.FORMAT_TONE);
m_kSound.setGain(35);//设置音量
m_kSound.play(0);//循环播放
1.3. 使用说明
由于使用到了nokia专有类,所以建议事先在Nokia S60系列模拟器中模拟运行。当然也可以像这位网友所说的:
关于WTK怎么用nokia的lib。
在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真机上测试,启动程序之后,就立即开始播放背景音效,就是那一个
Nokia 7610真机上测试,启动程序之后,就立即开始播放背景音效,就是那一个privatebyte[]m_dataPlayBack=<shapetype id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe" filled="f" stroked="f"></shapetype><stroke joinstyle="miter"></stroke><formulas></formulas><f eqn="if lineDrawn pixelLineWidth 0"></f><f eqn="sum @0 1 0"></f><f eqn="sum 0 0 @1"></f><f eqn="prod @2 1 2"></f><f eqn="prod @3 21600 pixelWidth"></f><f eqn="prod @3 21600 pixelHeight"></f><f eqn="sum @0 0 1"></f><f eqn="prod @6 1 2"></f><f eqn="prod @7 21600 pixelWidth"></f><f eqn="sum @8 21600 0"></f><f eqn="prod @7 21600 pixelHeight"></f><f eqn="sum @10 21600 0"></f><lock v:ext="edit" aspectratio="t"></lock><shape id="_x0000_i1025" style="WIDTH: 11.25pt; HEIGHT: 15pt" type="#_x0000_t75" alt=""></shape><imagedata src="file:///C:%5CDOCUME~1%5CVICTOR~1%5CLOCALS~1%5CTemp%5Cmsohtml1%5C01%5Cclip_image001.gif" o:href="/Images/dot.gif"></imagedata>{
<shape id="_x0000_i1026" style="WIDTH: 8.25pt; HEIGHT: 12pt" type="#_x0000_t75" alt=""></shape><imagedata src="file:///C:%5CDOCUME~1%5CVICTOR~1%5CLOCALS~1%5CTemp%5Cmsohtml1%5C01%5Cclip_image002.gif" o:href="/Images/OutliningIndicators/InBlock.gif"></imagedata>(byte)0x02,(byte)0x4a,(byte)0x3a,(byte)0x40,(byte)0x04,(byte)0x00
<shape id="_x0000_i1027" style="WIDTH: 8.25pt; HEIGHT: 12pt" type="#_x0000_t75" alt=""></shape><imagedata src="file:///C:%5CDOCUME~1%5CVICTOR~1%5CLOCALS~1%5CTemp%5Cmsohtml1%5C01%5Cclip_image002.gif" o:href="/Images/OutliningIndicators/InBlock.gif"></imagedata>,(byte)0x35,(byte)0x1e,(byte)0xa2,(byte)0xa8,(byte)0x2c,(byte)0xc3
<shape id="_x0000_i1028" style="WIDTH: 8.25pt; HEIGHT: 12pt" type="#_x0000_t75" alt=""></shape><imagedata src="file:///C:%5CDOCUME~1%5CVICTOR~1%5CLOCALS~1%5CTemp%5Cmsohtml1%5C01%5Cclip_image002.gif" o:href="/Images/OutliningIndicators/InBlock.gif"></imagedata>,(byte)0x0c,(byte)0x30,(byte)0xc2,(byte)0xcc,(byte)0x2a,(byte)0xc2
<shape id="_x0000_i1029" style="WIDTH: 8.25pt; HEIGHT: 12pt" type="#_x0000_t75" alt=""></shape><imagedata src="file:///C:%5CDOCUME~1%5CVICTOR~1%5CLOCALS~1%5CTemp%5Cmsohtml1%5C01%5Cclip_image002.gif" o:href="/Images/OutliningIndicators/InBlock.gif"></imagedata>,(byte)0x6c,(byte)0x2a,(byte)0x82,(byte)0x6c,(byte)0x22,(byte)0xc4
<shape id="_x0000_i1030" style="WIDTH: 8.25pt; HEIGHT: 12pt" type="#_x0000_t75" alt=""></shape><imagedata src="file:///C:%5CDOCUME~1%5CVICTOR~1%5CLOCALS~1%5CTemp%5Cmsohtml1%5C01%5Cclip_image002.gif" o:href="/Images/OutliningIndicators/InBlock.gif"></imagedata>,(byte)0x9c,(byte)0x42,(byte)0x88,(byte)0xa1,(byte)0x26,(byte)0x90
<shape id="_x0000_i1031" style="WIDTH: 8.25pt; HEIGHT: 12pt" type="#_x0000_t75" alt=""></shape><imagedata src="file:///C:%5CDOCUME~1%5CVICTOR~1%5CLOCALS~1%5CTemp%5Cmsohtml1%5C01%5Cclip_image002.gif" o:href="/Images/OutliningIndicators/InBlock.gif"></imagedata>,(byte)0x59,(byte)0x06,(byte)0x90,(byte)0xa2,(byte)0x28,(byte)0x22
<shape id="_x0000_i1032" style="WIDTH: 8.25pt; HEIGHT: 12pt" type="#_x0000_t75" alt=""></shape><imagedata src="file:///C:%5CDOCUME~1%5CVICTOR~1%5CLOCALS~1%5CTemp%5Cmsohtml1%5C01%5Cclip_image002.gif" o:href="/Images/OutliningIndicators/InBlock.gif"></imagedata>,(byte)0x92,(byte)0x70,(byte)0x2b,(byte)0x02,(byte)0x64,(byte)0x00,
<shape id="_x0000_i1033" style="WIDTH: 8.25pt; HEIGHT: 12pt" type="#_x0000_t75" alt=""></shape><imagedata src="file:///C:%5CDOCUME~1%5CVICTOR~1%5CLOCALS~1%5CTemp%5Cmsohtml1%5C01%5Cclip_image003.gif" o:href="/Images/OutliningIndicators/ExpandedBlockEnd.gif"></imagedata>};
数组啦,但是当一个按键按下,背景音效就会被打断,并不再播放。与上一次试验不同的是,按键所对应的音效还是被清晰播放了。
原因还是Nokia 7610不支持混音。
测试B结果:
背景音效midi播放过程中,按键之后,并没有打断背景音,但是按键音也没有播放。如果用命令停止背景音,再按键,那么Sound类正常播放那个数组给出的曲调。
希望能找到一个支持混音的Nokia手机测试一下。
2 资源
网络资源:
1:《[JavaME]手机同时播放两个音乐 探讨一》
《[JavaME]手机同时播放两个音乐 探讨二》
2:Nokia_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
|
测试B结果:
背景音效midi播放过程中,按键之后,并没有打断背景音,但是按键音也没有播放。如果用命令停止背景音,再按键,那么Sound类正常播放那个数组给出的曲调。
相关推荐
【手机自定义音乐播放器】是一款专为手机用户设计的个性化音乐播放软件,它以其独特的酷炫效果和高度可定制性赢得了用户的喜爱。这款播放器不仅提供了基础的音乐播放功能,还允许用户根据个人喜好调整界面,添加...
在iOS开发中,后台播放音乐和解锁动画是两个重要的功能,它们可以提升用户体验并增加应用的趣味性。本文将详细讲解如何实现这两个功能。 首先,我们来看如何实现**后台播放音乐**。在iOS中,我们可以使用`...
在开发音乐播放器时,我们可能会使用Connected Limited Device Configuration (CLDC) 和 Mobile Information Device Profile (MIDP),这两个组件共同提供了在移动设备上运行应用程序所需的基础环境。 接下来,我们...
本文将详细探讨"手机音乐测试"与"手机频谱测试"这两个主题,以及它们在安卓设备上的应用。 首先,手机音乐测试是针对手机音频播放功能的一种评估方法,它涉及到音质、音量、均衡器设置、环绕声效果等多个方面。在...
10. **音乐库集成**:为了允许用户选择和播放手机上的任何MP3文件,需要集成音乐库访问功能。`MediaStore`类提供了访问设备媒体内容的接口。 综上所述,创建一个“android 后台音乐播放器”涉及到多个层次的编程和...
下面我们将深入探讨这个音乐播放器的知识点。 1. HTML(超文本标记语言): HTML是网页内容的基础结构,定义了页面上的元素,如标题、段落、链接和媒体。在这个音乐播放器中,HTML可能包含了播放器的布局和界面...
下面我们将深入探讨这两个核心功能的实现细节。 首先,让我们来看看如何在安卓应用中实现拍照功能。Android 提供了一个名为 Camera 的 API,允许开发者访问设备的摄像头硬件。要开启相机并拍摄照片,你需要在 ...
在市场调查部分,策划书提到了两个宏观制约因素:一是移动通讯服务的快速发展推动了手机市场的需求,中国庞大的人口基数提供了广阔市场;二是通讯行业的迅速增长,手机普及率不断提升。同时,微观层面,加入WTO后对...
在安卓应用开发中,实现多线程断点续传下载和在线播放音乐是两个重要的功能。下面将详细探讨这两个主题。 一、多线程断点续传下载 1. **多线程下载**:在单线程下载中,数据流一次性从服务器传输到客户端,如果...
这个源码涵盖了PC(个人计算机)和WAP(无线应用协议,主要用于移动设备)两个平台,这意味着它应该支持桌面电脑和手机等多种设备。让我们深入探讨这个项目所涉及的主要技术点和知识点。 1. **前端技术**: - **...
在本文中,我们将深入探讨如何在VXPLO平台上设置背景音乐,以便在各种手机设备上实现顺畅播放。针对手机自动播放限制的问题,我们提供三种有效的解决策略。 首先,我们来看方法一:舞台事件初始化。这种方法是最...
通过这两个元素,开发者可以直接在网页上添加视频和音频文件,无需依赖Flash或其他第三方插件。`<video>`元素支持多个源文件(`<source>`),以适应不同的浏览器和格式需求,如MP4、WebM、Ogg等。 2. **CSS3布局**...
《家庭智能音乐控制系统的设计与实现》是一份详细探讨如何构建一套高效、便捷的家庭音乐环境的文档。该系统旨在为用户提供个性化的音乐体验,通过智能化控制技术,实现音乐播放的自动化和个性化,提升家庭生活的品质...
LiteListen音乐播放器是一款专为Android平台设计的音乐播放应用的源码,它提供了一个绝佳的学习平台,让开发者能够深入理解音乐播放器的构建过程。这个开源项目涵盖了多个关键的IT知识点,包括Android应用程序开发、...
在Android系统中,Service接收器(Service Receiver)和Notification播放器是两个重要的概念,它们在构建应用程序时起着至关重要的作用。Service接收器允许应用程序在后台执行任务,即使用户没有直接与应用交互。而...
本文件"电信设备-敲击屏幕或手势识别控制移动终端音乐播放的方法及系统.zip"正是探讨这一创新技术的详细资料,其核心内容主要涉及以下几个方面: 1. **敲击屏幕控制**:这一技术允许用户通过轻敲或敲击手机屏幕来...
音乐播放器的核心功能是音频播放,Android提供了MediaPlayer和AudioTrack两个类来处理音频。MediaPlayer适合播放整个媒体文件,而AudioTrack则更底层,可以直接操作音频数据流。理解这两个类的工作机制,以及如何...
这两个类库能够加载、解码和播放音频文件。理解如何控制播放、暂停、停止、跳转等操作,以及音量管理和后台播放是重要的学习点。 4. **数据存储与文件系统**:为了保存用户的播放历史、收藏列表等信息,开发者可能...
【标题】:“Android小应用之手机天气预报源码” 在这个项目中,我们主要探讨的是如何在Android平台...综合以上,这两个项目都涵盖了Android应用开发的基础和进阶技术,对于深入理解和实践Android编程具有很高的价值。