개발/프로젝트

[백킹트랙 생성 프로젝트] 기획, 구성, api 명세서

prpn97 2023. 7. 30. 17:46

기획 의도

유튜브 쇼츠 프로젝트가 유튜브api를 인가받아야 해서 의도치 않게 중단되면서, 그 동안 만들어보고 싶었던 것을 메모해놨던 것 중에서 하나를 정했는데, 이전에 음악을 하면서 연습할 때가 갑자기 스쳐지나갔다. 그냥 메트로놈 어플 아무거나 키고 박자연습 하고, 튜닝하고 이정도로 어플을 통해 사용했는데, 연습에 관련된 유용한 어플을 찾아봐도 없었던 것 같다. 물론 이미 최소 6년은 넘어가는 이야기지만...^^ 

 

그 당시 나는 코드를 보고 즉흥으로 초견을 연습하는데 직접 노트에 코드를 적으면서 그 코드에 맞는 연습을 했다. 그래서 다양하게 연습하기 위해서 엄청 많은 코드를 적고, 종이를 찢어서 랜덤하게 배치해서 연습하고 그랬던 기억도 난다...ㅋㅋㅋㅋ 먼저는 그걸 그대로 구현하면서, 기능에 살을 보태면 되지 않을까 싶다. 지금 말한 부분을 구현하는 것은 어려운 부분은 아닐텐데, 백킹트랙으로 생성한다는건 만들어진 코드 구성에 해당 음이 있어야 연습을 할 때 실질적으로 도움이 될 것이다. 

구성

아무튼, 그 때 필요했던 것이 여전히 없는 것 같아서 만들어보려 한다. 구현하려는 기능은 다음과 같다.

- 원하는 코드를 클릭해서 코드 배열 생성

 

당장 방법은 떠오르지 않지만 필요한 기능. 

 * 만들어진 코드 구성에 음 붙이기

- 라이브러리 많이 찾아보고 해당 코드에 맞는 음원을 생성할 수 있다면 좋을 것 같은데,

정 안되면 그냥 코드 하나하나마다 미디로 찍어서 피아노 음원 만들어서 고정된 디렉토리에 넣고 불러내면 될듯 하다. 

 

* 랜덤으로 코드 구성하기

- 그냥 여러 경우의 수 두고 기본 코드와 그에 여러 부가 텐션을 붙이면 될거라고 쉽게 생각했는데,

생각해보니 완전히 랜덤으로 두면 이론적으로는 가능한 코드지만 실질적으로 쓰이지 않는 코드들이 무수하기 때문에

이 부분은 조합에 따라 특정 조합만 가능한 알고리즘을 필요로 하기 때문에 일단 가능한 부분부터 실현하고,

공부한 뒤에 도전해야 할 것 같다. 

 

 

api 설계

제대로 된 프로젝트 설계를 위해 api 명세서부터 작성했다. 내가 볼 것이기 때문에 형식은 간단하게만 정리했다. 

 

> Backtrack

*createBackTrack     /     백킹트랙 생성 api

마디수만큼 chordPattern의 value 넣어서 backtrack 구성.

- Method: Post 

- url: /api/backtrack

 

*Req : 

  • bpm 박자 속도 : number
  • measures 마디수 : number
  • chordPattern 만든 코드 배열 : string[]

 

*Res : 

bpm:  60

chordPattern:  [ 'C', 'A#', 'Gbb5#11' ]

measures: 32

backtrack: [

  'C',       'A#',      'Gbb5#11', 'C',

  'A#',      'Gbb5#11', 'C',       'A#',

  'Gbb5#11', 'C',       'A#',      'Gbb5#11',

  'C',       'A#',      'Gbb5#11', 'C',

  'A#',      'Gbb5#11', 'C',       'A#',

  'Gbb5#11', 'C',       'A#',      'Gbb5#11',

  'C',       'A#',      'Gbb5#11', 'C',

  'A#',      'Gbb5#11', 'C',       'A#'

]

 

 

> Auth

*Signup

*Method: Post

*url: /api/auth/signup

*Login

- Method: Post

- url: /api/auth/login

*Logout

- Method: Post

- url: /api/auth/logout

 

> Mypage

*updateUser

- Method: put

- url: /api/mypage/updateUser

*deleteUser 

- Method: delete

- url: /api/mypage/deleteUser

 

 

 

코멘트

당장은 db에 닿지도 않는.. 사실상 클라이언트에서 모든걸 해결할 수 있는 부분으로만 기능이 기획되어있지만, 기본적인 틀을 구성하고 나서 로그인과 저장기능을 붙여 로그인하면 만들어진 코드구성을 저장하고 불러와서 그대로 사용할 수 있도록 하려 한다.  

기능 자체는 난이도를 떠나서 많지 않기 때문에 다 완성되고 나면 플러터를 배워서 앱으로도 구현해서 동시에 배포해볼까 하는 생각도 있다.  구현한 이후 주변에 음악하는 친구들에게 실 피드백을 받을 수 있어 좋은 것 같다. 기능적으로도 욕심이 나는 만큼 잘 구현해봐야겠다. 

 

728x90