Search code examples
c#xamlwindows-phone-8.1windows-phoneruntime

Get Thumbnail from mp3 file in c# xaml for windows phone 8.1


I need to get Thumbnail from mp3 files. I Implemented this but it never catch thumbnails. I checked the existence of the images opening them with windows media player and from xbox music (on the phone) but i can't retrieve them in my app. Please Help

async private void ThumbnailFetcher(StorageFile file)
    {

        if (file != null)
        {
            const ThumbnailMode thumbnailMode = ThumbnailMode.MusicView;
            const uint size = 100;



            using (StorageItemThumbnail thumbnail = await file.GetThumbnailAsync(thumbnailMode, size))
            {

                if (thumbnail != null && thumbnail.Type == ThumbnailType.Image)
                {
                   this.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
                    {
                        BitmapImage thumbnailImage = new BitmapImage();//image used for display
                        thumbnailImage.SetSource(thumbnail);
                        CurrentAlbumArt.Source = thumbnailImage;


                        Debug.WriteLine("true");
                    });

                }
                else
                {
                    Debug.WriteLine("False");
                }
            }
        }

    }

P.s It gives always false.

It seems there is a bug on windows phone 8.1, I searched all the night and the only method I could implemented is this

var fileStream = await file.OpenStreamForReadAsync();

        var TagFile = File.Create(new StreamFileAbstraction(file.Name, fileStream, fileStream));
        // Load you image data in MemoryStream
        var tags = TagFile.GetTag(TagTypes.Id3v2);


        IPicture pic = TagFile.Tag.Pictures[0];
        MemoryStream ms = new MemoryStream(pic.Data.Data);
        ms.Seek(0, SeekOrigin.Begin);


            bitmap.SetSource(ms.AsRandomAccessStream());
            AlbumArt.Source = bitmap;

but it doesn't work too..


Solution

  • var filestream = await receivedFile.OpenStreamForReadAsync();
                var tagFile = File.Create(new StreamFileAbstraction(receivedFile.Name, filestream, filestream));
                var tags = tagFile.GetTag(TagLib.TagTypes.Id3v2);
                var bin = (byte[])(tags.Pictures[0].Data.Data);
                MemoryStream ms = new MemoryStream(bin);
               await bitmapImage.SetSourceAsync(ms.AsRandomAccessStream());
    AlbumArt.Source=bitmapImage;
    

    use this and taglib portable. (Sorry for take so much time)