なんか文章が適当なので後でなおします。
Windows ストア アプリで録音する方法はとっても簡単なんですよ。録音を管理するクラスを作ります。
適当にRecordAudioと名付けました。音を記録してくれる感じのクラス名です。
マイクの権限を有効にしておいてください。容赦なく例外が出るんで注意です。
using System; using System.Threading.Tasks; using Windows.Media.Capture; using Windows.Media.MediaProperties; using Windows.Storage; namespace MicrophoneSample { /// <summary> /// 録音をおこなうクラス /// </summary> public class RecordAudio { MediaCapture mediaCapture = null; public async Task InitializeAsync() { // 録音をおこなうためのオブジェクトを生成する mediaCapture = new MediaCapture(); // 録音用の初期化を開始する var settings = new MediaCaptureInitializationSettings(); settings.StreamingCaptureMode = StreamingCaptureMode.Audio; await mediaCapture.InitializeAsync(settings); } public async Task StartRecordAsync() { var fileName = "foo.m4a"; // 保存するファイル名 // 録音したファイルはローカルフォルダへ保存する var local = ApplicationData.Current.LocalFolder; // 録音したデータを書き込むファイルを作成する var file = await local.CreateFileAsync(fileName, CreationCollisionOption.ReplaceExisting); // AACフォーマットで録音を開始する var profile = MediaEncodingProfile.CreateM4a(AudioEncodingQuality.High); await mediaCapture.StartRecordToStorageFileAsync(profile, file); } public async Task StopRecordAsync() { // 録音を終了します await mediaCapture.StopRecordAsync(); } } }
画面にはボタンを1つだけ配置して、1回目にボタンを押されたら録音の開始、もう一度押されたら録音の終了をおこなうようにします。(そもそもWindowsストアアプリでボタンを多用するのもどうかと思うんだけど、)分かりやすいようにボタンの表示を「録音 開始」と「録音 終了」と切り替えるようにしました。わかりやすいですね。
using Windows.UI.Xaml; using Windows.UI.Xaml.Controls; using Windows.UI.Xaml.Navigation; namespace MicrophoneSample { public sealed partial class MainPage : Page { public MainPage() { this.InitializeComponent(); } RecordAudio recordAudio = null; bool recording = false; protected override async void OnNavigatedTo(NavigationEventArgs e) { // 初期化する recordAudio = new RecordAudio(); await recordAudio.InitializeAsync(); } private async void btnRecording_Click(object sender, RoutedEventArgs e) { if (!recording) { await recordAudio.StartRecordAsync(); recording = true; btnRecording.Content = "録音 終了"; } else { await recordAudio.StopRecordAsync(); recording = false; btnRecording.Content = "録音 開始"; } } } }