AudioGraph 可以播放流吗?
Posted
技术标签:
【中文标题】AudioGraph 可以播放流吗?【英文标题】:Can AudioGraph play streams? 【发布时间】:2017-10-03 10:14:50 【问题描述】:由于应用程序限制,我不能在我的 UWP 应用程序中使用 IStorageFile
,因此,audioGraph.CreateFileInputNodeAsync()
不是一个选项。
我只能通过声音文件的内容获取(I/O)Stream
。
有没有办法配置AudioGraph
以使用这样的流作为输入?
谢谢!
【问题讨论】:
【参考方案1】:有没有办法配置 AudioGraph 以使用这样的流作为输入?
根据Audio graphs类,输入节点分为三种:“设备输入节点”、“文件输入节点”和“音频帧输入节点”。不幸的是,没有您想要的流输入节点。您需要将流转换为StroageFile
,然后使用CreateFileInputNodeAsync()
方法。
AudioGraph 可以播放流吗?
如果您只想播放流而不使用StorageFile
类,您可以考虑使用MediaPlayer
。通过CreateFromStream
方法从IRandomAccessStream
创建MediaSource
。例如:
XAML 代码:
<MediaPlayerElement x:Name="mediaplayer" AutoPlay="True"></MediaPlayerElement>
<Button x:Name="btnmedia" Click="btnmedia_Click" Content="media play"></Button>
后面的代码:
private async void btnmedia_Click(object sender, RoutedEventArgs e)
...
Stream filestream = buffers.AsStream();
IRandomAccessStream randomAccessStream = filestream.AsRandomAccessStream();
MediaSource mediasource = MediaSource.CreateFromStream(randomAccessStream, "mp3");
MediaPlayer player = new MediaPlayer();
player.Source = mediasource;
mediaplayer.SetMediaPlayer(player);
此外,很奇怪你不能在 UWP 应用中使用 StorageFile
类。它是文件系统的一个重要类。如果可能的话,我认为你应该考虑解决这个限制。
【讨论】:
【参考方案2】:您可以创建一个 AudioFrameOutputNode 并将流的整个二进制内容提供给它,假设您可以将整个流读入内存中的二进制缓冲区。
如果您必须协调从流中并发读取并将数据馈送到 AudioFrameOutputNode,事情会变得更加复杂,但它仍然是可行的。
【讨论】:
谢谢。听起来像是一个选择。可悲的是,不是开箱即用。以上是关于AudioGraph 可以播放流吗?的主要内容,如果未能解决你的问题,请参考以下文章