es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Flutter cómo reproducir y detener audio en un momento específico?

Tengo una aplicación reproductora de audio que utiliza el complemento just_audio. ¿Cómo puedo reproducir y detener el audio en un momento específico?

Por ejemplo, tengo un archivo de audio que dura 20 minutos. Quiero que cuando presione el botón de reproducción, el audio se reproduzca en el minuto 5 y se detenga en el minuto 8.

Aquí está mi código:

void _setInitialPlaylist() async {
    final myAudio1 = Uri.parse("asset:///audio/myAudio.mp3"); // Quiero que este audio se reproduzca desde 00:05:00 y se detenga en 00:08:00
    final myAudio2 = Uri.parse("asset:///audio/myAudio.mp3"); // Quiero que este audio se reproduzca desde 00:09:00 y se detenga en 00:12:00
    final myAudio3 = Uri.parse("asset:///audio/myAudio.mp3"); // Quiero que este audio se reproduzca desde 00:15:00 y se detenga en 00:19:00
    _playlist = ConcatenatingAudioSource(children: [
      AudioSource.uri(myAudio1, tag: 'myAudio1'),
      AudioSource.uri(myAudio2, tag: 'myAudio2'),
      AudioSource.uri(myAudio3, tag: 'myAudio3'),
    ]);
    await _audioPlayer.setAudioSource(_playlist);
}
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para reproducir y detener el audio en un momento específico utilizando el complemento just_audio, puede usar el método seek para establecer el punto de inicio y el método pause para detener el audio en el momento deseado. Para lograr esto en el código proporcionado, puede modificar el método _setInitialPlaylist de la siguiente manera:

    void _setInitialPlaylist() async {
      final myAudio1 = Uri.parse("asset:///audio/myAudio.mp3");
      final myAudio2 = Uri.parse("asset:///audio/myAudio.mp3");
      final myAudio3 = Uri.parse("asset:///audio/myAudio.mp3");
    
      // Establecer el tiempo de inicio y finalización para cada archivo de audio
      final audio1Start = Duration(minutes: 5);
      final audio1End = Duration(minutes: 8);
      final audio2Start = Duration(minutes: 9);
      final audio2End = Duration(minutes: 12);
      final audio3Start = Duration(minutes: 15);
      final audio3End = Duration(minutes: 19);
    
      _playlist = ConcatenatingAudioSource(children: [
        // Establecer la posición inicial y final para cada archivo de audio
        AudioSource.uri(myAudio1, tag: 'myAudio1', start: audio1Start, end: audio1End),
        AudioSource.uri(myAudio2, tag: 'myAudio2', start: audio2Start, end: audio2End),
        AudioSource.uri(myAudio3, tag: 'myAudio3', start: audio3Start, end: audio3End),
      ]);
    
      await _audioPlayer.setAudioSource(_playlist);
    }
    
    // Llame a este método para reproducir y detener el audio en un momento específico
    void _playFromTo(Duration start, Duration end) async {
      // Establecer la posición de inicio
      await _audioPlayer.seek(start);
    
      // Comenzar a reproducir
      await _audioPlayer.play();
    
      // Esperar la duración solicitada
      await Future.delayed(end - start);
    
      // Pausar el reproductor en la posición de finalización
      await _audioPlayer.pause();
    }
    

    Con estas modificaciones, puede llamar al método _playFromTo para reproducir y detener el audio en un rango de tiempo específico, pasando los tiempos de inicio y finalización deseados para cada archivo de audio. Por ejemplo, para reproducir el primer archivo de audio desde las 5:00 hasta las 8:00, puede llamar a _playFromTo(Duration(minutes: 5), Duration(minutes: 8)).

Comments are closed.