【问题标题】:Can AudioGraph play streams?AudioGraph 可以播放流吗?
【发布时间】:2017-10-03 10:14:50
【问题描述】:

由于应用程序限制,我不能在我的 UWP 应用程序中使用 IStorageFile,因此,audioGraph.CreateFileInputNodeAsync() 不是一个选项。 我只能通过声音文件的内容获取(I/O)Stream

有没有办法配置AudioGraph 以使用这样的流作为输入?

谢谢!

【问题讨论】:

    标签: c# .net audio uwp


    【解决方案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,事情会变得更加复杂,但它仍然是可行的。

      【讨论】:

      • 谢谢。听起来像是一个选择。可悲的是,不是开箱即用。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-08-08
      • 1970-01-01
      • 2018-12-20
      • 1970-01-01
      • 2011-08-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多