撰寫音量控制的程式於 Windows Mobile 使用
更多文章,請到我在點部落所建立的部落格「.NET菜鳥自救會」閱讀
http://www.dotblogs.com.tw/chou/
在 Windows API 中,Coredll.dll 內有許多關於音量操作的函式,最常用的是以下兩個,取得與設定音量。
waveOutGetVolume : 取得波形輸出音源音量設定
waveOutSetVolume : 設定波形輸出音源音量設定
宣告方式
// 取得波形輸出音源音量設定
[DllImport("coredll.dll")]
public static extern int waveOutGetVolume(IntPtr hwo, out uint dwVolume);
// 設定波形輸出音源音量設定
[DllImport("coredll.dll")]
public static extern int waveOutSetVolume(IntPtr hwo, uint dwVolume);
以下範例功能為程式初始化時,取得目前音量顯示於 Track Bar 控制項上,而後使用者可調整 Scroll Bar 控制音量。
程式碼
using System;
using System.Linq;
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 SmartDeviceProject6
{
public partial class Form2 : Form
{
// 取得波形輸出音源音量設定
[DllImport("coredll.dll")]
public static extern int waveOutGetVolume(IntPtr hwo, out uint dwVolume);
// 設定波形輸出音源音量設定
[DllImport("coredll.dll")]
public static extern int waveOutSetVolume(IntPtr hwo, uint dwVolume);
public Form2()
{
InitializeComponent();
// 取得音量
// 設定變數CurrVol用以取得目前音量
uint CurrVol = 0;
// 透過waveOutGetVolume取得目前音量給變數CurrVol
waveOutGetVolume(IntPtr.Zero, out CurrVol);
// 計算音量大小
ushort CalcVol = (ushort)(CurrVol & 0x0000ffff);
// 將音量大小分為10階,並指定給trackWaved控制項
trackWave.Value = CalcVol / (ushort.MaxValue / 10);
}
// 當控制項trackWave的值改變時,設定音量
private void trackWave_ValueChanged(object sender, EventArgs e)
{
// 由trackWave上的值計算要設定的音量大小
int NewVolume = ((ushort.MaxValue / 10) * trackWave.Value);
// 設定相同的數值於左聲道與右聲道
uint NewVolumeAllChannels = (((uint)NewVolume & 0x0000ffff) | ((uint)NewVolume << 16));
// 設定音量
waveOutSetVolume(IntPtr.Zero, NewVolumeAllChannels);
}
}
}
執行結果