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

Nginx反向代理导致NAudio播放音频出现白噪声问题排查

TTS工具切换Nginx域名访问后NAudio播放出现白噪声问题

我正尝试将TTS工具的访问方式从直接IP切换为Nginx管控的域名访问,其他功能均正常,但程序中的NAudio播放音频时出现白噪声(偶尔夹杂正常音频)。

使用的代码未发生变更,直接通过URL调用流功能可播放无错误音频,甚至在播放含白噪声的流后将其保存到本地,得到的仍是完整正常的音频文件。因此想了解:Nginx/域名访问是否会修改请求响应?或者有什么方法可以自行验证?

请求音频流的代码

HttpClient httpClient = new HttpClient();
httpClient.BaseAddress = new Uri(data.BaseUrl);
httpClient.Timeout = TimeSpan.FromSeconds(2);

HttpResponseMessage res = null;
try
{
    var uriBuilder = new UriBuilder(data.BaseUrl);
    uriBuilder.Path = data.StreamPath;
    var query = HttpUtility.ParseQueryString(uriBuilder.Query);
    query["text"] = voiceLine;
    query["voice"] = voice;
    query["language"] = getAlltalkLanguage(language);
    query["output_file"] = "ignoreme.wav";
    uriBuilder.Query = query.ToString();
    LogHelper.Debug(MethodBase.GetCurrentMethod().Name, $"Requesting... {uriBuilder.Uri}", eventId);
    using var req = new HttpRequestMessage(HttpMethod.Get, uriBuilder.Uri);

    res = await httpClient.SendAsync(req, HttpCompletionOption.ResponseHeadersRead).ConfigureAwait(false);
    EnsureSuccessStatusCode(res);

    // Copy the sound to a new buffer and enqueue it
    LogHelper.Info(MethodBase.GetCurrentMethod().Name, "Getting response...", eventId);
    var responseStream = await res.Content.ReadAsStreamAsync().ConfigureAwait(false);

    LogHelper.Info(MethodBase.GetCurrentMethod().Name, "Done", eventId);
    return responseStream ;
}
catch (Exception ex)
{
    LogHelper.Error(MethodBase.GetCurrentMethod().Name, ex.ToString(), eventId);
}

播放流的代码

CurrentlyPlayingStream = queueItem;
var stream = new RawSourceWaveStream(queueItem, new NAudio.Wave.WaveFormat(24000, 16, 1));
LogHelper.Info(MethodBase.GetCurrentMethod().Name, "Playing next queue item", eventId);
var volumeSampleProvider = new VolumeSampleProvider(stream.ToSampleProvider());
volumeSampleProvider.Volume = Volume;

ActivePlayer = new WasapiOut(AudioClientShareMode.Shared, 0);
ActivePlayer.PlaybackStopped += SoundOut_PlaybackStopped;
ActivePlayer.Init(volumeSampleProvider);
ActivePlayer.Play();

编辑1

我在Docker环境中使用Nginx Proxy Manager(NPM),无自定义配置。

已尝试的操作:

  • 禁用Nginx/通过Domain:Port访问,排除域名问题;
  • 设置gzip off;;
  • 禁用SSL;
    以上操作均未解决问题。

编辑2

经过数小时调试,怀疑某些数据包的传输方式不符合NAudio直接播放流的要求,但通过NAudio保存后却正常。是否可能是Nginx偶尔传输延迟导致?(播放的音频中随机出现白噪声,每次情况不同)


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 11:37:30