일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 사업자계좌
- Laravel
- Python
- blockchain
- 인민공원
- reactnative
- Tutorial
- 홈택스
- 소액임금체불
- Java
- javascript
- 체당금
- php
- 코로나
- 개인사업자
- 당사자표시정정신청서
- win32
- 전자소송
- as후기
- elasticSearch
- 보정명령
- 이더리움
- Eclipse
- Blade
- auth
- Bootstrap
- cartalyst
- Sentinel
- 코로나19
- vue
- Today
- Total
그냥 사는 이야기
React Native에서 Sound 재생하기 본문
목표
특정 상황에서 간단한 (비프음처럼) 사운드 파일을 재생하고 싶음
1차시도
react-native-sound-player 를 살펴보니 단순하고 쉬워서 어려움이 없을 줄 알았다.
yarn add react-native-sound-player
import SoundPlayer from 'react-native-sound-player'
try {
// play the file tone.mp3
SoundPlayer.playSoundFile('tone', 'mp3')
// or play from url
SoundPlayer.playUrl('<https://example.com/music.mp3>')
} catch (e) {
console.log(`cannot play the sound file`, e)
}
프로젝트 내 mp3 파일을 재생하려면 {project_root}/android/app/src/main/res/raw/ 에 mp3 파일들을 집어 넣고 playSoundFile() 에서 파일명을 인자로 주면 끝.... 인줄 알았다.
난관
TypeError: null is not an object (evaluating 'RNSoundPlayer.playSoundFile')
위의 에러가 나면서 SoundPlayer.playSoundFile('tone', 'mp3') 이거 한줄 실행시키는 것이 시간이 많이 걸리게 되었다.
에러 내용은 null 은 오브젝트가 아니다? 인데 아니긴 아닌데 대체 어디가 아니라는 건지. 리액트도 처음이고 리액트 네이티브도 처음인 나에겐 감이 안왔다. 그래도 대충 SoundPlayer 아니면 function 인 playSoundFile 이 둘중 하나일텐데 단순 null pointer exception 같은 건도 아니니깐 playSoundFile 일 것 같은데.
구글링을 해보는데 RNSoundPlayer 자리는 각자의 참조하는 형태에 따라 다른것 같고 playSoundFile 자리가 null 로 되어서 발생하는 문제가 맞는 것 같았다.
문제는 다른 사람의 패키지 인데 왜 null 일까?
우회
우선 react-native-sound-player 패키지에서 null 문제 해결책은 구글링으로 찾지 못하여서 다른 사운드 패키지를 찾았다. 내가 하고 싶은건 사운드 재생이지 저 패키지 문제 대응이 아니기 때문이다.
그런데 아래의 몇몇가지 패키지를 설치후 사용해봤는데 전부 위와 같은 에러가 나면서 안되었다.
그리고 한두개 정도 더 사용해본것 같은데 그 때쯤에는 정신적으로도 지치고 시간적으로도 쫓겨서 제정신이 아니었다. 그냥 마구 마구 갖다 붙여보고 안되면 넘기고.
이렇게 까지 안될 만한 건 아닌데 왜 안되는 건지? 패키지 문제가 아닌 다른데서 찾을 필요가 있었다.
해결
우선 여러개의 패키지들 문서를 살펴보면 특별한 건 없었지만 npm install 외에 manual install 을 언급한 부분들이 있었다.
react-native-sound-player 문서에서는 없었지만 비슷하게 해볼 수 있을 것 같았다. 왜냐하면 그냥 null 일것 같지 않고 뭔가가 link 가 끊기지 않았을까 추정되었기 때문이다. 나 빼고는 다른 사람들은 잘 사용하고 있는 것 같은데 나만 문제이기에 😭
include ':react-native-sound-player'
project(':react-native-sound-player').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-sound-player/android')
dependencies {
...
compile project(':react-native-sound-player')
}
위 2개를 추가해주었다.
아이디어는 react-native-audio-recorder-player 문서에서 따와서 비슷하게 이름만 바꿨더니 해결되었다.
새로운 의문
우선 해결법을 찾은것 같아서 기뻤고 이 내용을 정리하기 위해 글을 쓰는 과정에서 새로운 프로젝트를 생성했다. 그래서 저 에러를 유발하기 위해
yarn add react-native-sound-player
이것만 하고 sound play 를 해보니. 이젠 에러가 나질 않는다.
manual install 을 해준 프로젝트도 아닌데 이제 잘된다.
이게 아마 global package에도 영향을 주는건가 싶은데 java scrpt 의 세계는 신비롭기만 하다.
'Development > App' 카테고리의 다른 글
React Native 에서 폰트(Font) 추가하기 (0) | 2022.08.29 |
---|---|
React Native에서 AWS Appsync의 subscription reconnect 시키기 (0) | 2022.06.10 |
Apple Appstore 심사거절 - Guideline 2.3.10 - Performance - Accurate Metadata (0) | 2022.05.20 |
React Native - pod install load error (M1 issue) (0) | 2022.03.24 |