Ich arbeite mit Whisper in einem .NET MAUI -Projekt. Für die Kompilierung Schnelligkeit ist mein Ziel für die Arbeit an Windows.[code] private static WhisperFactory? _factory; private static WhisperProcessor? _processor; private static string DBName = "ggml-large-v1.bin"; private static string dbPath = string.Empty;
public static void WhisperHandlerStartup(string modelPath) { // check to see if llm exists dbPath = Path.Combine(FileSystem.AppDataDirectory, DBName); if (!File.Exists(dbPath)) { Debug.WriteLine($"Model file {dbPath} does not exist. Downloading..."); DownloadModel(DBName, GgmlType.LargeV1).GetAwaiter().GetResult(); } else { Debug.WriteLine($"Model file {dbPath} already exists."); } try { _factory = WhisperFactory.FromPath(dbPath); _processor = _factory.CreateBuilder() .WithLanguage("auto") .Build(); } catch (Exception ex) { Debug.WriteLine($"Error initializing WhisperHandler: {ex.Message}"); throw; } }
try { // Read all bytes from the MP3/M4A file byte[] mp3Bytes = File.ReadAllBytes(mp3FilePath);
// Create a MemoryStream from the byte array using (MemoryStream audioStream = new MemoryStream(mp3Bytes)) {
Debug.WriteLine($"Audio file loaded into MemoryStream. Length: {audioStream.Length} bytes.");
// Example: You could reset the position to the beginning if needed for reading audioStream.Position = 0;
var test = audioStream.Length; var floatSamples = ConvertPcm16ToFloat(audioStream); // Whisper can only process PCM, convert here
var res = _processor.ProcessAsync(floatSamples);
string returnResult = string.Empty; // ProcessAsync returns an IAsyncEnumerable await foreach (var result in res ) { returnResult += result.Text; } Debug.WriteLine(res.ToString()); Debug.WriteLine("Processing complete."); } } catch (FileNotFoundException) { Console.WriteLine($"Error: audio file not found at '{mp3FilePath}'"); } catch (Exception ex) { Console.WriteLine($"An error occurred: {ex.Message}"); } }
/// /// Converts a PCM 16-bit mono MemoryStream to a float array normalized between -1.0 and 1.0. /// private static float[] ConvertPcm16ToFloat(Stream pcmStream) { pcmStream.Seek(0, SeekOrigin.Begin); using var br = new BinaryReader(pcmStream, System.Text.Encoding.Default, leaveOpen: true); var sampleCount = (int)(pcmStream.Length / 2); var floatSamples = new float[sampleCount]; for (int i = 0; i < sampleCount; i++) { short sample = br.ReadInt16(); floatSamples[i] = sample / 32768f; } return floatSamples; } [/code] Die Datei lädt und konvertiert in PCM OK, aber wenn ich an Whisper weitergegeben habe, bekomme ich nichts zurück und es gibt keine Fehler.>
Ich verwende PJSUA2 in Python, um eingehende SIP -Anrufe zu behandeln. Der Anruf wird erfolgreich empfangen und beantwortet, aber der OncallMediastate -Rückruf wird nie ausgelöst. Zusätzlich wird die...
Ich arbeite an einem C# -Projekt, bei dem ich ein bestimmtes Segment aus einer Audio -Datei (z. B. WAV, MP3) basierend auf Start- und Endzeitstempeln entfernen muss, während der Rest des Audio intakt...
In meinem Setup möchte ich eine Audio -Datei abspielen, wenn der aktuelle Benutzer eine E -Mail von einem bestimmten Absender empfängt. Am aktuellen Punkt verarbeitet Procmail die E -Mails, spielt...
Ich arbeite an einem Projekt, bei dem ich mit dem Flüstermodell von OpenAI in einem Google Cloud -Speicher -Bucket Audio transkribieren muss. Das Audio wird im Webm-Format mit OPUS-Codierung...