用户: 密码: 答案:   我要注册   忘记密码

加入收藏  设为首页

开发文档

CNJM首页

业界新闻

手机软件

终端应用

资源下载

EclipseME

CNJM论坛

                 

频道列表

J2ME开发 176篇
服务器端开发 33篇
JAVA语言 71篇
游戏与图形 101篇
WindowsMobile开发 6篇
Symbian开发 61篇
Brew开发 36篇
其它开发平台 6篇

热点文章

向大家推荐几个比...  17493次
[推荐]symbian入门... 10526次
制作sis文件全攻略 9420次
Symbian Series60...  8215次
写给symbian os开...  8089次
Series 60图形开发... 7917次
[转帖]Symbian OS ... 7909次
在.pkg中定义条件...  7543次
请问有大虾知道如...  7383次
连载:Series 60应...  7279次
在Symbian OS中读...  7052次
蔡鸟的一些学习笔...  6559次

文章搜索

搜 索
按 照
频 道
  
Symbian Series60上实现混音的办法
编辑:rocks    审核:rocks    文章来源:CSDN博客
关键词:symbian    发表日期:2006-02-23 17:42:45    浏览次数:8216次
本文版权归原作者,中国JAVA手机网收录本文的目的是让更多人阅读到此文章。转载请注明出处为中国JAVA手机网<www.cnjm.net>
来自:http://www.cnjm.net/tech/article965.html

[转载于CSDN博客]

 在Symbian 6.1的CMdaAudioPlayer是无法实现混音的。如果你当前正在播放一段音乐,那么此时如果再播放另外一段音乐,那么之前的音乐就会被迫停止了。那么Symbian Series60上就无法实现混音了吗?不是的,我们看到很多游戏里面都实现了混音,那么他们是怎么做的呢?

 显然,我们只能从底层下手。Symbian提供了一个直接播放PCM音频编码的接口,CMdaAudioOutputStream。这个接口是可以直接播放PCM音频编码的。关于PCM编码,请查看一下关于数字通讯方面的资料,其实就是对于连续的波进行离散地采用量化,最后形成的数字编码型号。WAV里面的音频数据大部分都是PCM编码的。

 混音的实现方法有两个。

 第一个就是直针对两个采样的PCM编码进行线性插值。其实在图像上,图像的混合也是通过有名的alpha混合实现的,alpha混合是一个典型线性插值。
 color3 = color1 * alpha + color2*(1-alpha)

 不过声音和图像有点不同,声音是波动信号。图像是静态的。也就是说,声音的产生是根据PCM编码的变化值(换句话说,是根据其一阶导数)呈现出来的。声音并不会因为PCM编码的大小而呈现不同的声音,而是根据一个连续区间内的PCM编码的变化幅度来呈现的。

 这第一个算法就是类似图像上的alpha混合算法:

 If the range of 8-bit sampling is between -127 to 128

  If both A and B are negative       Y = A +B - (A * B / (-127))
  Else                                       Y = A + B - A * B / 128


Similarly for the nbit (ex 16bit data)

  For  n-bit sampling audio signal


  If both A and B are negative       Y = A + B - (A * B  /  (-(2 pow(n-1) -1)))
JAVA手机网[www.cnjm.net]
  Else                                       Y = A + B - (A * B /  (2 pow(n-1))


 第二个办法,就不需要进行类似的数学运算了。这个办法有点类似我们很早以前的那种布置网点的图像混合办法。在以前画漫画的时候经常用到的。以前还专门有卖网点纸的呢,用来实现漫画中的半透明效果。

 在混音上,这个办法更加有效。简单来说,就是分成很多微小的时间片,然后在不同的时间片内播放不同的音乐。也有点类似CPU的并发执行一样。从整体上来看,似乎就是几段音乐同时播放了。而为什么在音频上实现效果比图像上更好呢?还是上次那个原因,因为声音是动态播放的。人的耳朵就很难分析来两个那么微小的时间片内的音乐了。

 关于这个办法具体的实现,其实在NOKIA的官方网站上已经有了。http://direct.www.forum.nokia.com/info/sw.nokia.com/id/70a2bde5-9b14-41b3-89ae-198b0d8d380d/SoundMixer_Example_v1_0.zip.html

 相信很多人在Symbian实现混音的办法都是直接抄袭这个NOKIA实现的例子。它支持16个不同的Channel来混音。首先新开一个线程,然后这个线程就是把多个要播放的PCM编码缓冲合成到一个缓冲区,然后再不断地把这个缓冲区的数据写给CMdaAudioOutputStream里面去。
来自:http://www.cnjm.net/tech/article965.html

相关文章
    给Symbian的模拟器换皮肤(换成我们喜欢的手机皮肤)  [2007-07-08]
    编写安全的Symbian C++游戏代码  [2007-07-07]
    Symbian将在中国开设分公司  [2007-01-11]
    Skype首度支持S60手机 微软独占优势不再  [2006-02-23]
    2010年微软和Linux智能手机将超越Symbian  [2006-02-23]
    在.pkg中定义条件判断60系列平台的版本  [2006-02-17]
    在Symbian OS中读取ZIP文件  [2006-02-17]
最新评论
网站简介  |  关于版权  |  广告服务  |  网站地图  |  联系我们
Copyright © www.CNJM.net, All rights reserved
中国JAVA手机网 版权所有
ICP备案:京ICP备041452