錄音是很實用的功能,我們可以用它錄製語音筆記和電話通話,還可以用它來開發簡單的語音交談軟體。當然,錄音的用途不僅僅只有這些。
今天要介紹大家如何開發一個簡單的 Windows Mobile Smartphone 錄音程式,這個小程式包含錄音和播放錄音兩個功能,還可以通過數字鍵台的5鍵來控制錄音和停止錄音。
實現原理:OpenNETCF 已經封裝好了一個錄音機類和一個播放器類,我們把這兩個類配合起來使用,就可以製作出一個簡單的錄音程式。這兩個類在 OpenNETCF.Multimedia.Audio 命名空間下,通過引用 OpenNETCF.dll 就可以使用 Recorder 和 Player 這兩個類。我使用的是 v1.4 版。
錄音:
Recorder recorder = new Recorder();
// stream 必須是 recorder 所在類的欄位,seconds 是錄音的最長時間
recorder.RecordFor(stream, seconds, SoundFormats.Mono8bit11kHz);
停止錄音:
recorder.Stop();
播放:
Stream s = File.OpenRead(file);
Player player = new Player();
player.Play(s);
停止播放:
player.Stop();
實現原理:如何註冊鍵盤的5鍵為錄音快速鍵呢?Windows CE 提供了 RegisterHotKey 函數用於註冊系統級的快速鍵,而 UnregisterHotKey 函數則用於登出系統級快速鍵。
[DllImport("coredll.dll", EntryPoint = "RegisterHotKey", SetLastError = true)]
private static extern bool RegisterHotKey(IntPtr hWnd, int id, KeyModifiers Modifiers, int key);
[DllImport("coredll.dll", EntryPoint = "UnregisterHotKey", SetLastError = true)]
private static extern bool UnRegisterHotKey(IntPtr hWnd, int key);
註冊了系統級的快速鍵後,我們要在 WndProc 方法中截取 WM_HOTKEY 訊息,並進行相應的按鍵事件處理。但是 .NET CF 並沒有像 .NET 完整版那樣,將 WndProc 方法放在 System.Windows.Forms.Form 類中,而是放在了 Microsoft.WindowsCE.Forms.MessageWindow 類中。因此我們需要繼承 MessageWindow,並實現 WM_HOTKEY 訊息的截取。我們可以把註冊快速鍵這個功能封裝到一個類裡面。
錄音程式效果如下:
原始碼:VoiceRecorder.rar
在 OpenNETCF 2.0 的官方樣本中提供了一個叫 MobileVoiceNotes 的樣本,也是使用 Recorder 和 Player 類實現的。
用到的工具和組件在這裡找:Windows Mobile Development Tools and Resources