百度語音識別 REST API 提供了強大的語音轉文字能力,開發者常見的疑問是如何在 C# 中正確處理下行(回傳)數據。本文整理官方文件重點,並提供完整的 C# 呼叫範例,幫助你快速整合。
https://vop.baidu.com/server_api將音訊 Base64 編碼後放入 JSON 的 speech 欄位,並指定原始長度 len(單位:位元組)。
Content-Type: application/json
{
"format": "speex",
"rate": 8000,
"channel": 1,
"token": "your_token",
"cuid": "mac_address_or_imei",
"len": 4096,
"speech": "base64_encoded_audio_data"
}
注意:len 為原始音訊長度,非 Base64 後長度;speech 與 len 綁定,url 與 callback 綁定,二擇一。
音訊二進位直接放在 HTTP Body,參數以 Query String 傳遞,Header 中標示音訊格式。
Content-Type: audio/amr;rate=8000
Content-Length: [raw_audio_length]
POST https://vop.baidu.com/server_api?lan=zh&cuid=xxx&token=xxx
成功時 err_no = 0,結果在 result 陣列 (1~5 個候選),UTF-8 編碼。
{
"err_no": 0,
"err_msg": "success.",
"corpus_no": "15984125203285346378",
"sn": "481D633F-73BA-726F-49EF-8659ACCC2F3D",
"result": ["北京天氣"]
}
失敗範例:
{"err_no":2000,"err_msg":"data empty.","sn":null}
| 錯誤碼 | 含義 |
|---|---|
| 3300 | 輸入參數不正確 |
| 3301 | 識別錯誤 |
| 3302 | 驗證失敗 (token 錯誤/過期) |
| 3303 | 語音伺服器後端問題 |
| 3304 | 請求 GPS 過大,超過限額 |
| 3305 | 產品線當日請求數超過限額 |
using System;
using System.IO;
using System.Net;
using System.Text;
using Newtonsoft.Json;
public class BaiduAsrClient
{
private const string ApiUrl = "https://vop.baidu.com/server_api";
private readonly string _token;
private readonly string _cuid;
public BaiduAsrClient(string token, string cuid)
{
_token = token;
_cuid = cuid;
}
public string Recognize(byte[] audioData, string format = "pcm", int rate = 16000)
{
var requestObj = new
{
format = format,
rate = rate,
channel = 1,
cuid = _cuid,
token = _token,
len = audioData.Length,
speech = Convert.ToBase64String(audioData)
};
string json = JsonConvert.SerializeObject(requestObj);
byte[] postData = Encoding.UTF8.GetBytes(json);
var request = (HttpWebRequest)WebRequest.Create(ApiUrl);
request.Method = "POST";
request.ContentType = "application/json";
request.ContentLength = postData.Length;
using (var stream = request.GetRequestStream())
{
stream.Write(postData, 0, postData.Length);
}
using (var response = (HttpWebResponse)request.GetResponse())
using (var reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8))
{
return reader.ReadToEnd(); // JSON 字串,自行反序列化取 result
}
}
}
token 有效且未過期,定期刷新。cuid 建議使用裝置唯一識別碼 (MAC / IMEI),長度 ≤ 64 字元。