PDA

View Full Version : سوال: کنترل میزان صدا در سی شارپ



mabeheshtim
شنبه 27 تیر 1394, 16:06 عصر
سلام دوستان
من یه برنامه سی شارپ دارم که توی پس زمینه ش یک موسیقی پخش میشه
می خواستم ببینم چطور باید میزان صداش رو تغییر بدم یا بهتر بگم چطور می تونم کم و زیادش کنم ؟

abdullah20
شنبه 27 تیر 1394, 16:19 عصر
کد پخش موزیک را بذارید تا راهنمایی کنم

aliagamon
یک شنبه 28 تیر 1394, 10:11 صبح
[DllImport("winmm.dll")]
public static extern int waveOutSetVolume(IntPtr hwo, uint dwVolume);

int volume = 5;//0 = mute 10 = max beyn 0-10
private void button1_Click(object sender, EventArgs e)
{
int NewVolume = ((ushort.MaxValue / 10) * volume);
uint NewVolumeAllChannels = (((uint)NewVolume & 0x0000ffff) | ((uint)NewVolume << 16));
waveOutSetVolume(IntPtr.Zero, NewVolumeAllChannels);
}

این کد مستقیما میزان صدای برنامه رو تو mixer ویندوز عوض میکنه فقط یادتو باشه تو xp کار نمیکنه از ویندوز ویستا به بعد بخش audio ویندوز تغییر کرده هم خودش و هم Api هاش

mabeheshtim
دوشنبه 29 تیر 1394, 16:24 عصر
کد پخش موزیک که خواسته بودید اینه
System.Media.SoundPlayer name = new System.Media.SoundPlayer(''address file.vaw'');
name.Play();

abdullah20
دوشنبه 29 تیر 1394, 19:28 عصر
اوکی
پیشنهاد میکنم کلا از کامپوننت NAudio استفاده کنید

محمد رضا فاتحی
سه شنبه 30 تیر 1394, 08:14 صبح
یه نگاهی به این کلاس بنداز...

static class NativeMethods
{


[DllImport("winmm.dll", EntryPoint = "waveOutSetVolume")]
public static extern int WaveOutSetVolume(IntPtr hwo, uint dwVolume);




[DllImport("winmm.dll", SetLastError = true)]
public static extern bool PlaySound(string pszSound, IntPtr hmod, uint fdwSound);
}


public static class MSWindowsFriendlyNames
{
public static string WindowsXP { get { return "Windows XP"; } }
public static string WindowsVista { get { return "Windows Vista"; } }
public static string Windows7 { get { return "Windows 7"; } }
public static string Windows8 { get { return "Windows 8"; } }
}


public static class SistemVolumChanger
{
public static void SetVolume(int value)
{
if (value < 0)
value = 0;


if (value > 100)
value = 100;


var osFriendlyName = GetOSFriendlyName();


if (osFriendlyName.Contains(MSWindowsFriendlyNames.Wi ndowsXP))
{
SetVolumeForWIndowsXP(value);
}
else if (osFriendlyName.Contains(MSWindowsFriendlyNames.Wi ndowsVista) || osFriendlyName.Contains(MSWindowsFriendlyNames.Win dows7) || osFriendlyName.Contains(MSWindowsFriendlyNames.Win dows8))
{
SetVolumeForWIndowsVista78(value);
}
else
{
SetVolumeForWIndowsVista78(value);
}
}


public static int GetVolume()
{
int result = 100;
try
{
MMDeviceEnumerator DevEnum = new MMDeviceEnumerator();
MMDevice device = DevEnum.GetDefaultAudioEndpoint(EDataFlow.eRender, ERole.eMultimedia);
result = (int)(device.AudioEndpointVolume.MasterVolumeLevel Scalar * 100);
}
catch (Exception)
{
}


return result;
}


private static void SetVolumeForWIndowsVista78(int value)
{
try
{
MMDeviceEnumerator DevEnum = new MMDeviceEnumerator();
MMDevice device = DevEnum.GetDefaultAudioEndpoint(EDataFlow.eRender, ERole.eMultimedia);


device.AudioEndpointVolume.MasterVolumeLevelScalar = (float)value / 100.0f;
}
catch (Exception)
{
}
}


private static void SetVolumeForWIndowsXP(int value)
{
try
{
// Calculate the volume that's being set
double newVolume = ushort.MaxValue * value / 10.0;


uint v = ((uint)newVolume) & 0xffff;
uint vAll = v | (v << 16);


// Set the volume
int retVal = NativeMethods.WaveOutSetVolume(IntPtr.Zero, vAll);
}
catch (Exception)
{
}
}


private static string GetOSFriendlyName()
{
string result = string.Empty;
ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT Caption FROM Win32_OperatingSystem");
foreach (ManagementObject os in searcher.Get())
{
result = os["Caption"].ToString();
break;
}
return result;
}
}

mabeheshtim
پنج شنبه 01 مرداد 1394, 18:41 عصر
اگه ممکنه در مورد این کد یه مقدار بیشتر توضیح بدید.
یه سوال هم دارم تا اونجا که من میدونم این کد صدای ویندوز را کم و زیاد می کنه میشه میزان صدای برنامه را با یه چیزی مثل ترک بار عوض کرد ولی میزان صدای ویندوز تغییر نکنه ؟؟؟؟

بزارید بیشتر توضیح بدم
من یه برنامه دارم که توش یه موزیک پس زمینه پخش میشه میخوام با یه ترک بار بشه صداش رو کم یا زیاد کرد بدون این که صدای ویندوز کم و زیاد شه
خیلی ممنون که جواب میدید دستتون درد نکه:لبخندساده::لبخندساده::ل خندساده::لبخندساده::لبخندس ده:

مهرداد صفا
دوشنبه 12 مرداد 1394, 00:27 صبح
با سلام.
از کلاس System.Windows.Media.MediaPlayer (https://msdn.microsoft.com/query/dev10.query?appId=Dev10IDEF1&l=EN-US&k=k%28SYSTEM.WINDOWS.MEDIA.MEDIAPLAYER%29;k%28VS.O BJECTBROWSER%29;k%28TargetFrameworkMoniker-%22.NETFRAMEWORK%2cVERSION%3dV4.0%22%29&rd=true) استفاده کنید و با تنظیم خصوصیت Volume (https://msdn.microsoft.com/query/dev10.query?appId=Dev10IDEF1&l=EN-US&k=k%28SYSTEM.WINDOWS.MEDIA.MEDIAPLAYER.VOLUME%29;k %28VS.OBJECTBROWSER%29;k%28TargetFrameworkMoniker-%22.NETFRAMEWORK%2cVERSION%3dV4.0%22%29&rd=true) بین 0 تا 1 میزان صدا را کنترل کنید.