이 프로젝트는
'내 손이 하나만 더 있었다면 좋았을텐데...' 라는 생각에서부터 시작되었었다.
손이 하나 더 있다면 악보를 다 외우지 않아도 되고, 악기 연주중 멈추고 악보를 넘기지 않아도 된다. (주인장은 기타도 치고, 드럼도 치고, 피아노도 치는 사람이라 이런 앱이 너무 필요했다. 특히 연습할때!!)
기본 화면 스케치
악보 파일 밑에 음악을 재생하거나 멈추고, Play time을 볼 수 있는 창이 있어야한다고 생각했다. 또 특정 시간이 지나면 '자동'으로 악보가 넘어가야한다!
이렇게 메트로놈 기능도 넣고자 했다. 역시 이것을 구현할 때 가장 힘이 많이 들었다...
박자를 조절해서 그에 맞는 소리가 나게끔 하는 것이 목표였다.
고민이 많았던 부분은 악보가 넘어가는 애니메이션을 어떻게 표현해야할지.. 였다. 또, 음악의 재생위치에 따라 악보가 넘어가는 타이밍은 사용자가 직접 입력할 수 밖에 없는 형태였기에 큰 고민을 할 필요가 없었다. (악보마다 다 다르니까!)
애니메이션 solution
애니메이션은 'opacity'조절로 비슷한 효과를 내기로 했다.
opacity는 transparency와 같은 개념이다. 즉 100%이면 완전하게 보이는 것이고, 0이면 투명해져서 존재여부조차 알 수 없는 상태이다.
예를들어 1분 32초에 3쪽 악보를 보여주어야 한다면, 3쪽을 제외한 모든 악보의 opacity를 0%으로 설정하고 3쪽의 악보만 opacity를 100%로 설정하는 것이다. 그렇게 하면 나름 자연스럽게 다음 페이지로 넘어간 듯한 효과를 보여준다!
음악파일 같은 경우 kotlin의 mediaplayer라는 클래스로 백그라운드 재생이 편리하게 가능했다.
문제는 역시 메트로놈이였다. 메트로놈같은 경우에는 사실 박자 수치에 따라 속도가 조절되어야하는데, mediaplayer로는 그 기능이 해결되지 않아 SoundPool class를 이용했다.
하지만 모든 박자에 대한 배속이나 저속을 할 수 없다는게 단점.. 그래서 120, 80, 64에 대해서만 구현을 했다.
에뮬레이터에서는 정말 잘 돌아가는데, 왜 안드로이드로 들여오면 앱이 자꾸 죽는지... 아마 이거는 내가 가진 안드로이드 구기계가 너무 구버전이라 그런 것 같았다. (애플 이용자이기에 안드로이드 기계 구하기가 힘들었다.)
그리고 아래는 데모영상이다.
Kotlin 개발 정말 재밌긴 했으나 알 수 없는 에러가 너무 많이났기에 (에뮬레이터에서는 잘 돌아가다가도 폰으로 옮겨오면 앱이 계속 죽는다던가..) 많이 힘들었던 것 같다. 새벽마다 내 방에서 이상한 괴성이 났다고 가족들이 이야기해줬다.
여담이지만 제일 웃긴 스토리는 우리엄마가 새벽에 화장실 가려고 일어났는데 내가 얼굴이 좀비마냥 창백해져 있어서 죽 끓여서 먹인 것,,, 허허 그 따뜻한 죽 먹고 에러 해결했다는 감동적인 스토리가 있다.
'my projects' 카테고리의 다른 글
[IEUM] 2021 저시력자를 위한 의약품 및 의료기관 안내 서비스 (0) | 2022.07.30 |
---|---|
2020 - 2 웹 콘텐츠 개발 term project (0) | 2022.06.09 |