You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

31 lines
879 B

3 years ago
  1. package nova.monadic_sfx.util
  2. import cats.effect.Resource
  3. import monix.bio.Task
  4. import uk.co.caprica.vlcj.factory.MediaPlayerFactory
  5. import uk.co.caprica.vlcj.player.embedded.EmbeddedMediaPlayer
  6. class MediaPlayerResource(
  7. val factory: MediaPlayerFactory,
  8. val controller: EmbeddedMediaPlayer
  9. )
  10. object MediaPlayerResource {
  11. val mediaPlayerFactoryResource =
  12. Resource.make(Task(new MediaPlayerFactory()))(factory =>
  13. Task(factory.release())
  14. )
  15. def mediaPlayerControllerResource(factory: MediaPlayerFactory) =
  16. Resource.make(Task {
  17. val players = factory.mediaPlayers()
  18. players.newEmbeddedMediaPlayer()
  19. })(controller => Task(controller.release()))
  20. def apply() =
  21. for {
  22. factory <- mediaPlayerFactoryResource
  23. controller <- mediaPlayerControllerResource(factory)
  24. } yield new MediaPlayerResource(factory, controller)
  25. }