setAudioSource method
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;
}
}