繁体   English   中英

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

[英]UWP: Audio media capture in a background task

我是 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 字节。 有人知道为什么会发生吗?

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM