iT邦幫忙

DAY 1
2

Windows Mobile系列 第 1

[Windows Mobile]撰寫音量控制的程式

  • 分享至 

  • xImage
  •  

撰寫音量控制的程式於 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);
        }
    }
}

執行結果


下一篇
[Windows Mobile]寫程式播放音樂檔
系列文
Windows Mobile41
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言