Windows Phone: 播放录制的声音抛出异常
Windows Phone: playing a recorded sound throws exception
我正在使用 AudioVideoCaptureDevice
从麦克风录制一些声音。我想就他录制的内容向用户提供反馈,所以我希望能够播放它。
当将该声音放入歌曲并通过 Microsoft.Xna.Framework.Media.MediaPlayer
播放时,出现异常:
{System.InvalidOperationException: Song playback failed.
Please verify that the song is not DRM protected.
DRM protected songs are not supported for creator games.
---> System.InvalidOperationException: An unexpected error has occurred.
--- End of inner exception stack trace ---
at Microsoft.Xna.Framework.Media.MediaQueue.Play(Song song)}
查看手表中歌曲的详细信息,IsProtected()
似乎引起了问题。 (如果播放正常,我会正确地知道这首歌没有受到保护。)我使用的是 AAC 和 ACM 编解码器,两者的结果相同。
我可以在关闭并再次打开视图后播放歌曲,但没有找到任何相关的初始化来解释这个问题。
我也试过复制文件,以防某些进程仍然持有它的锁,但仍然没有任何改进,与隔离存储一样。
在没有关闭应用程序但重新进入视图后,歌曲播放没有问题。
如何直接播放录制的音频没有任何问题?
我使用了 http://independentinnovation.net/blogs/independentinnovation/archive/2012/12/11/Windows-Phone-8-Audio-Recording-using-Windows.Phone.Media.Capture.aspx 中的 AudioRecorder 示例。
(注意:现在这个 link 不起作用,域已过期..无论如何,我使用了别人的代码。)
事实证明,在 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
我正在使用 AudioVideoCaptureDevice
从麦克风录制一些声音。我想就他录制的内容向用户提供反馈,所以我希望能够播放它。
当将该声音放入歌曲并通过 Microsoft.Xna.Framework.Media.MediaPlayer
播放时,出现异常:
{System.InvalidOperationException: Song playback failed. Please verify that the song is not DRM protected. DRM protected songs are not supported for creator games. ---> System.InvalidOperationException: An unexpected error has occurred. --- End of inner exception stack trace --- at Microsoft.Xna.Framework.Media.MediaQueue.Play(Song song)}
查看手表中歌曲的详细信息,IsProtected()
似乎引起了问题。 (如果播放正常,我会正确地知道这首歌没有受到保护。)我使用的是 AAC 和 ACM 编解码器,两者的结果相同。
我可以在关闭并再次打开视图后播放歌曲,但没有找到任何相关的初始化来解释这个问题。
我也试过复制文件,以防某些进程仍然持有它的锁,但仍然没有任何改进,与隔离存储一样。
在没有关闭应用程序但重新进入视图后,歌曲播放没有问题。
如何直接播放录制的音频没有任何问题?
我使用了 http://independentinnovation.net/blogs/independentinnovation/archive/2012/12/11/Windows-Phone-8-Audio-Recording-using-Windows.Phone.Media.Capture.aspx 中的 AudioRecorder 示例。 (注意:现在这个 link 不起作用,域已过期..无论如何,我使用了别人的代码。)
事实证明,在 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