private async Task <string> GetVoiceSignatureString() { var audioStream = new MemoryStream(); var writer = new WaveDataWriterClass(audioStream, WaveFormat.Create16kHz1Channel16BitPcm()); using (var p = Pipeline.Create()) { var capture = new AudioCapture(p, WaveFormat.Create16kHz1Channel16BitPcm()); capture.Do(audio => writer.Write(audio.Data.DeepClone())); p.RunAsync(); await Task.Delay(5000); writer.Flush(); } var content = new ByteArrayContent(audioStream.GetBuffer(), 0, (int)audioStream.Length); var client = new HttpClient(); client.DefaultRequestHeaders.Add("Ocp-Apim-Subscription-Key", this.SubscriptionKey); var response = await client.PostAsync($"https://signature.{this.Region}.cts.speech.microsoft.com/api/v1/Signature/GenerateVoiceSignatureFromByteArray", content); var jsonData = await response.Content.ReadAsStringAsync(); var result = JsonConvert.DeserializeObject <VoiceSignature>(jsonData); return(JsonConvert.SerializeObject(result.Signature)); }
/// <summary> /// Creates a RIFF header for the supplied WaveFormat object. /// </summary> /// <param name="format">The WaveFormat object.</param> /// <returns>A byte array containing the RIFF header.</returns> private static byte[] CreateRiffHeader(WaveFormat format) { var formatStream = new MemoryStream(); // Use the helper WaveDataWriterClass to write the RIFF header to a MemoryStream using (var waveDataWriter = new WaveDataWriterClass(formatStream, format)) { // Since we only want the header, we don't need to write any data. The header has // already been written to the MemoryStream so we can just return the stream bytes. return(formatStream.ToArray()); } }