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

.NET 7 API控制器如何接收音频流并返回转换后的Wav流?

音频格式转换API控制器实现方案

修正后的完整代码

public class AudioController : ControllerBase
{
    private readonly ILogger<AudioController> _logger;

    public AudioController(ILogger<AudioController> logger)
    {
        _logger = logger;
    }

    [HttpPost]
    [Route("/opus-to-wav")]
    public async Task<IActionResult> ConvertOpusToWav()
    {
        // 读取请求体中的音频流
        using var inputStream = new MemoryStream();
        await Request.Body.CopyToAsync(inputStream);
        inputStream.Position = 0;

        // 调用转换方法生成WAV流
        using var wavStream = WavConverter.ConvertOpusToWav(inputStream);
        wavStream.Position = 0;

        // 返回WAV音频响应
        return File(wavStream, "audio/wav", "opus-converted.wav");
    }

    [HttpPost]
    [Route("/aac-to-wav")]
    public async Task<IActionResult> ConvertAACToWav()
    {
        using var inputStream = new MemoryStream();
        await Request.Body.CopyToAsync(inputStream);
        inputStream.Position = 0;

        using var wavStream = WavConverter.ConvertAACToWav(inputStream);
        wavStream.Position = 0;

        return File(wavStream, "audio/wav", "aac-converted.wav");
    }
}

核心修改点说明

  • 获取输入音频流:从Request.Body读取请求中的原始音频流,复制到MemoryStream后重置位置,保证转换方法能从头读取内容。
  • 流资源管理:用using语句自动释放流资源,避免内存泄漏问题。
  • 正确返回音频响应:放弃Ok(),改用File()方法——这是ASP.NET Core中返回文件流的标准方式,指定MIME类型为audio/wav,同时设置建议的下载文件名。
  • 重置流位置:转换前后都要把流的Position设为0,否则读取操作会从流的末尾开始,导致返回空内容。

如果你的WavConverter提供异步转换方法(比如ConvertOpusToWavAsync),可以把同步调用改成异步,进一步优化性能:

using var wavStream = await WavConverter.ConvertOpusToWavAsync(inputStream);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 16:57:18