请教一下 问 怎么调节 本程序的音量,而不是调节系统音量。
就是想实现一个播放器的 效果。
因为网上给的都是waveoutsetvolume这个函数,这个函数就是设置系统的音量。我看见一个 工具 indieVolumn可以实现
以及vista上面都是 为每个程序分配 音量的。

解决方案 »

  1.   

    蛮简单啊,看你是用什么做的啦。若用windowsmediaplayer,它就提供自己的音量windowsmediaplayer.settings.volume
      

  2.   

    用的 Flash.ocx 这个 我没有sdk。
    请高手给一份给小弟。
    而且 indieVolumn 实现 了 控制其他 程序的声音。
    反正希望能讨论下
     
      

  3.   

    用directsound播放就可以uses DirectShow9, ActiveX;
    ...
    ...
    ...
    var
    pAudio:IBasicAudio;
    fGraph:IGraphBuilder;
    {$IFDEF CONSOLE}
    i:integer;
    {$ENDIF}
    begin
     if Failed(fBuild.GetFiltergraph(fGraph)) then exit;
     if SUCCEEDED(fGraph.QueryInterface(IID_IBasicAudio,  pAudio)) then begin
      {$IFDEF CONSOLE}
       pAudio.get_Volume(i);
       WriteLn('AudioVolume:'+ Inttostr(i));
      {$ENDIF}
       SUCCEEDED(pAudio.put_Volume((TrackBar1.Position-100)*100));
       pAudio:=nil;
     end;
    end;
      

  4.   

    今天自己也研究了下directsound的 当时 研究的是IDirectSoundBuffer8结果不行,貌似因为它是需要写入的缓存的,然后混音。
    后来下载了最新版的indieVolume来玩,发现它能够实现让其他程序改变音量 而不影响到系统音量。
    但是唯独Flash player10不行,FlashPlayer9都可以。SonicX能发份 完整点儿的代码给小弟研究下么?
    感谢了。
      

  5.   


    uses DirectShow9, ActiveX;//公共变量
    var
      pGBuilder    :IGraphBuilder;    //媒体播放设备
      pMControl    :IMediaControl;    //播放控制
      pBAudio      :IBasicAudio;      //音量控制...
    ...
    //初始化及载入音频文件
    begin
      CoCreateInstance(CLSID_FilterGraph, nil, CLSCTX_INPROC, IID_IGraphBuilder, pGBuilder);
      pGBuilder.QueryInterface(IID_IMediaControl, pMControl);
      pGBuilder.QueryInterface(IID_IBasicAudio, pBAudio);  if not OpenDialog1.Execute then exit;
      pGBuilder.RenderFile(PWideChar(WideString(OpenDialog1.FileName)), nil);
      pMControl.Run;  //播放
    end;//控制音量
    procedure TForm1.TrackBar1Change(Sender: TObject);
    begin
     //TrackBar1(min=0 ~ max=100)
     pBAudio.put_Volume((TrackBar1.Position-100)*100);
    end;initialization
      CoInitialize(nil);
    finalization
      CoUninitialize;
    end.
      

  6.   

    自己用WindowsAPI来播放。嫌困难的话在Torry上找原生控件。然后找到写入音频样本的部分,写入前直接把整个缓冲区乘以一个小于1的系数好了……
      

  7.   

    播放的  是 flash,用的flashplayer10,上面那个IBaseAudio也不行。
    有人说flash自己就可以。注意 flash 文件 可不是 我自己写的。所以交互的话,我也 不知道 这个flash文件 有没有 new Sound()这样的实例。
      

  8.   

    如果使用高层API,那估计你得到Flash区问问。
      

  9.   

    好的 谢谢。我去问问。
    3q cybercake
      

  10.   

    Flash模块 无人理 偶 哎,没天理呀。
      

  11.   

    flash脚本已经简化了音频操作,具体你看下这个
    http://www.7880.com/Info/Article-8a5ab380.html
      

  12.   

    但是 这个 swf是别人已经写好了的。
    我只是播放,我要怎么知道它New Sound()没有ne?
      

  13.   

    flash脚本载入
    因为flash支持动态载入影片的功能
    所以写一个只有AS脚本的SWF文件,本脚本文件控制flash的全局音量
    然后在Delphi中,每次要修改音量的时候,就载入一次这个空的SWF影片就好,使用loadmovie函数。
      

  14.   

    Flash音量在flash.ocx中是有变量保存的,只是Adobe没有提供接口给我们修改它。不过我们可以反汇编一下flash.ocx来找到那个变量的偏移值来硬修改,这样就可以达到控制falsh音量的目的。我这有偏移值,不知楼主用的是那个版本的Flash Ocx?