谁给我控制左右声道的源码,我就给其我所有的分数(115分)

F

fartrip

Unregistered / Unconfirmed
GUEST, unregistred user!
我十分需要关于DELPHI怎么样控制左右声道
的源码。若还包括控件请发到我的邮箱中。
多谢各位支持小弟。
我的邮箱是fartripliao@sina.com
 
按关键词 '声道' 检索到问题数:15条,共1页。当前是第 1 页。
 

procedure TForm1.TB_volChange(Sender: TObject);
var
pos,vol:longint;
begin

pos:=TB_vol.Position;
vol:=(pos shl 8)or(pos shl 24);
waveoutsetvolume(0,vol);
end;


procedure TForm1.TB_lChange(Sender: TObject);
var
pos,vol:longint;
begin

pos:=TB_l.Position;
waveoutgetvolume(0,@vol);
vol:=vol and $ffff0000 or (pos shl 8);
waveoutsetvolume(0,vol);
end;


procedure TForm1.TB_rChange(Sender: TObject);
var
pos,vol:longint;
begin

pos:=TB_r.Position;
waveoutgetvolume(0,@vol);
vol:=vol and $0000ffff or (pos shl 24);
waveoutsetvolume(0,vol);
end;

 
用Delphix试试看,有源码。
 
我播放的是WAV 文件。
且用的是SndPlaySound函数进行播放
 
用Delphix吧,有源码有demo
 
delphix不知道是怎么回事
在哪儿可以找到。
 
delphix在这里有
http://www.wapsec.com.cn/delphi
 
拿分来,下面是源码:

当你做一个多媒体播放器时,难免少不了控制音量的大小和左右声道的播放,
下面就介绍一种控制Wave波形输出设备音量的方法,该方法不是设置主音量。
先在窗体上放两个TTrackBar,分别命名为TrackBar1,TrackBar2,属性Max
都设置为65535,如果觉得刻度太密了,可以把Frequency属性值设置大一些,
然后在Uses段加入MMSystem,并在TrackBar1和TrackBar2的OnChange事件都写
上下列语句:

procedure TForm1.TrackBar1Change(Sender: Tobject);

var Wave:string;

begin

Wave:='$'+inttohex(TrackBar1.Position,4)+inttohex(TrackBar2.Position,4);

waveoutsetvolume(0,strtoint(Wave));

end;


/////////////////////////////////////////////
WaveOutSetVolume(hwo: Integer;
dwVolume: Cardinal);


hwo is MediaPlayer1.DeviceId,

example: Right// | Left//
dwVolume for Full L+R = $FFFFFFFF
dwVolume for Full L no R = $0000FFFF
dwVolume for Full R no L = $FFFF0000
dwVolume for no sound = $00000000
/////////////////////////////////////////////////

uses MMSystem

type
TVolType = (vtLeft, vtRight);

TVol = array[vtLeft..vtRight] of word;


procedure TVolForm.GetVolumes(var DevId : word;

var VolLeft, VolRight : word);

{volume is returned as a pointer to a DWord with the most
significant word for the left channel. The channels are
extracted by treating the DWord as a two element array and
accessing the two array elements for the Lt and Rt volumes}
var
Error : integer;

MsgResponse : word;

TempVol : TVol;

begin

Error := AuxGetVolume(DevId, @TempVol);

if Error <> 0 then
begin

Timer1.Enabled := false;

MsgResponse := MessageDlg('Error Reading Volume : ' + IntToStr(Error) +
chr(13)
+ 'DevId : ' + IntToStr(DevId) + chr(13)
+ chr(13)
+ 'Set Next Device ?',
mtError, [mbYes, mbCancel], 0);

if MsgResponse = mrYes then
{try the next Device Id}
DevId := DevId + 1
else
begin

DevId := 0;

PChangeType := Nil;

end;

{else
MsgResponse = mrCancel}
Exit;

end;

{if Error <> 0}
VolLeft := TempVol[vtLeft];

VolRight := TempVol[vtRight];

end;



procedure TVolForm.SetVolumes(DevId : word;

var VolLeft, VolRight : word);

{volume is set by passing a DWord value with the most
significant word set for the left channel, and the least
significant word set for the right channel. The channels are
set by treating the DWord as a two element array and
setting the two array elements for the Lt and Rt volumes}
var
Error : integer;

TempVol : TVol;

begin

TempVol[vtLeft] := VolLeft;

TempVol[vtRight] := VolRight;

Error := AuxSetVolume(DevId, longint(TempVol));

if Error <> 0 then

MessageDlg('Error Setting Volume : ' + IntToStr(Error),
mtError, [mbOK], 0);

end;





 
拿分来啊!
 
我上面这个可不要第三方控件,这些Api在多媒体编程中经常用到,要好好体会啊!!
 
关于左右声道控制的问题大富翁里很多,但真正达到要求的我还没见到!
 
To xlf:
我这个可达到了要求。
 
我有一个控件可以达到你的要求,我自己没试过但看过其附带的范例,完全能满足你的要求
如果需要发一封邮件至我的信箱。收到后会给你寄出。

可别忘了给分哟!
 
to JSP:
能否做到超级解霸那样,控制左右声道?我今天试一下
 
可以检索以前回答的问题。
 
to jsp
TVolType = (vtLeft, vtRight);

TVol = array[vtLeft..vtRight] of word;


vtLeft, vtRight这两个是怎么定义的
我实在是搞不懂。
 
to JSP
我需要全部源码。
包括怎么调用函数。
怎么样播放声音。
 
to JSP:
能否给个例子,我没看懂
谢谢!
 

Similar threads

D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
D
回复
0
查看
873
DelphiTeacher的专栏
D
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
顶部