You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET Core下替代SoundPlayer的GenericEventArgs<Stream>音频播放方案咨询

替代System.Media.SoundPlayer的.NET Core音频播放方案

我之前做.NET Core迁移时也碰到过一模一样的问题,原来的System.Media.SoundPlayer在.NET Core里确实被移除了,不过不用慌,NAudio其实完全能搞定你的需求,大概率是之前的用法没踩对关键点。下面结合你的场景(从GenericEventArgs<Stream>播放TTS音频)给你详细的适配方案:

首选方案:NAudio(跨平台、灵活)

NAudio是.NET生态里最成熟的音频处理库,完美支持.NET Core/5+,而且能处理各种音频流格式。

第一步:安装NAudio包

用NuGet包管理器或者.NET CLI安装:

dotnet add package NAudio

第二步:适配原有播放逻辑

假设你原来的SoundPlayer调用大概是这样的:

// 原有SoundPlayer代码示例
using System.Media;

private void PlayReceivedAudio(Stream audioStream)
{
    using var player = new SoundPlayer(audioStream);
    player.Play();
}

现在替换成NAudio的实现,专门处理GenericEventArgs<Stream>的场景:

using NAudio.Wave;

// 类级别维护WaveOut实例,避免重复创建
private WaveOutEvent _audioPlayer;

private void OnAudioReceived(object sender, GenericEventArgs<Stream> e)
{
    // 先停止并清理之前的播放任务
    _audioPlayer?.Stop();
    _audioPlayer?.Dispose();

    try
    {
        // 把传入的流包装为WaveStream(默认假设是WAV格式,大部分TTS API都支持返回WAV)
        using var waveStream = new WaveFileReader(e.Value);
        
        _audioPlayer = new WaveOutEvent();
        _audioPlayer.Init(waveStream);
        _audioPlayer.Play();

        // 播放完成后自动清理资源
        _audioPlayer.PlaybackStopped += (s, args) =>
        {
            _audioPlayer.Dispose();
            _audioPlayer = null;
            e.Value.Dispose(); // 释放音频流
        };
    }
    catch (Exception ex)
    {
        Console.WriteLine($"音频播放失败: {ex.Message}");
        e.Value.Dispose(); // 异常时也要释放流
    }
}

特殊情况:如果TTS返回的是PCM裸流

如果你的TTS API返回的不是标准WAV,而是PCM裸数据,需要手动指定音频格式:

// 示例:16位、单声道、44100Hz的PCM格式
var targetFormat = new WaveFormat(44100, 16, 1);
using var waveStream = new RawSourceWaveStream(e.Value, targetFormat);
// 后续的Init、Play逻辑和上面一致

注意事项

  • 确保TTS API返回的音频格式是NAudio支持的(WAV是最稳妥的选择,建议在API配置里指定)
  • WaveOutEvent是无窗口依赖的播放类,适合控制台、WinForms、WPF等各种.NET Core应用
  • 一定要妥善处理资源释放,避免内存泄漏(比如播放完成后Dispose播放器和流)

内容的提问来源于stack exchange,提问作者user9464656

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:55:05