声道问题-为了mm的微笑(100分)

  • 主题发起人 主题发起人 DUDU
  • 开始时间 开始时间
D

DUDU

Unregistered / Unconfirmed
GUEST, unregistred user!
因为现在双语的片子比较多,想编这样的一个程序,控制声道的发生
然后耳机两边都可以听到,请大家出出注意
除了WaveOutSetVolume 还应该注意些什么API
 
这个我也想知道,nnd微软的MSDN写的太含糊了...应该是看MCI_SETAUDIO部分吧?
 
如果搞定,别忘了告诉我:)
email:ldwlt_mail@163.net
 
我也想知道。
cfzme@public.info.fj.cn
 
能不能也给我一份??
 
你试试下面的程序,这是很早以前写的,应可以满足你的要求

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ComCtrls, mmsystem, StdCtrls, MPlayer;

type
TForm1 = class(TForm)
TrackBar1: TTrackBar;
TrackBar2: TTrackBar;
TrackBar3: TTrackBar;
TrackBar4: TTrackBar;
Button: TButton;
MediaPlayer: TMediaPlayer;
OpenDialog: TOpenDialog;
procedure TrackBar1Change(Sender: TObject);
procedure TrackBar2Change(Sender: TObject);
procedure TrackBar3Change(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure TrackBar4Change(Sender: TObject);
procedure ButtonClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;


var
Form1: TForm1;
ID:word;

implementation

{$R *.DFM}

procedure TForm1.TrackBar1Change(Sender: TObject);
var
t,v:Longint;
begin

// if a=0 then
Exit;
t:=TrackBar1.Position;
v:=(t shl 8)or(t shl 24);
waveOutSetVolume(ID,v);
end;


procedure TForm1.TrackBar2Change(Sender: TObject);
var
t,v:Longint;
begin

t:=TrackBar2.Position;
waveOutGetVolume(ID,@v);
v:=v and $ffff0000 or (t shl 8);
waveOutSetVolume(ID,v);
end;


procedure TForm1.TrackBar3Change(Sender: TObject);
var
t,v:Longint;
begin

t:=TrackBar3.Position;
waveOutGetVolume(ID,@v);
v:=v and $0000ffff or (t shl 24);
waveOutSetVolume(ID,v);
end;


procedure TForm1.FormCreate(Sender: TObject);
var
v:longint;
begin

waveOutGetVolume(ID,@v);
TrackBar2.Position:=hi(v);
TrackBar3.Position:=hi(v shr 16);
if hi(v)>hi(v shr 16) then

TrackBar1.Position:=hi(v)
else

TrackBar1.Position:=hi(v shr 16);

auxGetVolume(ID,@v);
if hi(v)>hi(v shr 16) then

TrackBar4.Position:=hi(v)
else

TrackBar4.Position:=hi(v shr 16);
end;


procedure TForm1.TrackBar4Change(Sender: TObject);
var
t,v:Longint;
begin

// if a=0 then
Exit;
t:=TrackBar1.Position;
v:=(t shl 8)or(t shl 24);
auxSetVolume(0,v);

//auxSetVolume
end;


procedure TForm1.ButtonClick(Sender: TObject);
begin

if OpenDialog.Execute then

begin

MediaPlayer.FileName:=OpenDialog.FileName;
MediaPlayer.Open;
ID:=MediaPlayer.DeviceID;
end;


end;


end.
 
上面的大哥,现在播放媒体的软件很多,我想作的是一种可以隔离开应用程序
和声卡的类似程序(不要笑我),这两天一直再看SDK,云杉物理,不是仅仅自己做个媒体播放器
而已,还是谢谢你的指点
 
我还是不明白你要作什么?你前面的问题,不就是说想知道如何控制左右声道吗?

我上面的例子就是用来示范这个的。
 
压制rm时候如果没有把声道分开的话,
生成的rm播放时左右声道分不开吧
 
搂主啊,声和音是相关联的,声道和音道可以理解为相同
你又扯出个mm,至于声道是不是等于音道,或者音道是否等于别的什么,就让人误解大喽!
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
680
import
I
D
回复
0
查看
2K
DelphiTeacher的专栏
D
后退
顶部