gpt4 book ai didi

c# - UWP MediaPlaybackList 在列表项之间弹出声音

转载 作者:太空宇宙 更新时间:2023-11-03 14:45:16 26 4
gpt4 key购买 nike

我正在使用 MediaPlaybackList 在固定时间收集间隔内以 byte[] 形式“流式传输”通过蓝牙传入的音频数据。根据 MS 文档,MediaPlaybackList 是音频样本之间的“无缝”播放。但就我而言,在过渡到下一个音频样本时,我会听到爆裂声和间隙。

byte[] audioContent = new byte[audioLength];
chatReader.ReadBytes(audioContent);

MediaPlaybackItem mediaPlaybackItem = new MediaPlaybackItem(MediaSource.CreateFromStream(new MemoryStream(audioContent).AsRandomAccessStream(), "audio/mpeg"));
playbackList.Items.Add(mediaPlaybackItem);

if (_mediaPlayerElement.MediaPlayer.PlaybackSession.PlaybackState != MediaPlaybackState.Playing)
{
_mediaPlayerElement.MediaPlayer.Play(); ;
}

如何使用与此类似的方法实现真正​​“无缝”的流式音频?

此外,我尝试在数据进入时将我的流实时写入文件,只是为了查看是否存在爆裂声或间隙。它从字节完美附加到的文件中播放,没有弹出或间隙。

using (var stream = await playbackFile.OpenStreamForWriteAsync())
{
stream.Seek(0, SeekOrigin.End);
await stream.WriteAsync(audioContent, 0, audioContent.Length);
}

最佳答案

MediaPlayer 尤其是 MediaPlayerList 并非设计用于“实时”音频流。您必须先将数据写入字节流,然后再将其添加到列表并启动 MediaPlayer。使用 MediaPlayer 不是此特定场景的正确解决方案。

更好的解决方案是使用 Audio Graph . Audio Graph 允许您添加来自实际音频端点的输入源,因此您无需使用流式音频填充字节缓冲区。然后,您可以使用子混合节点在音频端点流之间进行混合,而不会发出咔嗒声或爆音。

关于c# - UWP MediaPlaybackList 在列表项之间弹出声音,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54544595/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com