c# - 录音机 c# UWP

标签 c# .net win-universal-app audio-recording

我正在尝试在 UWP 上为 winphone 创建一个通话记录器。我正在尝试用音频图来做到这一点。我需要为输入设备(麦克风)创建一个节点,为输出设备(扬声器)创建一个节点并将它们提交到文件(wave/mp3)。

我收到异常。

        AudioGraph graph;
        AudioDeviceInputNode deviceInputNode;
        AudioDeviceOutputNode deviceOutputNode;
        AudioFileOutputNode fileOutputNode;

        private async Task InitAudiographAsync()
        {

            AudioGraphSettings settings = new AudioGraphSettings(AudioRenderCategory.Speech);
            CreateAudioGraphResult result = await AudioGraph.CreateAsync(settings);
            if (result.Status == AudioGraphCreationStatus.Success)
            {
                graph = result.Graph;

                CreateAudioDeviceOutputNodeResult deviceOutputNodeResult = await graph.CreateDeviceOutputNodeAsync();

                if (deviceOutputNodeResult.Status == AudioDeviceNodeCreationStatus.Success)
                {
                    deviceOutputNode = deviceOutputNodeResult.DeviceOutputNode;

                    var microphone = await DeviceInformation.CreateFromIdAsync(
          MediaDevice.GetDefaultAudioCaptureId(AudioDeviceRole.Default));

                    var inProfile = MediaEncodingProfile.CreateWav(AudioEncodingQuality.High);

                    var deviceInputNodeResult = await graph.CreateDeviceInputNodeAsync(MediaCategory.Speech, inProfile.Audio, microphone);

                    if (deviceInputNodeResult.Status == AudioDeviceNodeCreationStatus.Success)
                    {
                        deviceInputNode = deviceInputNodeResult.DeviceInputNode;

                        FileSavePicker saveFilePicker = new FileSavePicker();
                        saveFilePicker.FileTypeChoices.Add("Windows Media Audio", new List<string>() { ".wma" });
                        saveFilePicker.FileTypeChoices.Add("MPEG Audio Layer-3", new List<string>() { ".mp3" });
                        saveFilePicker.SuggestedFileName = "New Audio Track";
                        StorageFile file = await saveFilePicker.PickSaveFileAsync();

                        // File can be null if cancel is hit in the file picker
                        if (file == null)
                        {
                            return;
                        }

                        MediaEncodingProfile mediaEncodingProfile;
                        switch (file.FileType.ToString().ToLowerInvariant())
                        {
                            case ".mp3":
                                mediaEncodingProfile = MediaEncodingProfile.CreateMp3(AudioEncodingQuality.High);
                                break;
                            case ".wav":
                                mediaEncodingProfile = MediaEncodingProfile.CreateWav(AudioEncodingQuality.High);
                                break;
                            default:
                                throw new ArgumentException();
                        }

                        CreateAudioFileOutputNodeResult fileOutputNodeResult = await graph.CreateFileOutputNodeAsync(file, mediaEncodingProfile);

                        if (fileOutputNodeResult.Status == AudioFileNodeCreationStatus.Success)
                        {
                            fileOutputNode = fileOutputNodeResult.FileOutputNode;
                            deviceInputNode.AddOutgoingConnection(deviceOutputNode);
                            deviceInputNode.AddOutgoingConnection(fileOutputNode);
                            graph.Start();
                        }

                    }
                }
            }
        }

最佳答案

您是否检查了麦克风访问和文件访问的 list \功能。您是否收到拒绝访问异常?

关于c# - 录音机 c# UWP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36202209/

相关文章:

visual-studio-2013 - .net WP8.1/Win10 UWP : Namespace for MapControl not found in Visual Studio Designer

c# - 如何更改 ListView Windows 通用应用程序的字体大小

c# - 来自 MTA 的 STA 调用

c# - 在一种方法中使用在另一种方法中启动的类

c# - ASP.NET Core 2.1 中的 UseStaticFiles、UseSpaStaticFiles 和 UseSpa 有什么区别?

c# - 从 XML 获取值?

.net - 加密列后 SQL 查询性能下降

c# - 在Windows窗体[C#]中使用以编程方式创建的CheckBox

c# - 使用 TcpClient 类连接到 smtp.live.com

c# - 单个视觉状态的多个 VisualState 触发器