public async void PlayStream(string text) { var bufferSize = AudioTrack.GetMinBufferSize(16000, ChannelOut.Stereo, Encoding.Pcm16bit); ////new System.Threading.Thread(delegate (object o) //// { HttpWebRequest req = (HttpWebRequest)WebRequest.Create(Helpers.URL.NuanceURL); req.Method = "POST"; req.KeepAlive = false; req.Accept = "audio/x-wav;codec=pcm;bit=16;rate=16000"; // req.Accept = "audio/x-wav"; req.ContentType = "text/plain"; var streamOut = new StreamWriter(req.GetRequestStream(), System.Text.Encoding.ASCII); streamOut.Write(text); streamOut.Close(); audioTrack = new AudioTrack( Android.Media.Stream.Music, 8000, ChannelOut.Stereo, Android.Media.Encoding.Pcm16bit, bufferSize, AudioTrackMode.Stream); using (var stream = req.GetResponse().GetResponseStream()) { byte[] buffer = new byte[65536]; int read; audioTrack.Play(); while ((read = stream.Read(buffer, 0, buffer.Length)) > 0) { var pos = ms.Position; ms.Position = ms.Length; ms.Write(buffer, 0, read); ms.Position = pos; } } // }).Start(); //while (ms.Length < bufferSize * 5) //{ // System.Threading.Thread.Sleep(1000); //} var br = new BinaryReader(ms); await PlayAudioTrack(br.ReadBytes((int)ms.Length)); ////ms.Position = 0; ////var br = new BinaryReader(ms); ////PlayAudioTrack(br.ReadBytes((int)ms.Length)); audioTrack.Release(); }
private void PlayMetronome() { const int amp = 10000; double twopi = 8*Math.Atan(1.0); const double fr = 440.0; double ph = 0.0; int lastBpm = metronCurrentBpm; Animation anim = new AlphaAnimation(0.5f, 1.0f); anim.Duration = (60000/metronCurrentBpm)/2; anim.StartOffset = 0; anim.RepeatMode = RepeatMode.Reverse; anim.RepeatCount = Animation.Infinite; RunOnUiThread(() => { metronBpmText.StartAnimation(anim); }); metronAudioTrack = new AudioTrack(Android.Media.Stream.Music, 44100, ChannelOut.Mono, Encoding.Pcm16bit, metronBuffSize, AudioTrackMode.Stream); metronAudioTrack.Play(); while (reading) { Thread.Sleep(60000/metronCurrentBpm); if (lastBpm != metronCurrentBpm) { // The BPM has changed - change the animation speed! lastBpm = metronCurrentBpm; anim.Duration = (60000/metronCurrentBpm)/2; RunOnUiThread(() => { metronBpmText.ClearAnimation(); metronBpmText.StartAnimation(anim); }); } for (int i = 0; i < metronAudioBuffer.Length; i++) { metronAudioBuffer[i] = (short) (amp*Math.Sin(ph)); ph += twopi*fr/44100; } metronAudioTrack.Write(metronAudioBuffer, 0, metronAudioBuffer.Length); } metronAudioTrack.Stop(); metronAudioTrack.Release(); RunOnUiThread(() => { metronBpmText.ClearAnimation(); }); }
private void TransferSend() { CurrentTransferDataLeft = CurrentTransfer.FileLength; var at = new AudioTrack(Android.Media.Stream.Music, 44100, ChannelConfiguration.Mono, Android.Media.Encoding.Pcm16bit, 0x1000, AudioTrackMode.Stream); at.Play(); // Polarity calibration header for (int i = 0; i < 200; i++) { WriteValue(at, BitConverter.GetBytes(-0x7fff), Bitlen); WriteValue(at, BitConverter.GetBytes(0x7fff), Bitlen * 3); } // Lead-in for (int i = 0; i < 20; i++) PutByte(at, 0xff); // Sync sequence for (byte i = 0x08; i >= 0x04; i--) PutByte(at, i); // Data byte[] buf = new byte[1]; while (CurrentTransferDataLeft > 0 && !AbortCurrentTransfer) { CurrentTransfer.GetData(buf); PutByte(at, buf[0]); CurrentTransferDataLeft--; } at.Stop(); at.Release(); at.Dispose(); CurrentTransfer.Close(); ParentConnection.RaiseFileTransferEnded(CurrentTransfer, true, AbortCurrentTransfer); }