【问题标题】:UWP Windows 10 IoT 2 channel Simultaneous Audio RecordingUWP Windows 10 IoT 2 通道同时录音
【发布时间】:2018-05-23 10:01:27
【问题描述】:

我想知道如何同时录制 2 个单独的音频通道。 我有 2 个带麦克风和扬声器的 USB 适配器。 我能找到的示例代码一次只支持单通道录制。 请帮忙。谢谢。

对于单通道,我的代码如下;

MediaCapture audioCapture = new MediaCapture();
MediaCaptureInitializationSettings captureInitSettings = new MediaCaptureInitializationSettings();

captureInitSettings.StreamingCaptureMode = StreamingCaptureMode.Audio;
captureInitSettings.MediaCategory = MediaCategory.Other;
captureInitSettings.AudioProcessing = AudioProcessing.Default;

await audioCapture.InitializeAsync(captureInitSettings);

private async void recordChannelA()
    {
        StorageFolder externalDevices = KnownFolders.RemovableDevices;
        IReadOnlyList<StorageFolder> externalDrives = await externalDevices.GetFoldersAsync();
        StorageFolder usbStorage = externalDrives[0];

        if (usbStorage != null)
        {
            StorageFolder recordFolder = await usbStorage.CreateFolderAsync(recFolderName, CreationCollisionOption.OpenIfExists);
            await usbStorage.GetFolderAsync(recFolderName);
            StorageFile recordFile = await recordFolder.CreateFileAsync("Recording - " + DateTime.Now.ToString("yyyy-MM-dd_HH-mm-ss") + ".mp3", Windows.Storage.CreationCollisionOption.GenerateUniqueName);

            MediaEncodingProfile profile = null;
            profile = MediaEncodingProfile.CreateM4a(Windows.Media.MediaProperties.AudioEncodingQuality.Auto);
            await audioCapture.StartRecordToStorageFileAsync(profile, recordFile);

            Message.Text = "Recording ... ";

            recordingtimerRun = new TimeSpan(0, 0, 0);
            recordingTimer.Start();
        }
        else Message.Text = "Recording error !";
    }

更新; 我为枚举设备创建了一个“列表视图”并选择相应的捕获设备。但是,有一个语法错误,我无法将 enumaration.deviceinformation 转换为 imediasource

captureInitSettings.AudioSource = captureDeviceList[audioCaptureList.SelectedIndex];

更新:我设法让它工作 解决办法是

    captureInitSettingsA.AudioDeviceId = captureDeviceList[audioCaptureList.SelectedIndex].Id;
captureInitSettingsB.AudioDeviceId = captureDeviceList[audioCaptureList.SelectedIndex].Id;

但是,我如何将这些选择保存在应用设置中......这样当我重新启动时,我不必再次重新选择。

更新: 我设法保存了audiocaptureaudiorender 设备的应用程序设置,但我不知道如何检索它们并检查是否保存了任何以前的设置。

Windows.Storage.ApplicationDataContainer localSettings = Windows.Storage.ApplicationData.Current.LocalSettings;
            Windows.Storage.StorageFolder localFolder = Windows.Storage.ApplicationData.Current.LocalFolder;

            localSettings.Values["audioACaptureSettings"] = captureAInitSettings.AudioDeviceId;
            localSettings.Values["audioARenderSettings"] = mediaPlayerA.AudioDevice.Id;
localSettings.Values["audioBCaptureSettings"] = captureBInitSettings.AudioDeviceId;
            localSettings.Values["audioBRenderSettings"] = mediaPlayerB.AudioDevice.Id;



private void loadAudioConfig()
    {
        Windows.Storage.ApplicationDataContainer localSettings = Windows.Storage.ApplicationData.Current.LocalSettings;
        Windows.Storage.StorageFolder localFolder = Windows.Storage.ApplicationData.Current.LocalFolder;

        if (localSettings.Values["audioACaptureSettings"] != null)
        {
            captureAInitSettings.AudioDeviceId = localSettings.Values["audioACaptureSettings"].ToString();
        }

        if (localSettings.Values["audioARenderSettings"] != null)
        {
            Object audioARenderValue = localSettings.Values["audioARenderSettings"];
            mediaPlayerA.AudioDevice = audioARenderValue;
        }

        if (localSettings.Values["PAaudioCaptureSettings"] != null)
        {
            captureBInitSettings.AudioDeviceId = localSettings.Values["audioBCaptureSettings"].ToString();
        }

        if (localSettings.Values["PAaudioRenderSettings"] != null)
        {
            Object audioBRenderValue = localSettings.Values["audioBRenderSettings"];
            mediaPlayerB.AudioDevice = audioBRenderValue;
        }

【问题讨论】:

  • 最好在运行时选择它们,以防它们被拔掉或被交换。但是,您几乎可以肯定地在没有用户干预的情况下选择它们,这会让用户感觉它们是从上次运行中保存的。如果这是有道理的。
  • @Naikrovek 你能告诉我怎么做吗?
  • @mylim,所以目前您的问题是如何在应用设置中存储和检索选择?
  • 嗨@MichaelXu-MSFT你是对的..它如何将它存储在应用程序设置或外部..&在启动时我可以加载它。谢谢。

标签: c# uwp audio-recording windows-10-iot-core


【解决方案1】:

你可以参考这篇介绍store and retrieve settings and other app data的文档。您可以将数据保存到设置和文件。 当您使用设置时,它只支持文档中提到的多种数据类型。 如果使用文件,您可以存储二进制数据或启用自己的自定义序列化类型。

在您提供的代码中,检查是否保存了之前的设置是正确的:

    if (localSettings.Values["audioACaptureSettings"] != null)
    {
        captureAInitSettings.AudioDeviceId = localSettings.Values["audioACaptureSettings"].ToString();
    }

但是如何将设置检索为 AudioDevice 是不正确的,因为它不能将字符串隐式转换为 DeviceInformation。请用这种方式试试:

    if (localSettings.Values["audioARenderSettings"] != null)
    {
        var aduioSource = localSettings.Values["audioARenderSettings"] as string;
        mediaPlayerA.AudioDevice = await DeviceInformation.CreateFromIdAsync(aduioSource);
    }

【讨论】:

  • 嗨@MichaelXu-MSFT 谢谢。 :)
猜你喜欢
  • 2020-09-14
  • 1970-01-01
  • 2021-02-17
  • 1970-01-01
  • 1970-01-01
  • 2019-04-04
  • 2016-04-08
  • 2017-02-03
相关资源
最近更新 更多