openai/openai-dotnet

Public

mirrored from https://github.com/openai/openai-dotnetAvailable

CodeCommitsIssuesPull requestsActionsInsightsSecurity
OpenAI_2.10.0

Branches

Tags

  • No tags available.
0Branches0Tags
Go to file
Add file
Code

Clone

HTTPS

Download ZIP

examples/Audio/Example05_DiarizedTranscriptionAsync.cs

63lines · modeblame

d002b9c3ShivangiReja5 months ago1using NUnit.Framework;
2using OpenAI.Audio;
3using System;
4using System.IO;
5using System.Threading.Tasks;
6
7namespace OpenAI.Examples;
8
9public partial class AudioExamples
10{
11[Test]
12public async Task Example05_DiarizedTranscriptionAsync()
13{
14AudioClient client = new("gpt-4o-transcribe-diarize", Environment.GetEnvironmentVariable("OPENAI_API_KEY"));
15
16string audioFilePath = Path.Combine("Assets", "audio_meeting.wav");
17string speakerRefPath = Path.Combine("Assets", "audio_agent_reference.wav");
18
19byte[] speakerRefBytes = File.ReadAllBytes(speakerRefPath);
20string speakerRefBase64 = Convert.ToBase64String(speakerRefBytes);
21
22AudioTranscriptionOptions options = new()
23{
24ResponseFormat = AudioTranscriptionFormat.Diarized,
25KnownSpeakerNames = { "agent" },
26KnownSpeakerReferenceUris = { new Uri($"data:audio/wav;base64,{speakerRefBase64}") },
27};
28
29DiarizedAudioTranscription transcription = await client.TranscribeAudioDiarizedAsync(audioFilePath, options);
30
31Console.WriteLine("Transcription:");
32Console.WriteLine($"{transcription.Text}");
33
34Console.WriteLine();
35Console.WriteLine($"Duration: {transcription.Duration.TotalSeconds:0.00}s");
36
37Console.WriteLine();
38Console.WriteLine($"Segments:");
39foreach (DiarizedTranscriptionSegment segment in transcription.Segments)
40{
41Console.WriteLine($" [{segment.SpeakerLabel}] {segment.Text,90} : {segment.StartTime.TotalMilliseconds,5:0} - {segment.EndTime.TotalMilliseconds,5:0}");
42}
43
44Console.WriteLine();
45Console.WriteLine($"Usage:");
46if (transcription.Usage is AudioTranscriptionTokenUsage tokenUsage)
47{
48Console.WriteLine($" Input tokens: {tokenUsage.InputTokenCount}");
49Console.WriteLine($" Output tokens: {tokenUsage.OutputTokenCount}");
50Console.WriteLine($" Total tokens: {tokenUsage.TotalTokenCount}");
51if (tokenUsage.InputTokenDetails is not null)
52{
53Console.WriteLine($" Input token details:");
54Console.WriteLine($" Text tokens: {tokenUsage.InputTokenDetails.TextTokenCount}");
55Console.WriteLine($" Audio tokens: {tokenUsage.InputTokenDetails.AudioTokenCount}");
56}
57}
58else if (transcription.Usage is AudioTranscriptionDurationUsage durationUsage)
59{
60Console.WriteLine($" Duration: {durationUsage.Duration.TotalSeconds:0.00}s");
61}
62}
63}