开发多媒体的高手请进来 有个前台语音,还有一个背景音乐,我想在播放背景音乐时让语音变小,而播放语音时背景音乐则变小,大家有没有什么好的办法,注意:在同一个程序中?还有一个问题就是怎么将文件编码成VCD格式? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 第二个问题:用超级解霸等工具将原movie文件转成mpeg格式,然后用easy creator(5.0以上版本),按向导操作,当然是video cd...... 这里有多媒体高手吗?多半只会一下MediaPlayer控件的XX鸟哎~~~~~~~~~~~~~~~~~~~~~~~~ Tiga兄 不是DirctShow而是DirctSound啊,不过我不想用它。 chwdong兄 我要的不是格式转换啊 而是将自己所写的文件编码成VCD啊 专家都去哪了,看来csdn.net也不行啊 首先你要了解各种多媒体文件格式!其实要做也许可以,因为人的声音和一般的音乐不在一个频率段!MPEG-1,MPEG-2,WAV的资料很好找,CSDN上也有,且没有版权问题!http://www.csdn.net/Dev/Format/#声音文件像MPEG-1/2一般是段固定的代码(如00 00 01 b3),加长,宽,播放速度等信息组成文件头!然后就是数据段!同样WAV文件也有类似的文件头加数据段组成!http://www.csdn.net/expert/topic/940/940373.xml(以前和别人讨论的贴子)!你要做的这类工作一两天是搞不成,也不是给你段代码,教你点技巧,方法能解决的,还要靠你自己去研究! ehom说的不错,并非一招一夕之事,不个我就是找不到资料,如果ehom有这方面的资料,能否给我一份,先谢过。我急着用!!!!! 用DirectSound进行音频混合,或者使用标准Wave音频函数自己进行音频数据混合,将人声放大,背景音乐降低音量,还有就是使用音频混合器函数 http://www.mpeg.org/http://www.csdn.net/Dev/Format/CSDN上的资料也有些利用搜索引擎啊! 为什么不用DirectSound,难道非用汇编写程序才叫高手?现成的模块足够你用了! jin_yan说的好象有点道理,不过怎么控制呢?能否给个例子,谢谢! ehom啊 msdn上的资料对我没有什么有用的啊 MSDN上当然不会有关于多媒体文件格式的资料,MSDN上都是围绕window操作系统进行开发的资料 ehom,看来你在这方面有所研究,给个例子吧 http://www.dv.co.yu/mpgscript/mpeghdr.htmhttp://www.dv.co.yu/mpgscript/download.htm//下载MPEG Audio Tools,也有例子http://www.mpeg.org/MPEG/audio.html 前者要是用MediaPlayer播放背景,前台音乐,我可以随便控制各音量的大小。可以搞定。。关于后者你必须搞清vcd文件的格式,(会的人小),我也没有此文件格式。 谢谢cbdiy的参与,不过说了等于没有说 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格式文件 关于窗体显示的简单问题 我的IC卡,只能读不能写是什么原因呀 Ado连接Excel 高兴!又做姑姑了!嘻嘻。。。 高分求助!!!!!!!!!!!!! 如何遍历整个硬盘 谁有FastReport控件? 看一看,指点方向? 关于数据库 请各位赏个脸看一下,我都快疯了 怎么用copyfile来拷贝一个ACCESS数据库?在线等待! sql怎么写?
多半只会一下MediaPlayer控件的XX鸟
哎~~~~~~~~~~~~~~~~~~~~~~~~
http://www.csdn.net/Dev/Format/#声音文件像MPEG-1/2一般是段固定的代码(如00 00 01 b3),加长,宽,播放速度等信息组成文件头!然后就是数据段!同样WAV文件也有类似的文件头加数据段组成!
http://www.csdn.net/expert/topic/940/940373.xml(以前和别人讨论的贴子)!你要做的这类工作一两天是搞不成,也不是给你段代码,教你点技巧,方法能解决的,还要靠你自己去研究!
CSDN上的资料也有些利用搜索引擎啊!
//下载MPEG Audio Tools,也有例子http://www.mpeg.org/MPEG/audio.html
可以搞定。。关于后者你必须搞清vcd文件的格式,(会的人小),我也没有此文件格式。
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;
}
你可以用DirectShow来压成MPEG-I格式,其实你可以研究一下DirectShow的DES,也就是原来的CutList(DirectX8.1之后就改成了DES),它支持多个视频轨、多音频轨,而且音频每帧的音量大小都是可调的(这样你的音量调节就可以満足了),然后用MPEG-I Filter把视音频重新打包成MPEG-I格式的文件,最后刻成VCD就行了。Direct8.1的SDK带有例子,叫timeline,你可以研究一下。