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

如何改造API使其接收WAV音频文件而非字符串?

嘿,我来帮你搞定这个API接收WAV文件的问题!看你已经搞定了wit.ai的调用,就差最后一步调整API端点了,下面是具体的实现步骤,基于你的代码片段推测是ASP.NET Core环境:

解决方案:修改API接收WAV音频文件并集成Speech-To-Text

1. 调整API端点的配置

首先得把原来接收字符串的端点改成支持接收音频文件的形式,需要添加[Consumes]特性指定接收multipart/form-data,并把参数换成IFormFile来接收上传的文件:

[ApiController]
[Route("api/speech-to-text")] // 替换成你原来的路由
[Produces("application/json")]
// 声明这个接口接收multipart/form-data类型的请求(传文件用这个类型)
[Consumes("multipart/form-data")]
public class SpeechToTextController : ControllerBase
{
    // 注入你已经实现的wit.ai服务实例
    private readonly IWitAiService _witAiService;

    public SpeechToTextController(IWitAiService witAiService)
    {
        _witAiService = witAiService;
    }

    [HttpPost]
    public async Task<IActionResult> ProcessAudio([FromForm] IFormFile audioFile)
    {
        // 后续的文件验证、处理逻辑都写在这里
    }
}

2. 验证上传的是合法WAV文件

为了避免收到不符合要求的文件,我们从扩展名和MIME类型两方面做验证:

// 先检查是否上传了文件
if (audioFile == null || audioFile.Length == 0)
{
    return BadRequest("请上传有效的WAV音频文件");
}

// 验证文件扩展名
var allowedExtensions = new[] { ".wav" };
var fileExtension = Path.GetExtension(audioFile.FileName).ToLowerInvariant();
if (!allowedExtensions.Contains(fileExtension))
{
    return BadRequest("仅支持WAV格式的音频文件");
}

// 验证MIME类型
var allowedMimeTypes = new[] { "audio/wav", "audio/x-wav" };
if (!allowedMimeTypes.Contains(audioFile.ContentType.ToLowerInvariant()))
{
    return BadRequest("上传的文件不是有效的WAV音频");
}

3. 处理音频并调用Speech-To-Text服务

接下来把上传的文件流直接传给wit.ai的API(或者你迁移后的服务器端STT服务),这里是wit.ai的调用示例:

try
{
    // 打开文件的读取流
    using var audioStream = audioFile.OpenReadStream();
    // 调用你已经实现的wit.ai服务方法,传入音频流
    var transcriptionText = await _witAiService.SendAudioForTranscription(audioStream);
    
    return Ok(new { TranscribedText = transcriptionText });
}
catch (Exception ex)
{
    // 这里可以添加日志记录,方便排查问题
    return StatusCode(500, $"处理音频时发生错误:{ex.Message}");
}

如果你还没封装wit.ai的服务,这里给你一个简单的实现参考:

// 先定义接口
public interface IWitAiService
{
    Task<string> SendAudioForTranscription(Stream audioStream);
}

// 实现类
public class WitAiService : IWitAiService
{
    private readonly HttpClient _httpClient;
    private readonly string _witApiKey;

    public WitAiService(HttpClient httpClient, IConfiguration config)
    {
        _httpClient = httpClient;
        _witApiKey = config["WitAi:ApiKey"]; // 从配置文件读取你的wit.ai密钥
        _httpClient.BaseAddress = new Uri("https://api.wit.ai/");
        // 添加授权头
        _httpClient.DefaultRequestHeaders.Add("Authorization", $"Bearer {_witApiKey}");
    }

    public async Task<string> SendAudioForTranscription(Stream audioStream)
    {
        var content = new StreamContent(audioStream);
        // 设置WAV文件的Content-Type
        content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("audio/wav");
        
        // 调用wit.ai的语音转文本接口,注意替换成你使用的API版本号
        var response = await _httpClient.PostAsync("speech?v=20240101", content);
        response.EnsureSuccessStatusCode(); // 如果请求失败会抛出异常
        
        // 解析wit.ai的响应,这里的模型对应wit.ai返回的JSON结构
        var result = await response.Content.ReadFromJsonAsync<WitAiResponse>();
        return result?.Text;
    }
}

// 对应wit.ai的响应模型,根据实际返回结构调整
public class WitAiResponse
{
    public string Text { get; set; }
    // 可以添加其他字段,比如意图、实体等,根据你的需求
}

4. 把服务注册到依赖注入容器

在Program.cs里添加服务注册,让框架能注入你的wit.ai服务:

// 注册HttpClient和WitAiService
builder.Services.AddHttpClient<IWitAiService, WitAiService>(client =>
{
    client.Timeout = TimeSpan.FromSeconds(30); // 设置超时时间,避免长时间等待
});

5. 额外注意事项

  • 文件大小限制:ASP.NET Core默认上传文件大小是30MB,如果需要支持更大的文件,可以在Program.cs里配置:
builder.Services.Configure<FormOptions>(options =>
{
    options.MultipartBodyLengthLimit = 100 * 1024 * 1024; // 设置为100MB
});
  • 本地STT迁移:如果之后要把本地STT服务迁到服务器,只需要把调用wit.ai的部分换成你服务器端STT服务的调用逻辑即可,同样是传入音频流处理。

测试API

你可以用Postman或者curl来测试:
用curl的话,命令大概是这样:

curl -X POST -F "audioFile=@your-local-file.wav" https://your-server-domain/api/speech-to-text

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:35:57