[Flutter/Window] 사운드 재생(Sound Play)

Programming/Flutter 2024. 5. 30. 21:11 Posted by 생각하는로뎅
반응형

Flutter Window 용 사운드 재생을 위해서는 아래 라이브러리를 사용한다.

 

window 용 라이브러리 사용 방법이 없어서, 정리하기로 했다.

(라이브러리 소스 뒤적뒤적... )

 

 

[ Window 용 Flutter 라이브러리 Url ]

https://pub.dev/packages/audioplayers_windows/install

 

audioplayers_windows install | Flutter package

Windows implementation of audioplayers, a Flutter plugin to play multiple audio files simultaneously

pub.dev

 

 

 

1. pubspec.yaml

dependencies:
  ....
  audioplayers_windows: ^4.0.0

 

 

2. 라이브러리 Get 후, 아래 패키지를 사용이 가능하다.

import 'package:audioplayers_platform_interface/audioplayers_platform_interface.dart';

 

 

3. static 으로 구성된 instace 으로 객체를 가져 올 수 있다.

import 'package:audioplayers_platform_interface/audioplayers_platform_interface.dart';

class ... {

  // 경고 사운드
  AudioplayersPlatformInterface soundWarringPlayer = AudioplayersPlatformInterface.instance;

}

 

 

4. 사운드 파일 경로는 assets 폴더 아래에 위치(SOUND_WARRING_PATH)하였으며, 사운드 ID(SOUND_WARRING_ID) 로 여러 사운드를 구분 할 수 있다.

 

create 메소드를 호출시, stream 객체가 만들어 지는데, Future 비동기 방식이므로, then 메소드를 이용하여, 추후 stream 객체가 만들어지면, 상태 값을 받을 수 있도록 getEventStream 을 한다.

 

import 'package:audioplayers_platform_interface/audioplayers_platform_interface.dart';

class ... {

  // 경고 사운드
  final String SOUND_WARRING_ID = "SOUND_WARRING";
  final String SOUND_WARRING_PATH = "assets/sound_waring.wav";
  
  // 경고 사운드
  AudioplayersPlatformInterface soundWarringPlayer = AudioplayersPlatformInterface.instance;

  @override
  void initState() {
  
    // 경고 사운드 설정
    Future<void> soundWarringFuture = soundWarringPlayer.create(SOUND_WARRING_ID);  // 생성
    
    soundWarringFuture.then((value) {
      // 상태 값
      Stream<AudioEvent> soundWarringEvent = soundWarringPlayer.getEventStream(SOUND_WARRING_ID);
      soundWarringEvent.listen((event) {
        debugPrint(event.eventType.name);
      });

    });
    
    // 재생 url 설정
    soundWarringPlayer.setSourceUrl(SOUND_WARRING_ID, SOUND_WARRING_PATH); 
    
    // 반복 설정
    soundWarringPlayer.setReleaseMode(SOUND_WARRING_ID, ReleaseMode.loop);
    
  }
}

 

 

5. 아래 소스를 주석하면, 1번만 재생이 가능하고, 종료시 상태값 AudioEventType.complete (complete) 값을 받을 수 있다.

 

ReleseMode.loop 는 stop 시, complete  값은 들어오지 않고, seekComplete(AudioEventType.seekComplete) 값만 들어온다.

soundWarringPlayer.setReleaseMode(SOUND_WARRING_ID, ReleaseMode.loop);  // 반복 설정

 

 

6. 사운드 플레이가 가능하다.   

soundWarringPlayer.resume(SOUND_WARRING_ID);

 

 

7. 사운드 중지가 가능하다.

soundWarringPlayer.stop(SOUND_WARRING_ID);

 

 

8. 사운드 중지 후, relese 와 dispose 후에는 resume 을 수행하여도 사운드는 재생되지 않는다.

soundWarringPlayer.stop(SOUND_WARRING_ID);
soundWarringPlayer.release(SOUND_WARRING_ID);
soundWarringPlayer.dispose(SOUND_WARRING_ID);

 

반응형