티스토리 뷰
KMusic Player 소스에서 사용된 로컬 폴더에 접근해서 파일 목록 가지고 오고, 파일 정보를 조회하는 방법에 대해서 설명하도록 하겠다.
오픈 소스 : http://kaki104.tistory.com/104
1. Music Library에 접근하기
Package.appxmanifest 파일을 열면 Capabilities라는 탭이 존재 한다. 그곳에서 Music Library를 선택해 주어야 그 곳에 Music Library폴더에 접근할 수 있게 된다.
2. FileOpenPicker
파일을 열거나 선택하는데 사용되는 것으로, 몇개의 프로퍼티를 사용하면, 시작 위치나, 확장자를 지정 할 수 있게 된다.
ICommand addPlaylist;
/// <summary>
/// 추가 커맨드
/// </summary>
public ICommand AddPlaylistCommand
{
get
{
if (addPlaylist == null)
{
addPlaylist = new DelegateCommand(async obj =>
{
//피커를 생성하고
FileOpenPicker picker = CreateFilePicker(audioExtensions);
//여러개의 파일을 선택하는 팝업 다이얼로그 창을 연다. 반환 형식은 StorageFile들로 StorageFile을 컨트롤 하는 것에 익숙해져야 한다.
var files = await picker.PickMultipleFilesAsync();
//선택된 파일이 있으면
if (files != null && files.Count > 0)
{
//파일들로 Playlist를 만들고
await createPlaylist(files);
//중지 상태 였다면 플레이를 시작한다.
if(wasPlaying == false)
await setCurrentPlayingAsync(currentSongIndex);
}
});
}
return addPlaylist;
}
}
//새로운 FileOpenPicker를 생성한다.
private FileOpenPicker CreateFilePicker(string[] extensions)
{
//피커를 만들고
FileOpenPicker picker = new FileOpenPicker();
//시작위치를 뮤직라이브러리로 지정하고
picker.SuggestedStartLocation = PickerLocationId.MusicLibrary;
//확장자를 하나씩 추가한다. 확장자는 필수 사항이다.
foreach (string extension in extensions)
{
picker.FileTypeFilter.Add(extension);
}
return picker;
}
3. Playlist 만들기
//Playlist를 이용해서 Playlist만들기 - Playlist를 선택 후 실행되는 곳
async Task createPlaylist(Playlist pl)
{
currentSongIndex = -1;
SongCollection.Clear();
if (pl.Files.Count > 0)
{
//Playlist에 Files 프로퍼티의 파일 정보를 가지고 SongModel생성
foreach (StorageFile file in pl.Files)
{
SongModel newSong = new SongModel(file);
await newSong.getMusicPropertiesAsync();
SongCollection.Add(newSong);
}
currentSongIndex = 0;
}
}
//StorageFile들을 가지고 Playlist만들기 - 파일 선택 후 실행되는 곳
async Task createPlaylist(IReadOnlyList<StorageFile> files)
{
if (files.Count > 0)
{
// Create the playlist
foreach (StorageFile file in files)
{
//파일을 이용해서 songModel을 생성하고
SongModel newSong = new SongModel(file);
//파일의 정보를 조회하고
await newSong.getMusicPropertiesAsync();
//컬렉션에 추가
SongCollection.Add(newSong);
}
}
}
SongModel.cs
//음악파일에서 추가 정보 조회
public async Task getMusicPropertiesAsync()
{
var properties = await this.File.Properties.GetMusicPropertiesAsync();
Artist = properties.Artist; //음악가
Album = properties.Album; //앨범명
Title = properties.Title; //제목
Rating = properties.Rating; //선호도
Duration = properties.Duration; //플레이시간
//파일에서 이미지 가지고 오기
var thumb = await this.File.GetThumbnailAsync(Windows.Storage.FileProperties.ThumbnailMode.MusicView, 250);
BitmapImage bi = new BitmapImage();
bi.SetSource(thumb);
AlbumImage = bi;
}
'Previous Platforms' 카테고리의 다른 글
using Parameter when start up Silverlight (0) | 2012.04.26 |
---|---|
Korea Bus Information 2.0 - Windows 8 CP - Build 1.0.0.16 (2) | 2012.04.11 |
환경설정 데이터 저장하기, 불러오기 - Windows 8 CP (0) | 2012.04.03 |
KMusic Player 0.9 - Windows 8 CP - Open Source (0) | 2012.04.02 |
KMusic Player 0.9 beta test, Windows 8 CP (0) | 2012.03.30 |
- Total
- Today
- Yesterday
- uno-platform
- ComboBox
- Behavior
- LINQ
- Cross-platform
- C#
- .net
- XAML
- Build 2016
- Windows 10
- #Windows Template Studio
- #uwp
- kiosk
- MVVM
- Visual Studio 2022
- visual studio 2019
- #prism
- UWP
- IOT
- WPF
- Always Encrypted
- .net 5.0
- windows 11
- #MVVM
- uno platform
- PRISM
- Bot Framework
- ef core
- Microsoft
- dotNETconf
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |