티스토리 뷰

반응형

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;
}

 

반응형
댓글