setAudioSource method

Future<int> setAudioSource(
  1. AudioSource source
)

Sets the audio source to play

Implementation

Future<int> setAudioSource(AudioSource source) async {
  // If we're setting a concatenating source, create a playlist
  if (source is ConcatenatingAudioSource) {
    _playlist?.dispose();
    _playlist = Playlist(source.children);
  } else {
    // For single sources, create a playlist with just one item
    _playlist?.dispose();
    _playlist = Playlist([source]);
  }
  try {
    _audioSource = source;

    // Update processing state
    if (!_disposed) {
      _processingStateSubject.add(ProcessingState.loading);
      // Clear any previous errors
      _playerExceptionSubject.add(null);
    }

    // If it's a URI audio source, start playback
    if (source is UriAudioSource) {
      final success = await startPlayback(source.uri.toString());
      if (!success) {
        final exception = SourceException(
          'load_failed',
          'Failed to load audio source',
          source.uri.toString(),
        );
        _handleError(exception);
        return 0;
      }

      // Get the duration
      final duration = await getDuration();
      if (!_disposed) {
        _durationSubject.add(duration);
      }

      return duration;
    } else if (source is ConcatenatingAudioSource &&
        source.children.isNotEmpty) {
      // For concatenating sources, start with the first child
      final firstChild = source.children.first;
      if (firstChild is UriAudioSource) {
        final success = await startPlayback(firstChild.uri.toString());
        if (!success) {
          final exception = SourceException(
            'load_failed',
            'Failed to load audio source',
            firstChild.uri.toString(),
          );
          _handleError(exception);
          return 0;
        }

        // Get the duration
        final duration = await getDuration();
        if (!_disposed) {
          _durationSubject.add(duration);
        }

        return duration;
      }
    }

    final exception = PlayerException(
      'unsupported_source',
      'Unsupported audio source type',
      source,
    );
    _handleError(exception);
    return 0;
  } catch (e) {
    final exception = PlayerException(
      'set_source_error',
      'Error setting audio source',
      e,
    );
    _handleError(exception);
    return 0;
  }
}