/// <summary> /// Reproduce la cancion anterior de la cola o reinicia la reproduccion de la actual si el tiempo de reproduccion /// es menor o igual a 10 segundos /// </summary> public void ReproducirCancionAnterior() { try { if (_blockAlignedStream.CurrentTime.TotalSeconds <= 10) { switch (_colaDeReproduccion.ObtenerTipoDeCancionAnterior()) { case Cola.TipoCancionAReproducir.Cancion: var cancionAnterior = _colaDeReproduccion.ObtenerCancion(true); if (cancionAnterior != null) { EmpezarAReproducirCancion(cancionAnterior); } break; case Cola.TipoCancionAReproducir.CancionPersonal: var cancionPersonalAnterior = _colaDeReproduccion.ObtenerCancionPersonal(true); if (cancionPersonalAnterior != null) { EmpezarAReproducirCancionPersonal(cancionPersonalAnterior); } break; case Cola.TipoCancionAReproducir.CancionSinConexion: var cancionSinConexionAnteriror = _colaDeReproduccion.ObtenerCancionSinConexion(true); if (cancionSinConexionAnteriror != null) { EmpezarAReproducirCancionSinConexion(cancionSinConexionAnteriror); } break; } } else { if (_blockAlignedStream != null) { _blockAlignedStream.Seek(0, SeekOrigin.Begin); OnAvanceCancion?.Invoke(0); if (_estadoReproductor == EstadoReproductor.Detenido) { _waveOutEvent.Play(); if (_estadoReproductor == EstadoReproductor.Detenido || _estadoReproductor == EstadoReproductor.Pausado) { _seguidorDeEventosDelReproductor.Start(); _estadoReproductor = EstadoReproductor.Reproduciendo; } OnCambioEstadoReproduccion?.Invoke(true); } } } } catch (NullReferenceException) { } }
/// <summary> /// Sigue el tiempo de reproduccion de la cancion en reproduccion /// </summary> /// <param name="sender">El objeto que invoco el evento</param> /// <param name="e">El evento invocado</param> private void SeguidorDeTiempoReproduccion(object sender, EventArgs e) { OnAvanceCancion?.Invoke(_blockAlignedStream.CurrentTime.TotalSeconds); if ((int)Math.Ceiling(_blockAlignedStream.CurrentTime.TotalSeconds) >= (int)Math.Ceiling(_duracionTotalDeCancionEnReproduccion)) { _seguidorDeEventosDelReproductor.Stop(); _waveOutEvent.Stop(); _estadoReproductor = EstadoReproductor.Detenido; OnCambioEstadoReproduccion?.Invoke(false); if (_bufferCancion != null && _blockAlignedStream != null) { _bufferCancion.Dispose(); _blockAlignedStream.Dispose(); } ReproducirSiguienteCancion(); } }