BerandaBlog → Suara ke teks dengan C#: menyambung dari .NET dalam lima menit

Suara ke teks dengan C#: menyambung dari .NET dalam lima menit

Diterbitkan 2026-08-20 · 5 menit baca

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

Coba dengan rekaman Anda sendiri. Pendaftaran memakan waktu satu menit, dan menit gratisnya cukup untuk menilai kualitasnya.

Ambil kunci API gratis

Pertanyaan 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