2016-03-31 6 views
3

У меня есть приложение, которое воспроизводит WAV-файл с помощью звукового проигрывателя, я искал его и не мог найти способ изменить том, в котором он играет. То, что я ищу, - это либо для изменения объема файла независимо через программу или с помощью ползунка, чтобы изменить громкость самого окна в микшере громкости Windows. Благодаря!C# windows forms slider приложения

public void loadSound() 
{ 
    sp.Load(); 
    sp.Play(); 
} 

private void timer1_Tick(object sender, EventArgs e) 
{  
    if (BarTimer.Value < BarTimer.Maximum) 
    { 
     BarTimer.Value = BarTimer.Value + 1; 
    } 

    if(BarTimer.Value==BarTimer.Maximum) 
    { 
     loadSound(); 
     timer1.Stop(); 
     BarTimer.Value = BarTimer.Minimum; 
    } 
} 
+1

С помощью каких средств вы играете в wav-файл? Отправьте свой код. – auburg

+0

Что такое sp? Какой медиа-API вы используете? – auburg

+0

Я использую system.media; – dvs

ответ

4

Я нашел это только на MSDN: Attenuating SoundPlayer Volume.

В нем используются waveOutGetVolume и waveOutSetVolume functiuons.

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Text; 
using System.Windows.Forms; 
using System.Runtime.InteropServices; 

namespace VolumeControl 
{ 
    public partial class Form1 : Form 
    { 
     [DllImport("winmm.dll")] 
     public static extern int waveOutGetVolume(IntPtr hwo, out uint dwVolume); 

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

     public Form1() 
     { 
     InitializeComponent(); 
     // By the default set the volume to 0 
     uint CurrVol = 0; 
     // At this point, CurrVol gets assigned the volume 
     waveOutGetVolume(IntPtr.Zero, out CurrVol); 
     // Calculate the volume 
     ushort CalcVol = (ushort)(CurrVol & 0x0000ffff); 
     // Get the volume on a scale of 1 to 10 (to fit the trackbar) 
     trackWave.Value = CalcVol/(ushort.MaxValue/10); 
     } 

     private void trackWave_Scroll(object sender, EventArgs e) 
     { 
     // Calculate the volume that's being set. BTW: this is a trackbar! 
     int NewVolume = ((ushort.MaxValue/10) * trackWave.Value); 
     // Set the same volume for both the left and the right channels 
     uint NewVolumeAllChannels = (((uint)NewVolume & 0x0000ffff) | ((uint)NewVolume << 16)); 
     // Set the volume 
     waveOutSetVolume(IntPtr.Zero, NewVolumeAllChannels); 
     } 
    } 
} 

Надеюсь, это помогло.

+1

Я посмотрел на это, я не уверен, как импортировать dll, но я дам ему посмотреть, спасибо! – dvs

+1

Я отредактировал ваш ответ, чтобы включить код. +1 –

 Смежные вопросы

  • Нет связанных вопросов^_^