Search code examples
c#powershellaudioid3file-properties

Access Music File Metadata in Powershell


So over the years between getting copied from one PC/hard drive to the next, my music collection is in a bit of a mess, so I want to go through each one programmatically and update the file metadata in the below screenshot (from right click > Properties on the file):

enter image description here

Some of the files are MP3 so I know ID3 can be used there (I had tried using Get-Content to view the last 128 bytes where the ID3 tags go, but only some small bits show as readable text, assuming this is because it's a binary file and needs decoded/parsed in some specific way). About an equal number are WMA (quite an old codec version, probably 7 or 8) and some are uncompressed WAV.

So I possibly need two things:

a) a way to access and update the ID3 info for the MP3 type files b) a way to access the File Properties (at the Windows level) for WMA and WAV; if this method would also work for MP3 that'd be fantastic

Anyone got any ideas? I know this is possible in C# but that's a bit over my head right now as more used to scripting. If it needs to be done in a proper compiled program so be it but hoping there's a way to do it in shell.


Solution

  • Download the tagsharp.dll from HERE.

    There is a separate module which can be used to modify any of the meta data like:

    get-childitem mylocal.mp3 | set-album "MyLocalAlbum"
    

    or something like this :

    $files = Get-ChildItem D:\Folder -include *.mp3 -recurse 
    [System.Reflection.Assembly]::LoadFile("C:\TagLibDirectory\taglib-sharp.dll" ) 
    
    foreach($iFile in $files) 
    { 
        $iFile.fullname    
        $mediaFile=[TagLib.File]::Create($iFile.fullname)    
        $mediaFile.Tag.Album = $iFile.Directory.Name 
        $mediaFile.Tag.AlbumArtists=$iFile.Directory.Name 
        $mediaFile.Save()   
    }
    

    Hope it helps.