Skip to content

easy playing music with vertual Instrument for kids or whatever if you want - searching notes feature , auto playing , voice chat , message chat , feed , my workspace - Krafton Jungle Project 4th team geeks

Notifications You must be signed in to change notification settings

songarden/Let-s-Note

Β 
Β 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Let’s note

μ„œλΉ„μŠ€ μ†Œκ°œ

Let’s NoteλŠ” λˆ„κ΅¬λ‚˜ μŒμ•…μ„ 쉽고 재미있게 play ν•  수 μžˆλ„λ‘ ν•˜λŠ” μ•…κΈ° μ—°μ£Ό ν”Œλž«νΌ μž…λ‹ˆλ‹€.

ν•¨κ»˜ν•˜κ³  싢은 μΉœκ΅¬λ“€μ„ λ‚˜μ˜ μž‘μ—…μ‹€μ— μ΄ˆλŒ€ν•˜κ³ , μŒμ„± μ±„νŒ…κ³Ό μ»€μ„œ 곡유λ₯Ό 톡해 μ†Œν†΅ν•˜μ„Έμš”.
그리고 μ—¬λŸ¬ κ°€μƒμ•…κΈ°λ‘œ 이루어진 우리만의 μŒμ•…μ„ λ§Œλ“€μ–΄λ³΄μ„Έμš”!

μ‚¬μ΄νŠΈ: www.letsnote.co.kr


ν”„λ‘œμ νŠΈ μ‹€ν–‰ 방법

ν”„λ‘ νŠΈμ—”λ“œ

$ git clone [https://github.com/Team-SoundHub/Let-s-Note.git](https://github.com/Team-SoundHub/Let-s-Note.git)
$ cd Let-s-Note/frontend

ν™˜κ²½λ³€μˆ˜ μ„€μ •

vim .env
  • .env νŒŒμΌμ— ν•΄λ‹Ή λ³€μˆ˜λ“€μ„ μ•Œλ§žκ²Œ μ„ μ–Έν•©λ‹ˆλ‹€
REACT_APP_GOOGLE_CX = {ꡬ글 CSE CX κ°’}
REACT_APP_GOOGLE_API_KEY = {ꡬ글 CSE ν‚€}
REACT_APP_BACKEND_URL = {λ°±μ—”λ“œ API URL}
REACT_APP_BACKEND_URL = {λ°±μ—”λ“œ API URL}
REACT_APP_SOCKET_URL =  {μ›Ή μ†ŒμΌ“ μ£Όμ†Œ}
REACT_APP_SOCKET_HTTP = {λ°±μ—”λ“œ μ„œλ²„ https μ£Όμ†Œ}
REACT_APP_TURN_SERVER = {TURN μ„œλ²„ μ£Όμ†Œ}

μ‹€ν–‰

$ npm install && npm start

λ°±μ—”λ“œ

$ git clone [https://github.com/Team-SoundHub/Let-s-Note.git](https://github.com/Team-SoundHub/Let-s-Note.git)

$ cd Let-s-Note/backend/letsnote/src/main/resource/static

properties 파일 μ„€μ •

$ vim application.yml

μ•„λž˜ λ‚΄μš©μ„ μ°Έκ³ ν•˜μ—¬ μ€‘κ΄„ν˜Έ μ•ˆμ˜ λ‚΄μš©μ„ μ±„μš΄λ‹€.

spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://{DBμ„œλ²„ μ£Όμ†Œ}/{DB 이름}?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&requireSSL=false&serverTimezone=Asia/Seoul&allowMultiQueries=true
    username: { 아이디 }
    password: { λΉ„λ°€λ²ˆν˜Έ }
  jpa:
    show-sql: true
    hibernate:
      ddl-auto: update
    properties:
      hibernate:
        format_sql: true
        show_sql: true
jwt:
  header: Authorization
  secret: { refreshTokenκ³ΌλŠ” λ‹€λ₯Έ HS512ν˜•μ‹μ˜ μ‹œν¬λ¦Ώ ν‚€ }
  refresh-token-secret: { accessTokenκ³ΌλŠ” λ‹€λ₯Έ HS512ν˜•μ‹μ˜ μ‹œν¬λ¦Ώ ν‚€ }
  access-token-validity-in-seconds: 3600
  refresh-token-validity-in-seconds: 86400
letsnote:
  baseUrl: { λ°±μ—”λ“œ μ„œλ²„ μ£Όμ†Œ }
ai-server:
  baseUrl: { λͺ¨λΈ μ„œλ²„ μ£Όμ†Œ }

μ‹€ν–‰

$ ./gradlew build

$ java -jar build/libs/letsnote.jar

κΈ°λŠ₯ μ†Œκ°œ

1. 가상악기 μ—°μ£Ό

  • κ°€λ‘œμΆ•μ€ λ°•μž , μ„Έλ‘œμΆ•μ€ μŒκ³„λ‘œ λ°°μΉ˜ν•˜μ—¬ κ²©μžμ— ν•΄λ‹Ήν•˜λŠ” μŒμ„ μ§„ν–‰ν•˜λŠ” 방식
  • Tone.js λ₯Ό ν™œμš©ν•˜μ—¬ ν”Όμ•„λ…Έ, 기타, λ“œλŸΌ μ•…κΈ° μŒμ› 좜λ ₯ 및 음질 μ‘°μ •

2. μž‘ν’ˆ μ €μž₯ 및 λ‘˜λŸ¬λ³΄κΈ°

  • μ™„μ„±λœ μŒμ•…μ„ μ €μž₯ν•΄ λ‚˜μ˜ μž‘ν’ˆμœΌλ‘œ 남기고, ν”Όλ“œμ— κ³΅μœ ν•˜λŠ” κΈ°λŠ₯
  • λ‹€λ₯Έ μ‚¬λžŒμ˜ μž‘ν’ˆλ„ μ—΄λžŒ κ°€λŠ₯

3. 악보 검색 & 보관

  • 악보 검색에 μ΅œμ ν™”μ‹œν‚¨ Google Custom Search Engine으둜 악보 이미지 제곡
  • APIλ₯Ό 톡해 λ°›μ•„μ˜¨ 이미지λ₯Ό μ €μž₯ν•˜λŠ” 이미지 보관 κΈ°λŠ₯

4. ν˜‘μ—… κΈ°λŠ₯

1. μž‘μ—…μ‹€μ— 멀버 μ΄ˆλŒ€

  • μž‘μ—…μ‹€μ— λ‹€λ₯Έ μœ μ €λ₯Ό μ΄ˆλŒ€ν•  수 있음

2. μ›Ήμ†ŒμΌ“ 기반 μž‘μ—… λ‚΄μš© 곡유

  • μ‹€μ‹œκ°„μœΌλ‘œ μž‘μ—…μ‹€μ˜ μŒν‘œ λ…ΈνŠΈ 정보, μ»€μ„œ μœ„μΉ˜, μ±„νŒ… 곡유

3. WebRTC 기반 μŒμ„±μ±„νŒ… κΈ°λŠ₯

1. Signaling 2. P2P Connection
  • P2P Mesh 방식을 ν™œμš©ν•˜μ—¬ 닀쀑 μŒμ„±μ±„νŒ… ν™œμ„±ν™”
  • μ›Ήμ†ŒμΌ“μ„ 톡해 μ—°κ²° 후보 Signal κ΅ν™˜

5. μ—°μ£Ό νŽΈμ˜μ„± κΈ°λŠ₯

1. λ“œλŸΌ 루프 μžλ™ 생성

  • 일뢀 λ“œλŸΌ λΉ„νŠΈ μž…λ ₯ ν›„ λ“œλŸΌ 클릭 μ‹œ μžλ™ μ™„μ„±

Untitled

2. AI λ…ΈνŠΈ μΆ”μ²œ κΈ°λŠ₯

  • GPT 3.5 Assistant 기반 GPT API 곡식 λ¬Έμ„œμ— μ†Œκ°œλœ ν”„λ‘¬ν”„νŠΈ μ—”μ§€λ‹ˆμ–΄λ§ 방법둠을 ν™œμš©ν•˜μ—¬ 도메인 지식을 μ£Όμž…ν•˜κ³ , 응닡 ν˜•μ‹ 정확도λ₯Ό 올리기 μœ„ν•΄ μž…, 좜λ ₯ ν˜•μ‹μ„ ν”„λ‘¬ν”„νŠΈλ‘œ μ‘°μ •

Untitled


기술적 μ±Œλ¦°μ§€

1. 음질 κ°œμ„ 

Untitled Untitled

2. μ›Ή μ†ŒμΌ“ 지연 κ°œμ„ 

  • λ…ΈνŠΈ 정보가 server β†’ DB β†’ server β†’ Client순으둜 동기적 전달
  • μ§€μ—°μ‹œκ°„: 0.18s
  • DBμ—μ„œ server, clientμ—κ²Œ λΉ„λ™κΈ°μ μœΌλ‘œ 정보λ₯Ό μ „λ‹¬ν•˜λ„λ‘ λ³€κ²½
  • μ§€μ—°μ‹œκ°„: 0.04s

3. λ…ΈνŠΈ 쀑볡 생성 문제

  • μ—¬λŸ¬ μ‚¬μš©μžκ°€ ν•˜λ‚˜μ˜ λ…ΈνŠΈμ— λŒ€ν•΄ μ ‘κ·Ό μ‹œ 동기화 문제 λ°œμƒ
  • DB λ…ΈνŠΈ 정보 μ ‘κ·Ό μ‹œ μ„Έλ§ˆν¬μ–΄λ₯Ό λ„μž…ν•˜μ—¬ 동기화 보μž₯

4. 마우슀 μœ„μΉ˜ κ³΅μœ μ‹œ κ³Όλ„ν•œ μ†ŒμΌ“ μš”μ²­ 문제

  • mousemove 이벀트 기반
  • 8ms λ§ˆλ‹€ μš”μ²­(125회/s)
  • μ†ŒμΌ“ μ„œλ²„ λΆ€ν•˜
  • μŠ€λ‘œν‹€λ§, λ””λ°”μš΄μ‹± ν™œμš©
  • μ΅œλŒ€ μš”μ²­ λΉˆλ„ μ œν•œ(5회/s)
  • μŒν‘œ λ…ΈνŠΈ λ‚΄μ—μ„œμ˜ μ›€μ§μž„μ€ λ¬΄μ‹œν•˜λ„λ‘ μž¬μ„€κ³„ β†’ λΆˆν•„μš”ν•œ μš”μ²­ 제거
  • μ›€μ§μž„μ— λ”°λ₯Έ μœ„μΉ˜ κ³΅μœ λŠ” μ€„μ–΄λ“€μ—ˆμœΌλ‚˜, μŒν‘œ λ…ΈνŠΈλ₯Ό 클릭할 λ•Œμ—λ„ 마우슀 μ’Œν‘œλ₯Ό κ³΅μœ ν•˜λ„λ‘ ν•˜μ—¬, μ‚¬μš©μžμ˜ λΆˆνŽΈν•¨μ€ μ΅œμ†Œν™”ν•˜κ³ μž ν–ˆμŒ
  • μ†ŒμΌ“ μ„œλ²„ λΆ€ν•˜λ₯Ό 쀄여 즉각적인 λ°˜μ‘ μœ μ§€
  • ν˜‘μ—… κ΄€λ ¨ μ‚¬μš©μž κ²½ν—˜ κ°œμ„ 

5. μ›Ή μ†ŒμΌ“ λ³΄μ•ˆ 계측 μΆ”κ°€



  • Stomp ν”„λ‘œν† μ½œμ„ ν™œμš©ν•˜μ—¬ 메세지듀을 λΈŒλ‘œλ“œμΊμŠ€νŒ… ν•  수 μžˆλ„λ‘ κ΅¬ν˜„
  • μΈκ°€λ˜μ§€ μ•Šμ€ μ‚¬μš©μžκ°€ μ†ŒμΌ“ μ—°κ²° 메세지λ₯Ό 보내도 인증 절차의 λΆ€μž¬λ‘œ λ³΄μ•ˆ 문제 λ°œμƒ



  • νŠΉμ • μœ μ €κ°€ 메세지 λΈŒλ‘œμ»€μ— μ›Ήμ†ŒμΌ“ μ—°κ²° μš”μ²­ μ‹œ, JWT 토큰을 νŒŒμ‹±ν•˜μ—¬
  • ν•΄λ‹Ή μœ μ €κ°€ μŒμ•… μž‘μ—…μ‹€μ˜ 멀버인지 νŒλ‹¨ν•˜λŠ” 인증 인터셉터 계측 μΆ”κ°€



  • μ›Ήμ†ŒμΌ“ μ—°κ²° μ‹œ μ—‘μ„ΈμŠ€ ν† ν°μœΌλ‘œ μœ μ €μ˜ 인가 μ—¬λΆ€λ₯Ό νŒλ‹¨
  • μΈκ°€λ˜μ§€ μ•Šμ€ μ‚¬μš©μžλŠ” μ›Ήμ†ŒμΌ“ 연결을 κ±°λΆ€ν•˜μ—¬ λ³΄μ•ˆμ„ κ°•ν™”

아킀텍쳐

Untitled


Our Team

νŒ€μž₯ 손정원
BE
κΉ€μ£Όμ˜
FE
이찬우
FE
κΉ€λ―Όκ·œ
BE

Dependency

frontend@0.1.0
β”œβ”€β”€ @babel/runtime@7.23.9
β”œβ”€β”€ @reduxjs/toolkit@2.1.0
β”œβ”€β”€ @stomp/stompjs@7.0.0
β”œβ”€β”€ @tailwindcss/forms@0.5.7
β”œβ”€β”€ @testing-library/jest-dom@5.17.0
β”œβ”€β”€ @testing-library/react@13.4.0
β”œβ”€β”€ @testing-library/user-event@13.5.0
β”œβ”€β”€ autoprefixer@10.4.17
β”œβ”€β”€ axios@1.6.7
β”œβ”€β”€ dom-helpers@5.2.1 extraneous
β”œβ”€β”€ flowbite-react@0.7.2
β”œβ”€β”€ flowbite@2.2.1
β”œβ”€β”€ postcss@8.4.33
β”œβ”€β”€ process@^0.11.10
β”œβ”€β”€ react-dom@18.2.0
β”œβ”€β”€ react-redux@9.1.0
β”œβ”€β”€ react-router-dom@6.21.3
β”œβ”€β”€ react-scripts@5.0.1
β”œβ”€β”€ react-transition-group@4.4.5 extraneous
β”œβ”€β”€ react-webcam@^7.2.0
β”œβ”€β”€ react@18.2.0
β”œβ”€β”€ simple-peer@^9.11.1
β”œβ”€β”€ socket.io-client@4.7.4
β”œβ”€β”€ sockjs-client@1.6.1
β”œβ”€β”€ sockjs@0.3.24
β”œβ”€β”€ soundfont2@0.4.0
β”œβ”€β”€ styled-components@6.1.8
β”œβ”€β”€ sweetalert2@11.10.5
β”œβ”€β”€ tailwind-styled-components@2.2.0
β”œβ”€β”€ tailwindcss@3.4.1
β”œβ”€β”€ tone@14.7.77
β”œβ”€β”€ web-vitals@2.1.4
β”œβ”€β”€ webmidi@3.1.8
└── websocket@1.0.34

backend@0.1.0
+--- jjwt-api:0.11.5
+--- spring-boot-starter-data-jpa -> 3.2.2
|    +--- spring-boot-starter-aop:3.2.2
|    +--- spring-boot-starter-jdbc:3.2.2
|    +--- hibernate-core:6.4.1.Final
|    +--- spring-data-jpa:3.2.2
|    \--- spring-aspects:6.1.3
|         \--- aspectjweaver:1.9.21
+--- spring-boot-starter-security -> 3.2.2
|    +--- spring-boot-starter:3.2.2 (*)
|    +--- spring-aop:6.1.3 (*)
|    +--- spring-security-config:6.2.1
|    \--- spring-security-web:6.2.1
+--- spring-boot-starter-validation -> 3.2.2
|    +--- spring-boot-starter:3.2.2 (*)
|    +--- tomcat-embed-el:10.1.18
|    \--- hibernate-validator:8.0.1.Final
+--- spring-boot-starter-web -> 3.2.2
|    +--- spring-boot-starter:3.2.2 (*)
|    +--- spring-boot-starter-json:3.2.2
|    +--- spring-boot-starter-tomcat:3.2.2
|    +--- spring-web:6.1.3 (*)
|    \--- spring-webmvc:6.1.3
+--- spring-boot-starter-websocket -> 3.2.2
|    +--- spring-boot-starter-web:3.2.2 (*)
|    +--- spring-messaging:6.1.3
+--- springdoc-openapi-starter-webmvc-ui:2.3.0
|    +--- springdoc-openapi-starter-webmvc-api:2.3.0
|    \--- org.webjars:swagger-ui:5.10.3
+--- spring-boot-starter-test -> 3.2.2
|    +--- spring-boot-starter:3.2.2 (*)
|    +--- spring-boot-test:3.2.2
|    +--- spring-boot-test-autoconfigure:3.2.2
|    +--- com.jayway.jsonpath:json-path:2.8.0
|    +--- jakarta.xml.bind-api:4.0.1 (*)
|    +--- json-smart:2.5.0
|    +--- assertj-core:3.24.2
|    +--- awaitility:4.2.0
|    +--- hamcrest:2.2
|    +--- junit-jupiter:5.10.1
|    +--- mockito-core:5.7.0
|    +--- mockito-junit-jupiter:5.7.0
|    +--- org.skyscreamer:jsonassert:1.5.1
|    +--- spring-core:6.1.3 (*)
|    +--- spring-test:6.1.3
|    \--- org.xmlunit:xmlunit-core:2.9.1
\--- spring-security-test -> 6.2.1

About

easy playing music with vertual Instrument for kids or whatever if you want - searching notes feature , auto playing , voice chat , message chat , feed , my workspace - Krafton Jungle Project 4th team geeks

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • JavaScript 64.6%
  • Java 34.9%
  • Other 0.5%