Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/developeracademy-postech/2024-nc2-m28-music
NC2 Doran&Cinephile Music
https://github.com/developeracademy-postech/2024-nc2-m28-music
Last synced: about 10 hours ago
JSON representation
NC2 Doran&Cinephile Music
- Host: GitHub
- URL: https://github.com/developeracademy-postech/2024-nc2-m28-music
- Owner: DeveloperAcademy-POSTECH
- Created: 2024-06-16T15:20:46.000Z (5 months ago)
- Default Branch: develop
- Last Pushed: 2024-07-05T08:31:38.000Z (5 months ago)
- Last Synced: 2024-07-07T09:32:02.929Z (4 months ago)
- Language: Swift
- Size: 31 MB
- Stars: 0
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# 2024-NC2-M28-Music
![Frame 10](https://github.com/DeveloperAcademy-POSTECH/2024-NC2-M28-Music/assets/118119110/5bc39a7f-c1c1-4e28-88b8-e022f6cd214e)
## ๐ฅ Youtube Link
https://www.youtube.com/watch?v=XMYR4lOg4mM
## ๐ก About MusicKit
### MusicKit
> MusicKit์ Swift๋ฅผ ์ฌ์ฉํด ์ฑ์์ ์์ ํญ๋ชฉ์ ์ ๊ทผํ ์ ์๋ ํ๋ ์์ํฌ ์ ๋๋ค.
MusicKit์ ์ฌ์ฉํ๋ฉด Apple Music์ ์ปจํ ์ธ (์ฅ๋ฅด, ํ๋ ์ด๋ฆฌ์คํธ, ๋ ธ๋)๋ฅผ ๊ฒ์ํ๊ณ ํด๋น ์ปจํ ์ธ ์ ๋ํ ๋ฉํ๋ฐ์ดํฐ(์ ๋ชฉ, ์ํฐ์คํธ๋ช , ๋ฐ๋งค์ผ ๋ฑ)๋ฅผ ๊ฐ์ ธ์ฌ ์ ์์ต๋๋ค.### MediaPlayer
> MusicKit์ ์ผ๋ถ์ธ MediaPlayer ํ๋ ์์ํฌ๋ฅผ ํ์ฉํ์ฌ ๋ ธ๋๋ฅผ ์ฌ์ํ๊ฑฐ๋ ๋ฉ์ถ ์ ์์ต๋๋ค.
## ๐ฏ What we focus on?
> MusicKit์ ํ์ฉํ์ฌ Apple Music์์ ๋ ธ๋๋ฅผ ๊ฒ์ํ๊ณ , MediaPlayer๋ฅผ ํตํด ์ฌ์ํ๋ ๊ธฐ๋ฅ์ ๊ตฌํํ๋ ๊ฒ์ ์ง์คํ์ต๋๋ค.
## ๐ผ Use Case
> "๋๋ค ์์ 1์ด๋ฃ๊ณ ๋ง์ถ๊ธฐ"
## ๐ผ๏ธ Prototype
![(ํ๋กํ ํ์ ๊ณผ ์ค๋ช ์ถ๊ฐ)](https://github.com/DeveloperAcademy-POSTECH/2024-NC2-M28-Music/assets/52277540/ec32e1b5-cc27-4441-b414-ad4a87e05074)
### ์ฐ๋๋ณ K-Pop ํ๋ ์ด๋ฆฌ์คํธ ์ ํ
- 2000~2023๋ ์ K-Pop ํ๋ ์ด๋ฆฌ์คํธ ์ค 1๊ฐ ์ ํ
### ํด์ฆ ์กฐ๊ฑด ์ค์
- ๋ฌธ์ ๊ฐ์
- ์ ํ ์ฒญ์ทจ์๊ฐ### ์กฐ๊ฑด์ ๋ฐ๋ฅธ ์์ ํด์ฆ ์์ฑ
### ์์ ํด์ฆ
- ํด์ฆ ์งํ์ํฉ์ ๋ณผ ์ ์๋ ProgressBar
- ์์ ์ฌ์
- ๋จ๊ณ์ ๋ฐ๋ฅธ ํํธ ์ ๊ณต ํ ์ ๋ต ๋ณด๊ธฐ
- ์ ๋ต ๋ฐ๋ก ๋ณด๊ธฐ### ํด์ฆ ์ข ๋ฃ
- ํํ๋ฉด ๋ฒํผ ํด๋ฆญ์ ์ฐ๋๋ณ K-Pop ํ๋ ์ด๋ฆฌ์คํธ ์ ํ ํ๋ฉด์ผ๋ก ๋ค๋น๊ฒ์ด์
## ๐ ๏ธ About Code
### ์ฌ์ฉ์ ์ธ์ฆ ์์ฒญ
```swift
// MusicManager.swiftfunc requestAuthorization() async -> Bool {
let status = await MusicAuthorization.request()
return status == .authorized
}
```- requestAuthorization ํจ์๋ฅผ ํตํด ์ฌ์ฉ์๊ฐ Apple Music์ ์ ๊ทผํ ์ ์๋ ๊ถํ์ ์์ฒญํฉ๋๋ค.
### ํ๋ ์ด๋ฆฌ์คํธ ๊ฒ์
```swift
//MusicManager.swiftvar searchRequest = MusicCatalogSearchRequest(term: "K-Pop Hits: \(year)", types: [Playlist.self])
searchRequest.limit = 1let searchResponse = try await searchRequest.response()
```- MusicCatalogSearchRequest๋ฅผ ํตํด ํน์ ์ด๋ฆ์ ํ๋ ์ด๋ฆฌ์คํธ ๊ฒ์์ ์์ฒญํฉ๋๋ค.
- ๊ฒ์ํ ๊ฒฐ๊ณผ ์ค์์ ๊ฐ์ฅ ์ฐ๊ด์ฑ์ด ๋์ ๊ฒ์๊ฒฐ๊ณผ 1๊ฐ๋ฅผ ๋ฐ์์ต๋๋ค.### ํ๋ ์ด๋ฆฌ์คํธ์์ ํธ๋ ๊ฐ์ ธ์ค๊ธฐ
```swift
// MusicManager.swiftif let playlist = searchResponse.playlists.first {
print("ํ๋ ์ด๋ฆฌ์คํธ๋ฅผ ์ฐพ์์ต๋๋ค: \(playlist)")// ํ๋ ์ด๋ฆฌ์คํธ์ ํธ๋๋ค์ ๊ฐ์ ธ์ค๊ธฐ
var playlistRequest = MusicCatalogResourceRequest(matching: \.id, equalTo: playlist.id)
playlistRequest.properties = [.tracks]let playlistResponse = try await playlistRequest.response()
if let detailedPlaylist = playlistResponse.items.first {
print("์์ธ ํ๋ ์ด๋ฆฌ์คํธ: \(detailedPlaylist)")let tracks = detailedPlaylist.tracks ?? []
let songs: [Song] = tracks.compactMap {
if case let .song(song) = $0 {
return song
}
return nil
}DispatchQueue.main.async {
self.tracks = songs
print("ํธ๋ ๋ชฉ๋ก: \(self.tracks)")
}
} else {
print("ํ๋ ์ด๋ฆฌ์คํธ์ ์์ธ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ค์ง ๋ชปํ์ต๋๋ค.")
}
} else {
print("ํ๋ ์ด๋ฆฌ์คํธ๋ฅผ ์ฐพ์ง ๋ชปํ์ต๋๋ค.")
}
```- MusicCatalogResourceRequest์ ํตํด ๊ฒ์์ ํตํด ์ฐพ์ playList ์์ ์๋ ํธ๋์ ์์ฒญํฉ๋๋ค.
- ํธ๋์ ๋ด๊ฒจ์๋ ๋ ธ๋๋ค์ songs ๋ฐฐ์ด์ ์ถ๊ฐํฉ๋๋ค.### ๋ ธ๋ ์ฌ์
```swift
// MusicManager.swiftfunc songPlayForTime(_ song: Song, time: Double){
Task {
do {
print(song)
let storeID = song.id.rawValue
let descriptor = MPMusicPlayerStoreQueueDescriptor(storeIDs: [storeID])
musicPlayer.setQueue(with: descriptor)
musicPlayer.play()DispatchQueue.main.asyncAfter(deadline: .now() + time){
self.musicPlayer.pause()
}
}
}
}
```- ์ฌ์ํ ๋ ธ๋์ id๋ฅผ ๊ฐ์ ธ์จ ํ MPMusicPlayerStoreQueueDescriptor๋ฅผ ํตํด ์ฌ์ ํ๋ฅผ ์ค์ ํ ๋์คํฌ๋ฆฝํฐ๋ฅผ ๋ง๋ญ๋๋ค.
- ์ฌ์ ํ๋ฅผ ์ค์ ํ ํ์ ์์ ์ ์ฌ์ํฉ๋๋ค.
- ์ง์ ๋ ์๊ฐ ํ ์์ ์ ์ผ์ ์ ์งํฉ๋๋ค.