开发多媒体的高手请进来
有个前台语音,还有一个背景音乐,我想在播放背景音乐时让语音变小,而播放语音时背景音乐则变小,大家有没有什么好的办法,注意:在同一个程序中?还有一个问题就是怎么将文件编码成VCD格式?
第二个问题:用超级解霸等工具将原movie文件转成mpeg格式,然后用easy creator(5.0以上版本),按向导操作,当然是video cd.....
这里有多媒体高手吗?
多半只会一下MediaPlayer控件的XX鸟
哎~~~~~~~~~~~~~~~~~~~~~~~~
Tiga兄 不是DirctShow而是DirctSound啊,不过我不想用它。
chwdong兄 我要的不是格式转换啊 而是将自己所写的文件编码成VCD啊
首先你要了解各种多媒体文件格式!其实要做也许可以,因为人的声音和一般的音乐不在一个频率段!
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说的不错,并非一招一夕之事,不个我就是找不到资料,如果ehom有这方面的资料,能否给我一份,先谢过。我急着用!!!
用DirectSound进行音频混合,或者使用标准Wave音频函数自己进行音频数据混合,将人声放大,背景音乐降低音量,还有就是使用音频混合器函数
http://www.mpeg.org/
http://www.Codefund.cn/Dev/Format/
Codefund上的资料也有些
利用搜索引擎啊!
为什么不用DirectSound,难道非用汇编写程序才叫高手?现成的模块足够你用了!
jin_yan说的好象有点道理,不过怎么控制呢?能否给个例子,谢谢!
MSDN上当然不会有关于多媒体文件格式的资料,MSDN上都是围绕window操作系统进行开发的资料
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
前者要是用MediaPlayer播放背景,前台音乐,我可以随便控制各音量的大小。
可以搞定。。
关于后者你必须搞清vcd文件的格式,(会的人小),我也没有此文件格式。
smhpnuaa说的没错,但我又如何将文件转换成VCD格式呢
你问的我刚做过,很简单,你用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) 取值越小声音越小
给你我写的函数
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)你给的函数是C风格的,我是在Delphi中用啊,那么我怎么编码VCD呢即将文字、声音、图象编码为VCD机能播放的VCD格式文件
你可以用DirectShow来压成MPEG-I格式,其实你可以研究一下DirectShow的DES,
也就是原来的CutList(DirectX8.1之后就改成了DES),它支持多个视频轨、多
音频轨,而且音频每帧的音量大小都是可调的(这样你的音量调节就可以満足
了),然后用MPEG-I Filter把视音频重新打包成MPEG-I格式的文件,最后刻成
VCD就行了。
Direct8.1的SDK带有例子,叫timeline,你可以研究一下。
我怎么编码VCD呢即将文字、声音、图象编码为VCD机能播放的VCD格式文件
我怎么编码VCD呢即将文字、声音、图象编码为VCD机能播放的VCD格式文件