还是关于系统音量控制的问题,请思归等高手帮忙!

qiuji 2003-09-14 01:01:21
在C#中控制系统的音量,
我想使用TrackBar控件来控制,试了许多方法都不行。
...全文
65 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
nice90 2003-09-14
  • 打赏
  • 举报
回复
学习。
panyee 2003-09-14
  • 打赏
  • 举报
回复
自己想想为什么吧

你单一个数字就想让左右都响????

你想想为什么要 "ffffffff"
qiuji 2003-09-14
  • 打赏
  • 举报
回复
现在我用:
waveOutSetVolume(0,Convert.ToUInt32(trackBar2.Value.ToString(),10));
效果是:可以变化大小,但是声音在左声道。怎样才能让右声道也有声音呢?
panyee 2003-09-14
  • 打赏
  • 举报
回复
string strValue = trackBar.Value.ToString("X").PadLeft(4, '0');
strValue = strValue + strValue;
uint iVol = Convert.ToUInt32(strValue, 16);
//我只好用这方法了
qiuji 2003-09-14
  • 打赏
  • 举报
回复
我设置:
trackBar2.Maximum=0xFFFF;
trackBar2.Minimum=0x0000;

我用一个Label显示了一下,trackBar2.Value的值为0-65535之间的整数。
那么,怎么才能将这个trackBar2.Value的值赋到waveOutSetVolume(0,newValue);中呢?
panyee 2003-09-14
  • 打赏
  • 举报
回复
trackBar.Value.ToString("X").PadLeft(4, '0') 两个这个值连接起来, 再转换吧

十六进制做得太少了
panyee 2003-09-14
  • 打赏
  • 举报
回复
uint iii = Convert.ToUInt32("FFFFFFFF", 16); 那样算不对, 用这样呢?
qiuji 2003-09-14
  • 打赏
  • 举报
回复
>>赋值时动态计算出它们相加的值0xFFFF * 0x10000 + 0xFFFF

可是trackBar1.Value只有一个值啊?怎么放到那个公式中去呢?
panyee 2003-09-14
  • 打赏
  • 举报
回复
它分左右声道, 左边最大 0xffff0000, 右边最大时为 0xffff;

左右都最大才是 0xffffffff

所以你的trackBar2.Maximum = 0xFFFF;

赋值时动态计算出它们相加的值

0xFFFF * 0x10000 + 0xFFFF 好像是

甴曱 2003-09-14
  • 打赏
  • 举报
回复
Convert.ToInt32([你的代码]);
qiuji 2003-09-14
  • 打赏
  • 举报
回复
to panyee(快乐王子):
虽然可以了,但是我如何使用TrackBar控制呢?
我设置trackBar2.Maximum=0xFFFFFFFF;
编译时出错:无法将类型“uint”隐式转换为“int”
怎么办?
qiuji 2003-09-14
  • 打赏
  • 举报
回复
to panyee(快乐王子):
加上你后来说的:
public static extern long waveOutSetVolume(uint deviceID, uint Volume);
就可以了。
qiuji 2003-09-14
  • 打赏
  • 举报
回复
to panyee(快乐王子):
还是不行,跟原来的现象一样。
panyee 2003-09-14
  • 打赏
  • 举报
回复
public static extern long waveOutSetVolume(uint deviceID, uint Volume);

panyee 2003-09-14
  • 打赏
  • 举报
回复
waveOutSetVolume(0, 0xffffffff);
qiuji 2003-09-14
  • 打赏
  • 举报
回复
to cocosoft(pengyun):
我在Form1_Load事件中,
设置了:
trackBar1.Maximum=0xFFFF;
trackBar1.Minimum=0x0000;

然后
private void trackBar1_Scroll(object sender, System.EventArgs e)
{
waveOutSetVolume(0,trackBar1.Value);
}

可是,当改变trackBar1的值时,系统的“波形”的音量也被调到最低?!
qiuji 2003-09-14
  • 打赏
  • 举报
回复
谢谢panyee(快乐王子) :
上面的方法我已经试过了,这个方法好像不行。

我是把waveOutSetVolume(0, 0xFFFF);放在Form1_Load事件中的,可是一运行就把系统的“波形”的音量调到最低?!
不知为何?
甴曱 2003-09-14
  • 打赏
  • 举报
回复
你可以设置TrackBar的最小值为0x0000,最大值为0xFFFF,并用TrackBar的当前值返回就行了。
甴曱 2003-09-14
  • 打赏
  • 举报
回复
using System.Runtime.InteropSerices; //对DllImport类定义的命名引用
//其他代码
public class MyClass
{
[DllImport("winmm.dll")] //引用winmm.dll
public static extern long waveOutSetVolume(long deviceID, long Volume);
public static void Main()
{
waveOutSetVolume(0, 0xFFFF);
}
}


在winmm.dll中
第一个参数可以为0,表示首选设备
第二个参数为音量:0xFFFF为最大,0x0000为最小,其中高位(前两位)表示右声道音量,低位(后两位)表示左声道音量
panyee 2003-09-14
  • 打赏
  • 举报
回复
以前的贴子了:

using System.Runtime.InteropSerices; //对DllImport类定义的命名引用
//其他代码
public class MyClass
{
[DllImport("winmm.dll")] //引用winmm.dll
public static extern long waveOutSetVolume(long deviceID, long Volume);
public static void Main()
{
waveOutSetVolume(0, 0xFFFF);
}
}


在winmm.dll中
第一个参数可以为0,表示首选设备
第二个参数为音量:0xFFFF为最大,0x0000为最小,其中高位(前两位)表示右声道音量,低位(后两位)表示左声道音量

110,537

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧