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

时间:2015-04-04 21:06:16

标签: windows-phone-8 xna media-player

我正在使用AudioVideoCaptureDevice录制来自麦克风的声音。我想向用户提供有关他录制内容的反馈,以便我能够播放它。

将该声音放入歌曲并通过Microsoft.Xna.Framework.Media.MediaPlayer播放时,我会遇到异常:

  

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

查看手表中歌曲的详细信息,IsProtected()似乎会导致问题。 (如果播放有效,我会正确判断歌曲没有受到保护。)我正在使用AAC和ACM编解码器,两者都给出相同的结果。

我可以在关闭并再次打开视图后播放该歌曲,但是没有找到任何相关的初始化来解释这个。

我也尝试过复制文件,以防某些进程仍然锁定它,仍然没有改进,与隔离存储相同。

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

如何直接播放录制的音频而没有任何问题?

1 个答案:

答案 0 :(得分:0)

我使用了来自http://independentinnovation.net/blogs/independentinnovation/archive/2012/12/11/Windows-Phone-8-Audio-Recording-using-Windows.Phone.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