UWP:后台任务中的音频媒体捕获

Posted

技术标签:

【中文标题】UWP:后台任务中的音频媒体捕获【英文标题】:UWP: Audio media capture in a background task 【发布时间】:2020-08-20 09:01:10 【问题描述】:

我是 UWP 的新手。我尝试通过 MediaCapture API 从后台线程录制音频。

我的代码在这里:

public sealed class Recorder : IBackgroundTask
    
        private BackgroundTaskDeferral _deferral;
        private readonly MediaCapture mediaCapture = new MediaCapture();

        public async void Run(IBackgroundTaskInstance taskInstance)
        
            _deferral = taskInstance.GetDeferral();

            MediaCaptureInitializationSettings settings = new MediaCaptureInitializationSettings()
            
                StreamingCaptureMode = StreamingCaptureMode.Audio,
            ;
            await mediaCapture.InitializeAsync(settings);

            var profile = MediaEncodingProfile.CreateWav(AudioEncodingQuality.Auto);
            profile.Audio = AudioEncodingProperties.CreatePcm(16000, 1, 16);

            await StartRecordAsync(profile);

            _deferral.Complete();
        

        private async Task StartRecordAsync(MediaEncodingProfile profile)
        
            while(true)
            
                StorageFolder storageFolder = ApplicationData.Current.LocalFolder;
                StorageFile storageFile = await storageFolder.CreateFileAsync(Guid.NewGuid() + ".wav", CreationCollisionOption.ReplaceExisting);

                await mediaCapture.StartRecordToStorageFileAsync(profile, storageFile);

                Task.Delay(10000).Wait();

                await mediaCapture.StopRecordAsync();
            
        
    

它记录 .wav 文件每个 10 秒,但是当我播放这些文件时,我什么也听不见。每个文件是 310KB+,所以它不是 0 字节。 有人知道为什么会这样吗?

【问题讨论】:

【参考方案1】:

它记录 .wav 文件每个 10 秒,但是当我播放这些文件时,我什么也听不见。每个文件是 310KB+,所以它不是 0 字节。有人知道为什么会这样吗?

恐怕您无法在BackgroundTask 中捕获音频。来源于官方document。

应该从应用的主 UI 线程调用 InitializeAsync。应用程序必须通过正确清理媒体捕获资源来处理应用程序暂停或终止。有关正确关闭 MediaCapture 对象的信息

【讨论】:

感谢您的回答。也许你知道,AudioGraph.CreateAsync 也应该从主 UI 调用? 文档中没有声明,可以尝试在un-uithread中使用AudioGraph 已经试过了,但是卡在 AudioGraph.CreateAsync... 也许您知道一些在后台运行并记录音频的 API?

以上是关于UWP:后台任务中的音频媒体捕获的主要内容,如果未能解决你的问题,请参考以下文章

带有json字符串的后台任务中的UWP Httpclient postasync

UWP:为啥我的后台任务(使用 TimeTrigger)会超出 CPU 配额?

后台任务 UWP - 使用数据传递对象

UWP 后台任务系统关闭

UWP:请求启动后台任务时出错

UWP FileWatcher 后台任务