Beranda → Blog → Suara ke teks dengan C#: menyambung dari .NET dalam lima menit
Suara ke teks dengan C#: menyambung dari .NET dalam lima menit
Di lingkungan .NET kebutuhannya biasanya bermula dari panggilan telepon: sistem telepon merekam percakapan, CRM menyimpan kesepakatan, dan teks adalah mata rantai yang hilang. Menyambungkannya makan lima menit, lewat klien resmi maupun HttpClient polos.
Memakai klien resmi
Kalau paket OpenAI sudah ada di proyek, cukup ganti alamatnya:
var options = new OpenAIClientOptions { Endpoint = new Uri("https://voicesscribe.com/v1") };
var client = new OpenAIClient(new ApiKeyCredential(Environment.GetEnvironmentVariable("VS_KEY")), options);
var audio = client.GetAudioClient("whisper-1");
var result = await audio.TranscribeAudioAsync("call.ogg");
Console.WriteLine(result.Value.Text);
Sisanya tetap sama: parameter, penguraian jawaban, dan tipe eksepsi tidak berubah.
Tanpa paket pihak ketiga
Kalau enggan menambah dependensi, HttpClient sudah memadai:
using var http = new HttpClient { Timeout = TimeSpan.FromMinutes(3) };
http.DefaultRequestHeaders.Authorization =
new AuthenticationHeaderValue("Bearer", Environment.GetEnvironmentVariable("VS_KEY"));
using var form = new MultipartFormDataContent();
using var stream = File.OpenRead("call.ogg");
var file = new StreamContent(stream);
file.Headers.ContentType = new MediaTypeHeaderValue("audio/ogg");
form.Add(file, "file", "call.ogg");
form.Add(new StringContent("whisper-1"), "model");
var response = await http.PostAsync("https://voicesscribe.com/v1/audio/transcriptions", form);
var json = await response.Content.ReadAsStringAsync();
if (!response.IsSuccessStatusCode)
throw new InvalidOperationException($"galat {(int)response.StatusCode}: {json}");
using var doc = JsonDocument.Parse(json);
Console.WriteLine(doc.RootElement.GetProperty("text").GetString());
Nama berkas di form.Add wajib — dari situlah format audio dikenali.
Menangani aliran panggilan
Sistem telepon mengirim rekaman berombongan, jadi pekerjaannya pantas ditaruh di layanan latar. Bentuk yang praktis: antrean pekerjaan, batas paralel lewat SemaphoreSlim, coba ulang dengan jeda membesar untuk kegagalan sementara, lalu hasilnya ditulis ke kartu kesepakatan.
Buat satu HttpClient per aplikasi — lewat IHttpClientFactory atau bidang statis. Instans baru tiap permintaan menghabiskan soket saat beban tinggi, dan itu kesalahan klasik di .NET.
Detail yang menggigit
- Batas waktu. Bawaannya seratus detik, kurang untuk rekaman panjang. Naikkan.
- Pengodean. Jawaban berformat UTF-8; setel Console.OutputEncoding di Windows agar huruf non-Latin tidak jadi tanda tanya.
- Format jawaban. Tambahkan response_format sebagai StringContent lain untuk mendapat srt, vtt, atau segmen berwaktu.
- Rahasia. Simpan kunci di konfigurasi, bukan di kendali versi.
Coba dengan rekaman Anda sendiri. Pendaftaran memakan waktu satu menit, dan menit gratisnya cukup untuk menilai kualitasnya.
Ambil kunci API gratisPertanyaan yang sering diajukan
Apakah klien resmi wajib?
Tidak, HttpClient dari pustaka standar sepenuhnya memadai. Klien resmi nyaman kalau proyek sudah memakainya.
Kenapa berkas panjang kehabisan waktu?
HttpClient menunggu seratus detik secara bawaan. Untuk berkas di batas ukuran setel dua tiga menit.
Bagaimana mendapat segmen berwaktu?
Tambahkan bidang response_format bernilai verbose_json, jawabannya memuat waktu mulai dan selesai tiap ucapan.
Cocokkah untuk layanan latar?
Cocok, pola umumnya layanan terkelola dengan antrean dan batas paralel sesuai paket Anda.
Bacaan terkait
- Cara mengubah rekaman telepon menjadi teks — Panduan langkah demi langkah mengubah rekaman percakapan telepon menjadi teks lewat API dalam hitungan menit. Lengkap dengan contoh Python, C#, dan daftar galat.
- Galat API transkripsi dan apa artinya sebenarnya — Penjelasan kode status API transkripsi: mengapa muncul 401, 400, 413, 429, dan 502, cara memperbaikinya, serta kegagalan mana yang layak diulang.
- Suara ke teks dengan Java: kode di atas HttpClient standar — Mengirim audio untuk ditranskrip dari Java: menyusun permintaan multipart dengan HttpClient bawaan, mengurai jawaban, batas waktu, dan penanganan galat.