public Windows.Foundation.IAsyncOperationWithProgress <IBuffer, uint> ReadAsync(IBuffer buffer, uint count, InputStreamOptions options) { return(System.Runtime.InteropServices.WindowsRuntime.AsyncInfo.Run <IBuffer, uint>((token, progress) => { return Task.Run(() => { System.Diagnostics.Debug.WriteLine("ReadAsync for: " + count.ToString() + " bytes - Stream Size: " + internalStream.Size + " Stream position: " + internalStream.Position); // If first Read call if ((ReadDataIndex == 0) && (internalStream.Size > count)) { // First dummy read of the header inputStream = internalStream.GetInputStreamAt(wavHeaderLength); uint currentDataLength = (uint)(internalStream.Size - wavHeaderLength); if (currentDataLength > 0) { data.length = currentDataLength; var WAVHeaderBuffer = CreateWAVHeaderBuffer(data.length); if (WAVHeaderBuffer != null) { int headerLen = WAVHeaderBuffer.Length; if (count >= headerLen) { byte[] updatedBuffer = new byte[count]; WAVHeaderBuffer.CopyTo(updatedBuffer.AsBuffer()); if (count > headerLen) { //fill buffer inputStream.ReadAsync(updatedBuffer.AsBuffer((int)headerLen, (int)(count - headerLen)), (uint)(count - headerLen), options).AsTask().Wait(); } buffer = updatedBuffer.AsBuffer(); ReadDataIndex += buffer.Length; System.Diagnostics.Debug.WriteLine("ReadAsync return : " + buffer.Length.ToString() + " bytes - Stream Size: " + internalStream.Size + " Stream position: " + internalStream.Position); progress.Report((uint)buffer.Length); return updatedBuffer.AsBuffer(); } } } } else { inputStream.ReadAsync(buffer, count, options).AsTask().Wait(); ReadDataIndex += buffer.Length; System.Diagnostics.Debug.WriteLine("ReadAsync return : " + buffer.Length.ToString() + " bytes - Stream Size: " + internalStream.Size + " Stream position: " + internalStream.Position); progress.Report((uint)buffer.Length); return buffer; } return null; }); })); }
public Windows.Foundation.IAsyncOperationWithProgress <IBuffer, uint> ReadAsync(IBuffer buffer, uint count, InputStreamOptions options) { return(System.Runtime.InteropServices.WindowsRuntime.AsyncInfo.Run <IBuffer, uint>((token, progress) => { return Task.Run(() => { System.Diagnostics.Debug.WriteLine("ReadAsync for: " + count.ToString() + " bytes - Stream Size: " + internalStream.Size + " Stream position: " + internalStream.Position); inputStream.ReadAsync(buffer, count, options).AsTask().Wait(); System.Diagnostics.Debug.WriteLine("ReadAsync return : " + buffer.Length.ToString() + " bytes - Stream Size: " + internalStream.Size + " Stream position: " + internalStream.Position); progress.Report((uint)buffer.Length); return buffer; }); })); }
private async void Sck_MessageReceived(MessageWebSocket sender, MessageWebSocketMessageReceivedEventArgs args) { //[email protected]("Message received " + args); if (args.MessageType == SocketMessageType.Utf8) { Windows.Storage.Streams.DataReader messageReader = args.GetDataReader(); messageReader.UnicodeEncoding = UnicodeEncoding.Utf8; string messageString = messageReader.ReadString(messageReader.UnconsumedBufferLength); com.codename1.io.websocket.WebSocket.messageReceived(id, messageString); } else { Windows.Storage.Streams.IInputStream readStream = args.GetDataStream(); byte[] readBuffer = new byte[4096]; try { while (true) { if (sender != sck) { return; } IBuffer res = await readStream.ReadAsync(readBuffer.AsBuffer(), (uint)readBuffer.Length, 0); if (res.Length == 0) { return; } byte[] resArr = new byte[res.Length]; res.CopyTo(resArr); com.codename1.io.websocket.WebSocket.messageReceived(1, resArr); } } catch (Exception ex) { com.codename1.io.websocket.WebSocket.errorReceived(id, ex.Message, ex.HResult); } } }
public bool Start() { try { StreamSocketListener listener = new StreamSocketListener(); listener.BindServiceNameAsync("80").AsTask(); listener.ConnectionReceived += async(sender, args) => { StringBuilder request = new StringBuilder(); using (Windows.Storage.Streams.IInputStream input = args.Socket.InputStream) { byte[] data = new byte[BufferSize]; Windows.Storage.Streams.IBuffer buffer = data.AsBuffer(); uint dataRead = BufferSize; while (dataRead == BufferSize) { await input.ReadAsync(buffer, BufferSize, InputStreamOptions.Partial); request.Append(Encoding.UTF8.GetString(data, 0, data.Length)); dataRead = buffer.Length; } //In the future, maybe we parse the HTTP request and serve different HTML pages for now we just always push index.html } using (IOutputStream output = args.Socket.OutputStream) { using (System.IO.Stream response = output.AsStreamForWrite()) { string page = ""; var folder = Windows.ApplicationModel.Package.Current.InstalledLocation; // acquire file var file = await folder.GetFileAsync("index.html"); var readFile = await Windows.Storage.FileIO.ReadLinesAsync(file); foreach (var line in readFile) { page += line; } byte[] bodyArray = Encoding.UTF8.GetBytes(page); var bodyStream = new MemoryStream(bodyArray); //iCount++; var header = "HTTP/1.1 200 OK\r\n" + $"Content-Length: {bodyStream.Length}\r\n" + "Connection: close\r\n\r\n"; byte[] headerArray = Encoding.UTF8.GetBytes(header); await response.WriteAsync(headerArray, 0, headerArray.Length); await bodyStream.CopyToAsync(response); await response.FlushAsync(); } } }; return(true); } catch (Exception e) { return(false); } }
public Windows.Foundation.IAsyncOperationWithProgress <uint, uint> WriteAsync(IBuffer buffer) { return(System.Runtime.InteropServices.WindowsRuntime.AsyncInfo.Run <uint, uint>((token, progress) => { return Task.Run(() => { // If it's the first WriteAsync in the stream // the buffer should contains the WAV Header if ((internalStream.Size == 0) && (wavHeaderLength == 0)) { WriteDataIndex = 0; // Check header byte[] array = buffer.ToArray(); wavHeaderLength = ParseAndGetWAVHeaderLength(array); internalStream.WriteAsync(buffer).AsTask().Wait(); WriteDataIndex += buffer.Length; progress.Report((uint)(buffer.Length)); return (uint)(buffer.Length); } else { if (internalStream.Position != internalStream.Size) { System.Diagnostics.Debug.WriteLine("Warning WriteAsync: " + internalStream.Position.ToString() + "/" + internalStream.Size.ToString()); } ulong index = internalStream.Size; uint byteToWrite = buffer.Length; // System.Diagnostics.Debug.WriteLine("WriteAsync: " + buffer.Length.ToString() + " at position: " + internalStream.Position); internalStream.WriteAsync(buffer.ToArray(0, (int)byteToWrite).AsBuffer()).AsTask().Wait(); WriteDataIndex += buffer.Length; var byteArray = buffer.ToArray(); if (byteArray.Length >= 2) { var amplitude = Decode(byteArray).Select(Math.Abs).Average(x => x); if (AudioLevel != null) { this.AudioLevel(this, amplitude); } // Currently the level is too low if (thresholdDurationInBytes > 0) { if (audioStream == null) { if (internalStream.Size > thresholdDurationInBytes) { var readStream = internalStream.GetInputStreamAt(internalStream.Size - thresholdDurationInBytes); byte[] readBuffer = new byte[thresholdDurationInBytes]; readStream.ReadAsync(readBuffer.AsBuffer(), (uint)thresholdDurationInBytes, InputStreamOptions.None).AsTask().Wait(); var level = Decode(readBuffer).Select(Math.Abs).Average(x => x); if (level > thresholdLevel) { System.Diagnostics.Debug.WriteLine("Audio Level sufficient to start recording"); thresholdStart = WriteDataIndex - thresholdDurationInBytes; audioStream = SpeechToTextAudioStream.Create(nChannels, nSamplesPerSec, nAvgBytesPerSec, nBlockAlign, wBitsPerSample, thresholdStart); var headerBuffer = CreateWAVHeaderBuffer(0); if ((audioStream != null) && (headerBuffer != null)) { audioStream.WriteAsync(headerBuffer.AsBuffer()).AsTask().Wait(); audioStream.WriteAsync(readBuffer.AsBuffer()).AsTask().Wait(); } } } } else { audioStream.WriteAsync(buffer.ToArray(0, (int)byteToWrite).AsBuffer()).AsTask().Wait(); var readStream = internalStream.GetInputStreamAt(internalStream.Size - thresholdDurationInBytes); byte[] readBuffer = new byte[thresholdDurationInBytes]; readStream.ReadAsync(readBuffer.AsBuffer(), (uint)thresholdDurationInBytes, InputStreamOptions.None).AsTask().Wait(); var level = Decode(readBuffer).Select(Math.Abs).Average(x => x); if (level < thresholdLevel) { System.Diagnostics.Debug.WriteLine("Audio Level lower enough to stop recording"); thresholdEnd = WriteDataIndex; audioStream.Seek(0); var headerBuffer = CreateWAVHeaderBuffer((uint)(thresholdEnd - thresholdStart)); if (headerBuffer != null) { audioStream.WriteAsync(headerBuffer.AsBuffer()).AsTask().Wait(); } if (audioQueue != null) { audioStream.endIndex = thresholdEnd; audioQueue.Enqueue(audioStream); } if (BufferReady != null) { this.BufferReady(this); if (audioStream != null) { audioStream = null; } thresholdStart = 0; thresholdEnd = 0; } } } } } if (maxSize > 0) { // check maxSize if ((internalStream.Size > maxSize) && (audioStream == null)) { lock (maxSizeLock) { byte[] headerBuffer = null; if (wavHeaderLength > 0) { // WAV header present headerBuffer = new byte[wavHeaderLength]; inputStream = internalStream.GetInputStreamAt(0); inputStream.ReadAsync(headerBuffer.AsBuffer(), (uint)wavHeaderLength, InputStreamOptions.None).AsTask().Wait(); } seekOffset += (internalStream.Size - wavHeaderLength); internalStream.Dispose(); inputStream.Dispose(); internalStream = new Windows.Storage.Streams.InMemoryRandomAccessStream(); if (headerBuffer != null) { internalStream.WriteAsync(headerBuffer.AsBuffer()).AsTask().Wait(); } inputStream = internalStream.GetInputStreamAt(0); } } } if (internalStream.Position == internalStream.Size) { WriteDataIndex += buffer.Length; } progress.Report((uint)buffer.Length); return (uint)buffer.Length; } }); })); }