开发多媒体的高手请进来

有个前台语音,还有一个背景音乐,我想在播放背景音乐时让语音变小,而播放语音时背景音乐则变小,大家有没有什么好的办法,注意:在同一个程序中?还有一个问题就是怎么将文件编码成VCD格式?
[91 byte] By [shilei-石磊] at [2008-6-2]
# 1
有人会没有呀!
不会都很菜吧!
shilei-石磊 at 2007-10-15 > top of Msdn China Tech,Delphi,GAME,图形处理/多媒体...
# 2
第二个问题:用超级解霸等工具将原movie文件转成mpeg格式,然后用easy creator(5.0以上版本),按向导操作,当然是video cd.....
chwdong-chwdong at 2007-10-15 > top of Msdn China Tech,Delphi,GAME,图形处理/多媒体...
# 3
这里有多媒体高手吗?
多半只会一下MediaPlayer控件的XX鸟
哎~~~~~~~~~~~~~~~~~~~~~~~~
# 4
用dirctShow可以,
Tiga-Cabinet at 2007-10-15 > top of Msdn China Tech,Delphi,GAME,图形处理/多媒体...
# 5
Tiga兄 不是DirctShow而是DirctSound啊,不过我不想用它。
shilei-石磊 at 2007-10-15 > top of Msdn China Tech,Delphi,GAME,图形处理/多媒体...
# 6
chwdong兄 我要的不是格式转换啊 而是将自己所写的文件编码成VCD啊
shilei-石磊 at 2007-10-15 > top of Msdn China Tech,Delphi,GAME,图形处理/多媒体...
# 7
帮你郁闷
chwdong-chwdong at 2007-10-15 > top of Msdn China Tech,Delphi,GAME,图形处理/多媒体...
# 8
专家都去哪了,看来Codefund.cn也不行啊
shilei-石磊 at 2007-10-15 > top of Msdn China Tech,Delphi,GAME,图形处理/多媒体...
# 9
首先你要了解各种多媒体文件格式!其实要做也许可以,因为人的声音和一般的音乐不在一个频率段!

MPEG-1,MPEG-2,WAV的资料很好找,Codefund上也有,且没有版权问题!
http://www.Codefund.cn/Dev/Format/#声音文件

像MPEG-1/2一般是段固定的代码(如00 00 01 b3),加长,宽,播放速度等信息组成文件头!然后就是数据段!同样WAV文件也有类似的文件头加数据段组成!
http://www.Codefund.cn/expert/topic/940/940373.xml(以前和别人讨论的贴子)!

你要做的这类工作一两天是搞不成,也不是给你段代码,教你点技巧,方法能解决的,还要靠你自己去研究!
ehom-?! at 2007-10-15 > top of Msdn China Tech,Delphi,GAME,图形处理/多媒体...
# 10
ehom说的不错,并非一招一夕之事,不个我就是找不到资料,如果ehom有这方面的资料,能否给我一份,先谢过。我急着用!!!
shilei-石磊 at 2007-10-15 > top of Msdn China Tech,Delphi,GAME,图形处理/多媒体...
# 11
怎么没有高手了吗
shilei-石磊 at 2007-10-15 > top of Msdn China Tech,Delphi,GAME,图形处理/多媒体...
# 12
用DirectSound进行音频混合,或者使用标准Wave音频函数自己进行音频数据混合,将人声放大,背景音乐降低音量,还有就是使用音频混合器函数
jin_yan at 2007-10-15 > top of Msdn China Tech,Delphi,GAME,图形处理/多媒体...
# 13
http://www.mpeg.org/

http://www.Codefund.cn/Dev/Format/
Codefund上的资料也有些

利用搜索引擎啊!
ehom-?! at 2007-10-15 > top of Msdn China Tech,Delphi,GAME,图形处理/多媒体...
# 14
为什么不用DirectSound,难道非用汇编写程序才叫高手?现成的模块足够你用了!
# 15
jin_yan说的好象有点道理,不过怎么控制呢?能否给个例子,谢谢!
shilei-石磊 at 2007-10-15 > top of Msdn China Tech,Delphi,GAME,图形处理/多媒体...
# 16
ehom啊 msdn上的资料对我没有什么有用的啊
shilei-石磊 at 2007-10-15 > top of Msdn China Tech,Delphi,GAME,图形处理/多媒体...
# 17
看来这个问题还真没有其它方法了吗?
shilei-石磊 at 2007-10-15 > top of Msdn China Tech,Delphi,GAME,图形处理/多媒体...
# 18
MSDN上当然不会有关于多媒体文件格式的资料,MSDN上都是围绕window操作系统进行开发的资料
ehom-?! at 2007-10-15 > top of Msdn China Tech,Delphi,GAME,图形处理/多媒体...
# 19
ehom,看来你在这方面有所研究,给个例子吧
shilei-石磊 at 2007-10-15 > top of Msdn China Tech,Delphi,GAME,图形处理/多媒体...
# 20
http://www.dv.co.yu/mpgscript/mpeghdr.htm

http://www.dv.co.yu/mpgscript/download.htm
//下载MPEG Audio Tools,也有例子

http://www.mpeg.org/MPEG/audio.html
ehom-?! at 2007-10-15 > top of Msdn China Tech,Delphi,GAME,图形处理/多媒体...
# 21
例子多的是!自己找一找!!
hongqi162-失踪的月亮 at 2007-10-15 > top of Msdn China Tech,Delphi,GAME,图形处理/多媒体...
# 22
怎么找也找不到啊
shilei-石磊 at 2007-10-15 > top of Msdn China Tech,Delphi,GAME,图形处理/多媒体...
# 23
前者要是用MediaPlayer播放背景,前台音乐,我可以随便控制各音量的大小。
可以搞定。。

关于后者你必须搞清vcd文件的格式,(会的人小),我也没有此文件格式。
cbdiy-暂无 at 2007-10-15 > top of Msdn China Tech,Delphi,GAME,图形处理/多媒体...
# 24
谢谢cbdiy的参与,不过说了等于没有说
shilei-石磊 at 2007-10-15 > top of Msdn China Tech,Delphi,GAME,图形处理/多媒体...
# 25
DirectSound可以实现的
# 26
smhpnuaa说的没错,但我又如何将文件转换成VCD格式呢
shilei-石磊 at 2007-10-15 > top of Msdn China Tech,Delphi,GAME,图形处理/多媒体...
# 27
你问的我刚做过,很简单,你用DirectSound来播放可以,也可以用wav的API来播放,我用的是Directsound播的。

其实你的问题在于音频合成,16bits音频数据在-32767 ~ +32767之间, ,8bits音频数据在0~256之间。

以16bits为例,比如 WORD A 为 语音数据,WORD B为背景音乐数据,

播放背景音乐时让语音变小
Volumn = (A*fParam + B)/2;

播放语音时背景音乐变小
Volumn = (A + B*fParam)/2;

fParam 取(0.0~1.0) 取值越小声音越小

shinesi-DaBaiCai at 2007-10-15 > top of Msdn China Tech,Delphi,GAME,图形处理/多媒体...
# 28

给你我写的函数

BYTE * Combine2Audio( LPBYTE lpBuffer1,float fVol1,
LPBYTE lpBuffer2,float fVol2,
DWORD dwBufferSize,DWORD dwBitsPerSample)
{
// do it olny for 16bits
short * lpSource1 = ( short * ) lpBuffer1;
short * lpSource2 = ( short * ) lpBuffer2;
DWORD dwSample = dwBufferSize*8/dwBitsPerSample;
while ( dwSample > 0 )
{
*lpSource1 = (short)( (int)(*lpSource1)*fVol1 + (int)(*lpSource2)*fVol2 / 2 );
lpSource1++;
lpSource2++;
dwSample--;
}

return lpBuffer1;
}
shinesi-DaBaiCai at 2007-10-15 > top of Msdn China Tech,Delphi,GAME,图形处理/多媒体...
# 29
shinesi(DaBaiCai)你给的函数是C风格的,我是在Delphi中用啊,那么我怎么编码VCD呢即将文字、声音、图象编码为VCD机能播放的VCD格式文件
shilei-石磊 at 2007-10-15 > top of Msdn China Tech,Delphi,GAME,图形处理/多媒体...
# 30

你可以用DirectShow来压成MPEG-I格式,其实你可以研究一下DirectShow的DES,

也就是原来的CutList(DirectX8.1之后就改成了DES),它支持多个视频轨、多

音频轨,而且音频每帧的音量大小都是可调的(这样你的音量调节就可以満足

了),然后用MPEG-I Filter把视音频重新打包成MPEG-I格式的文件,最后刻成

VCD就行了。

Direct8.1的SDK带有例子,叫timeline,你可以研究一下。
shinesi-DaBaiCai at 2007-10-15 > top of Msdn China Tech,Delphi,GAME,图形处理/多媒体...
# 31
ok,我研究之后再回复你
shilei-石磊 at 2007-10-15 > top of Msdn China Tech,Delphi,GAME,图形处理/多媒体...
# 32
我怎么编码VCD呢即将文字、声音、图象编码为VCD机能播放的VCD格式文件
shilei-石磊 at 2007-10-15 > top of Msdn China Tech,Delphi,GAME,图形处理/多媒体...
# 33
我怎么编码VCD呢即将文字、声音、图象编码为VCD机能播放的VCD格式文件
shilei-石磊 at 2007-10-15 > top of Msdn China Tech,Delphi,GAME,图形处理/多媒体...