public void loadMedia() { _isLoading = true; _firedCanPlay = false; WriteDebug("method:load " + media.CurrentState); WriteDebug(" - " + _mediaUrl.ToString()); // Load custom MediaStreamSource switch (_codec) { case "audio/wav": { Stream stream = new PartialHTTPStream(_mediaUrl); _streamSource = new WaveMediaStreamSource(stream); media.SetSource(_streamSource); } break; case "audio/flac": { Stream stream = new PartialHTTPStream(_mediaUrl); FlacBox.WaveOverFlacStream flacStream = new FlacBox.WaveOverFlacStream(stream, FlacBox.WaveOverFlacStreamMode.Decode); _streamSource = new WaveMediaStreamSource(flacStream); media.SetSource(_streamSource); } break; default: _streamSource = null; media.Source = new Uri(_mediaUrl, UriKind.Absolute); break; } }
void Play_TouchUpInside(object sender, EventArgs e) { OutputLabel.Text = $"Playing"; var os = new MemoryStream(); if (_options.StreamFormat == AudioRecordOptions.Format.Flac) { using (var fs = new MemoryStream(bytes)) { using (var f = new FlacBox.WaveOverFlacStream(fs, FlacBox.WaveOverFlacStreamMode.Decode, false)) { f.CopyTo(os); os.Seek(0, SeekOrigin.Begin); } } } else { os = new MemoryStream(bytes); } using (var data = NSData.FromStream(os)) { PlayData(data); } }
async void Start_Click(object sender, System.EventArgs e) { if (_recorder != null) { return; } _recorder = new AndroidAudioRecorder(); var result = await _recorder.Record(_options); _output.Text = $"Recorded {result.AudioBytes.Length} bytes"; // playback file _tmpFile = File.CreateTempFile("TCL", "wav", CacheDir); _tmpFile.DeleteOnExit(); if (_options.StreamFormat == AudioRecordOptions.Format.Wave) { var fos = new FileOutputStream(_tmpFile); fos.Write(result.AudioBytes); fos.Close(); } else { using (var ms = new System.IO.MemoryStream(result.AudioBytes)) { using (var fos = System.IO.File.OpenWrite(_tmpFile.AbsolutePath)) { using (var f = new FlacBox.WaveOverFlacStream(ms, FlacBox.WaveOverFlacStreamMode.Decode, false)) { f.CopyTo(fos); } } } } _recorder = null; }
/// <summary> /// Sets the track. /// </summary> /// <param name="trackId">The track identifier.</param> public void SetTrack(string trackId) { CurrentSong = trackId; LibraryTrack track = library.GetTrack(trackId); if (track != null) { WaveStream stream; if (Path.GetExtension(track.Path) == ".flac") { var flac = new FlacBox.WaveOverFlacStream(new FlacBox.FlacReader(File.OpenRead(track.Path), false)); stream = new RawSourceWaveStream(flac, new WaveFormat()); } else { stream = new MediaFoundationReader(track.Path); } try { waveOutDevice.Init(stream); } catch { nextCallback(); } } else { nextCallback(); } }