有个前台语音,还有一个背景音乐,我想在播放背景音乐时让语音变小,而播放语音时背景音乐则变小,大家有没有什么好的办法,注意:在同一个程序中?还有一个问题就是怎么将文件编码成VCD格式?

解决方案 »

  1.   

    第二个问题:用超级解霸等工具将原movie文件转成mpeg格式,然后用easy creator(5.0以上版本),按向导操作,当然是video cd......
      

  2.   

    这里有多媒体高手吗?
    多半只会一下MediaPlayer控件的XX鸟
    哎~~~~~~~~~~~~~~~~~~~~~~~~
      

  3.   

    Tiga兄 不是DirctShow而是DirctSound啊,不过我不想用它。
      

  4.   

    chwdong兄 我要的不是格式转换啊 而是将自己所写的文件编码成VCD啊
      

  5.   

    专家都去哪了,看来csdn.net也不行啊
      

  6.   

    首先你要了解各种多媒体文件格式!其实要做也许可以,因为人的声音和一般的音乐不在一个频率段!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(以前和别人讨论的贴子)!你要做的这类工作一两天是搞不成,也不是给你段代码,教你点技巧,方法能解决的,还要靠你自己去研究!
      

  7.   

    ehom说的不错,并非一招一夕之事,不个我就是找不到资料,如果ehom有这方面的资料,能否给我一份,先谢过。我急着用!!!!!
      

  8.   

    用DirectSound进行音频混合,或者使用标准Wave音频函数自己进行音频数据混合,将人声放大,背景音乐降低音量,还有就是使用音频混合器函数
      

  9.   

    http://www.mpeg.org/http://www.csdn.net/Dev/Format/
    CSDN上的资料也有些利用搜索引擎啊!
      

  10.   

    为什么不用DirectSound,难道非用汇编写程序才叫高手?现成的模块足够你用了!
      

  11.   

    jin_yan说的好象有点道理,不过怎么控制呢?能否给个例子,谢谢!
      

  12.   

    ehom啊 msdn上的资料对我没有什么有用的啊
      

  13.   

    MSDN上当然不会有关于多媒体文件格式的资料,MSDN上都是围绕window操作系统进行开发的资料
      

  14.   

    ehom,看来你在这方面有所研究,给个例子吧
      

  15.   

    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
      

  16.   

    前者要是用MediaPlayer播放背景,前台音乐,我可以随便控制各音量的大小。
    可以搞定。。关于后者你必须搞清vcd文件的格式,(会的人小),我也没有此文件格式。
      

  17.   

    谢谢cbdiy的参与,不过说了等于没有说
      

  18.   

    smhpnuaa说的没错,但我又如何将文件转换成VCD格式呢
      

  19.   

    你问的我刚做过,很简单,你用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) 取值越小声音越小
      

  20.   


    给你我写的函数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;
    }
      

  21.   

    shinesi(DaBaiCai)你给的函数是C风格的,我是在Delphi中用啊,那么我怎么编码VCD呢即将文字、声音、图象编码为VCD机能播放的VCD格式文件
      

  22.   


    你可以用DirectShow来压成MPEG-I格式,其实你可以研究一下DirectShow的DES,也就是原来的CutList(DirectX8.1之后就改成了DES),它支持多个视频轨、多音频轨,而且音频每帧的音量大小都是可调的(这样你的音量调节就可以満足了),然后用MPEG-I Filter把视音频重新打包成MPEG-I格式的文件,最后刻成VCD就行了。Direct8.1的SDK带有例子,叫timeline,你可以研究一下。
      

  23.   

    我怎么编码VCD呢即将文字、声音、图象编码为VCD机能播放的VCD格式文件
      

  24.   

    我怎么编码VCD呢即将文字、声音、图象编码为VCD机能播放的VCD格式文件