assets_audio_player.dart

Loopy·2021년 7월 17일
0

flutter

목록 보기
1/1

flutter로 토이프로젝트를 해보다가 오디오를 쓸 일이 있어서 좋은 라이브러리를 찾아보았다.
유명한 것으로 따지면, audio_playersassets_audio_player가 있었다.

사실 audio_players가 좀더 like가 많이 있길레 사용해보고자 했으나, ios환경에서는 잘 안되는 것 같았다.
그래서 결국 assets_audio_player을 쓰기로 했다.

처음에는 되게 난잡했다.
그이유는 Widget으로 쓸 수 있는 기능이 있고, 객체를 생성해서 쓸 수 있는 방법이 있어서였다.
두개의 선택지 전에 써야 하는 기능에 대해서 말하자면,
1. 체크에 의해서 실행 파일을 바꾸는 것
2. 정지 버튼이 작동 하는 것
이 최소한으로 필요했다.


처음에는 편하게 쓰기 위해서 Widget으로 쓰려고 했다.
다음은 pub에서 가지고온 예시이다.

bool _play = false;


Widget build(BuildContext context) {
  return AudioWidget.assets(
     path: "assets/audios/country.mp3",
     play: _play,
     child: RaisedButton(
           child: Text(
               _play ? "pause" : "play",
           ),
           onPressed: () {
               setState(() {
                 _play = !_play;
               });
           }
      ),
      onReadyToPlay: (duration) {
          //onReadyToPlay
      },
      onPositionChanged: (current, duration) {
          //onPositionChanged
      },
  );
}

이 코드를 보면 정지 버튼이 없다. 만들 수 있는 기능이 없는 것이다. 그 이유를 보니 Widget자체가 간단한 것이라서 비용이 많이 들지 않아 그냥 위젯 자체를 dispose를 해버리면 된다는 것이다.
getx를 잘 다루지 못하는 입장으로서, dispose를 한 위젯을 다시 붙히는 것에 대해서 잘 모르겠다.
그래서 결국에는 개체를 생성해서 만들기로 했다.


객체에는 많은 기능들이 들어간다. 예를 들면, 정지, 재생 및 다음곡은 물론 위에 재생중이라는 창을 띄우거나, 메타데이터를 생성해서 보여주는 역활까지 하게 도와준다. 더 자세히는 pub.dev에 들어가서 찾아보면 된다.

몇가지 상황만 코드를 설명하자면,

final assetsAudioPlayer = AssetsAudioPlayer();

assetsAudioPlayer.open(
    Audio("assets/audios/song1.mp3"),
);

오디오 파일 가지고 오기(assets에 등록 되어야 함, open하면 audoplay가 true(defualt)일때 자동 실행됨.)

assetsAudioPlayer.playOrPause();
assetsAudioPlayer.play();
assetsAudioPlayer.pause();
assetsAudioPlayer.stop();

위 순서대로 실행일때는 뭠추기, 뭠춰있을때는 실행하기, 실행, 일시정지, 정지로 되어 쓴다.
무엇보다 notification부분에서 정말 큰 강점을 가진다.

final audio = Audio.network("/assets/audio/country.mp3", 
    metas: Metas(
            title:  "Country",
            artist: "Florent Champigny",
            album: "CountryAlbum",
            image: MetasImage.asset("assets/images/country.jpg"), //can be MetasImage.network
          ),
   );

먼저 메타 정보를 노래에 저장을 해두면,

_player.open(audio, showNotification: true)

다음과 같이 파일을 열때 showNorification에서 true값을 줘서 자동으로 실행 하게 할 수 있다.

반신 반의 하면서 실행을 해보았고 정말 잘 작동을 한다.
앞으로 어썸한 라이브러리가 있다면 조금식 작성 해 둬야 겠다.

profile
With Rust?

0개의 댓글