【发布时间】:2017-10-03 10:14:50
【问题描述】:
由于应用程序限制,我不能在我的 UWP 应用程序中使用 IStorageFile,因此,audioGraph.CreateFileInputNodeAsync() 不是一个选项。
我只能通过声音文件的内容获取(I/O)Stream。
有没有办法配置AudioGraph 以使用这样的流作为输入?
谢谢!
【问题讨论】:
由于应用程序限制,我不能在我的 UWP 应用程序中使用 IStorageFile,因此,audioGraph.CreateFileInputNodeAsync() 不是一个选项。
我只能通过声音文件的内容获取(I/O)Stream。
有没有办法配置AudioGraph 以使用这样的流作为输入?
谢谢!
【问题讨论】:
有没有办法配置 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 类。它是文件系统的一个重要类。如果可能的话,我认为你应该考虑解决这个限制。
【讨论】:
您可以创建一个 AudioFrameOutputNode 并将流的整个二进制内容提供给它,假设您可以将整个流读入内存中的二进制缓冲区。
如果您必须协调从流中并发读取并将数据馈送到 AudioFrameOutputNode,事情会变得更加复杂,但它仍然是可行的。
【讨论】: