2016-03-31 4 views
3

サウンドプレイヤーを使用して.wavファイルを再生するアプリケーションがあり、それを見て、再生するボリュームを変更する方法が見つかりませんでした。プログラムを介して独立してファイルのボリュームを変更するか、Windowsボリュームミキサーでウィンドウ自体のボリュームを変更するスライダーを持っています。ありがとう!C#windowsはアプリケーションボリュームスライダーを作成します

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

は何ですか?どのメディアAPIを使用していますか? – auburg

+0

私はsystem.mediaを使用しています。 – dvs

答えて

4

私はこれをMSDNで見つけました:Attenuating SoundPlayer Volume

waveOutGetVolumewaveOutSetVolume機能を使用します。

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 –

関連する問題