프로젝트/Saera

[ 02 ] 음성 재생 기능 구현

whaeun 2023. 4. 8. 16:04
일자

1월 23일

 

What I do?

음성 재생 기능 구현

 

How?
  • audio player 패키지 사용

 

Screenshot

  • 재생 버튼을 누를 경우, mp3가 재생된다.
  • 슬라이더의 위치를 조정할 경우,그 시간대에 맞는 음성 부분이 재생된다.
  • 정지 버튼을 누를 경우, 재생되던 음성 파일이 일시 정지되고 이후 재생 버튼을 다시 누를 시 해당 지점부터 다시 재생된다.

 

What I learned?
String formatTime(Duration duration){
    String twoDigits(int n) => n.toString().padLeft(2, '0');

    final minutes = twoDigits(duration.inMinutes.remainder(60));
    final seconds = twoDigits(duration.inSeconds.remainder(60));

    return [
      minutes,
      seconds,
    ].join(":");
  }
  • String formatTime 지정 ⇒ 00:00 의 방식으로 표시될 수 있도록 지정

 

Trouble Shooting
  • 링커 오류 발생
    - [Xcode에서 설정] 빌드 설정 - OtherLinkerFlag - “-lc++ 추가”하여 해결
Undefined symbols for architecture arm64:
"_dynamic_cast", referenced from:
applyAnimationTime(objc_object, POPAnimationState, double) in libPods.a(POPAnimator.o)
  • 버전 업그레이드에 따른 패키지 내 함수 변경
    • .play(filePath, isLocal: true) ⇒ .play(DeviceFileSource(filePath))
    • .onAudioPositionChanged.listen ⇒ .onPositionChanged.listen
  • iOS 권한 받기 ⇒ 녹음 기능 구현 시 필요
    1. info.plist 수정
    2. Podfile 수정 (Podfile 수정 시에는 반드시 pod install 해주어야 한다.)
  • delete apps signed with your free account
    • 내 계정으로 만든 앱이 디바이스에 이미 꽉차게 다운로드 되어 있음을 나타내는 오류이다.
      ⇒ 핸드폰에 깔아 놓은 기존의 앱들을 삭제하고 적당한 시간 간격 이후 다시 실행하여 오류를 해결하였다.
  • MissingPluginException (No implementation found for method play ...)
    • 처음에 run main.dart 부분을 계속 다시 눌러도 같은 오류가 나타났다. 실행 중인 앱을 아예 종료 시킨 후 다시 실행하기 위해 stop main.dart를 누른 후 다시 run main.dart를 눌러 해결했다.

 

Reference