Windows Phone:播放录制的声音会引发异常



我正在使用AudioVideoCaptureDevice从麦克风录制一些声音。我想给用户反馈他录制的内容,所以我想能够播放它

当把这个声音放进一首歌并通过Microsoft.Xna.Framework.Media.MediaPlayer播放时,我得到了一个例外:

{System.InvalidOperationException:歌曲播放失败。请验证歌曲是否不受DRM保护。创作者游戏不支持受DRM保护的歌曲。--->System.InvalidOperationException:发生意外错误。---内部异常堆栈跟踪结束---在Microsoft.Xna.Framework.Media.MediaQueue.Play(歌曲)}

仔细查看手表中歌曲的细节,IsProtected()似乎引发了问题。(如果播放正常,我会正确地判断歌曲不受保护。)我使用的是AAC和ACM编解码器,两者的结果相同。

我可以在关闭和再次打开视图后播放这首歌,但没有找到任何相关的初始化来解释这一点。

我还尝试复制文件,以防某个进程仍然锁定它,但仍然没有改进,隔离存储也是如此。

在没有关闭应用程序但重新进入视图后,歌曲播放没有问题。

如何在没有任何问题的情况下直接播放录制的音频?

我使用了http://independentinnovation.net/blogs/independenticnovation/archive/2012/12/11/Windows-Phone-8-Audio-Recording-using-Windows.hone.Media.Capture.aspx中的AudioRecorder示例。(注意:现在这个链接不起作用,域过期了。无论如何,我使用了别人的代码。)

事实证明,在Record()函数中,一个流是打开的,而在Stop()函数从未正确地刷新和处理过。

我不明白这是怎么造成问题的,因为我确实复制了生成的文件,只是为了确保所有句柄都是有效的。

尽管如此,旧的处理方式肯定是错误的,而新的处理方式要干净得多,顺便说一句,有效。

    public async void StopRecording()
    {
        try
        {
            if (dev != null)
            {
                await dev.StopRecordingAsync();
                dev = null;
                // these 2 lines I had to add
                await recordingStream.FlushAsync();
                recordingStream.Dispose();
           }
            var length = new System.IO.FileInfo(fileName).Length;
            System.Diagnostics.Debug.WriteLine("Recorded " + fileName + " with length " + length);
        }
        catch (System.Exception ex)
        {
            System.Diagnostics.Debug.WriteLine(ex.ToString());
        }
    }

编辑:为了给学分,我在这里找到了我使用的答案http://www.postseek.com/meta/9fddd403d0cde523a542be42b7a4b057

最新更新