在D中,一个设备的音量好象是0-65535的一个值。但是这个值是包含了左右声道的。听说高位是左声道,低位是右声道。可是我是才鸟,不知道怎么分配。
我在程序中不需要把左油声道分开来,只要能控制整体声音大小就行了。
我用的控件是TXaudioPlayer。
用他的SetOutputVolume来设置播放文件的声音的。
不知道具体怎么弄。
我如果用TRACKBAR来来设置,应该怎么弄呢?如果直接通过TRACKBAR的值来指定的时候就会出现一会左一会右的情况。谢谢各位啦~~~ 
最好铁份源码出来!

解决方案 »

  1.   

    贴{   I don't know much ,but I copy a paragraph to you,
    hoping to be a little helpful...
       Both right and left vulume can be controlled.}
    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Classes, Graphics, Controls,
      Forms, Dialogs,mmSystem, ComCtrls, StdCtrls, Buttons;/////
      //////////////////mmSystem!!!!type
      TForm1 = class(TForm)
        TrackBar1: TTrackBar;
        Label1: TLabel;
        TrackBar2: TTrackBar;
        Label2: TLabel;
        Label3: TLabel;
        TrackBar3: TTrackBar;
        procedure TrackBar1Change(Sender: TObject);
        procedure TrackBar2Change(Sender: TObject);
        procedure TrackBar3Change(Sender: TObject);
        procedure FormCreate(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.DFM}procedure TForm1.TrackBar1Change(Sender: TObject);
    var t,v:longint;
    begin
      //Set TraackBar1.max:=255;
      t:=TrackBar1.Position;
      //v's high 16 bits:right Blast; v's low 16 bits:left blast
      v:=(t shl 8)or(t shl 24);
      if WaveOutSetVolume(0,v)<>MMSYSERR_NOERROR then
        ShowMessage('Fail!');
    end;procedure TForm1.TrackBar2Change(Sender: TObject);
    var t,v:longint;
    begin
      t:=TrackBar2.Position;
      WaveOutGetVolume(0,@v);;//Change left blast while keep right
      v:=v and $ffff0000 or (t shl 8);
      WaveOutSetVolume(0,v);
    end;procedure TForm1.TrackBar3Change(Sender: TObject);
    var t,v:longint;
    begin
      t:=TrackBar3.Position;
      WaveOutGetVolume(0,@v);//Change right blast while keep left
      v:=v and $0000ffff or (t shl 24);
      WaveOutSetVolume(0,v);
    end;procedure TForm1.FormCreate(Sender: TObject);
    var v:longint;
    begin
      WaveOutGetVolume(0,@v);
      TrackBar2.Position:=hi(v);
      TrackBar3.Position:=hi(v shl 16);
      //only use high 8 bits,you can get more obvious effect
      // For WaveFormFile,you can use WaveOutGetVolume
      // For cd File,you can use auxgetvulume;
      TrackBar1.Position:=(TrackBar2.Position+TrackBar3.Position)div  2;
    end;end.
      
      

  2.   

    谢谢,不过好象不行。我按这个方式弄了。好象不能改变声音大小了。
    帮我看看是怎么弄的?procedure Tfrmmain.x1sScroll(Sender: TObject;
      ScrollPos: Integer);
    var v , t :integer;
    begin
    t := x1s.Position;
    v:=v and $0000ffff or (t shl 24);
    caption := inttostr(v);
    x1.SetOutputVolume(-1,v,-1)
    end;
      

  3.   

    郁闷,问题解决了!
    结果不是一个WORD,而是0-100的数。
    不过还是很感谢帮忙。
      

  4.   

    没问题的!
    可以控制WAVE的!