Twice 18

I’m another year older today marking the double 18.  This means I now get to vote twice.  Maybe I’ll get a cheeseburger.

2018 has been one of the worst years in memory.  I’d like to put an early end to the year on my birthday and start 2019 in November just to be done with it.  We’re skipping Thanksgiving and Christmas and hopping straight into the new year.

I might need to go back to my hairstyle from my 20s soon.  I’m getting pretty sparse up top.  Think of all the money I’ll save on combs.  It must be dozens of dollars per decade.  Phew.

I’d like to listen to some music with my eyes closed (remember doing that sort of thing?) and not worry about getting nut-shotted by one of my kids.  It might be too much to ask but that’s what I really want for my birthday.

Dear Video Games; It’s You, Not Me

Video games.  I’ve loved them for as long as I can remember.  I have other posts on this blog sharing how they taught me and changed my life.  My desire to explore new worlds while sitting on the floor with bronchitis or drive a car 200+ miles per hour without the fear of death.  They have provided entertainment and countless hours of thought.

The wonder of what’s around the corner or what the next level will look like was something that drove me as a kid.  Going to school and thinking about what the next sword would look like in Secret of Mana.  Would it be yellow?  Maybe blue?  Simple pixel patterns mixed with beep-boop music and a ridiculous story line kept me excited and eager.  And I’m not alone.  The impact on these earlier games still sits deep with my generation.

I think that is part of the problem that I’m having now.  I still love the wonder, the what-if, the experience of diving deep into a world and having my own experience.  Unfortunately, games are less-and-less this and more always-online-services-multiplayer-tracking-gambling-hundred-million dollar “experiences”.  Things have changed so much.

Before you jump up and say “but Jason, those intimate smaller experiences still exist – there are tons of small developers who want just what you want”…sure.  That’s true and it makes me glad that there are a pile of thirty-somethings who have the passion and the drive to create something that they want to see while handling all the stress of running a small business.  Some of these small experiences make amazing passion projects and each time I see a YouTube trailer for the latest pixel art JRPG that has no interest in multiplayer, I smile.  I miss those days.

But here’s where we step into where even those games mostly falter.  With few exceptions, they will depend on some other platform or distribution network to get it into your hands.  Inevitably you will be watched, tracked, ranked, and all but forced to participate in something social and unable to opt-out of data collection.  I feel anxious with each website, app, and service I use.  When that creeps into me searching for a new sword in some lovely pixel forest, the magic fades.

Few developers will give you the option to download an executable and walk away with a purchase.  This is impossible on a purpose-built console.  The DRM-free website GOG will help you get started with all sorts of old games that you can have the old experiences with.  This is wonderful if you only want to play old games (and some very rare exceptions for new games).

But this is the old, unique, niche world.  I have no problem being part of this world but I never sit in a social circle in 2018 and hear a group talk about “tiny game X” – it’s all “what’s your profile name so we can join a massive party and play online”.  What happened?

Online stuff is great but when it took over it was paired with anxiety for me.  The younger generation grew up with this as a default.  Some people have only played games that, either on a console or a computer, require some sort of internet connection.  Some leaderboard, some ranking, something needed internet connectivity.  There was some set of servers that handled this.  As things got big and really good, they became services and social experiences.  It was the downfall of on-the-couch, personal gaming and the beginning of the ranked, social, public persona that you attach to your virtual self.

Emphasizing how important the virtual self has become is the prevalence of cheating in online games.  There are ways to intercept network traffic to post better times to a leaderboard or even tools that will play a game for you to give you better statistics.  Not only does this ruin experience for those who really want to play, but it cheapens the service.  Why even bother to pay for a service when you know that career cheaters exist?  Is winning at a video game worth all this work?

I’ve struggled through the last five years or so with this.  I want to play big games.  It’s exciting to see a trailer where some space ship explodes or a vastly detailed forest with creatures running around.  I love playing racing games but still almost exclusively play private races against computer AI.  I don’t care to “rank up” or show off…I just want to race my cars.  It’s personal.  I like taking in-game photos but that’s similar to saying “hey, this is cool” not “look at my stats”.  Every console tracks usage within an inch of your life.  Even your smart TV keeps you under a microscope.  Your computer, your gaming profile, your network, everything is watching and analyzing.  Sure, you get to flex your “stats” and say “look how great I am at this…and it’s official!” but at what cost?

I’m still drawn to these private little games.  Nintendo still does a great job making games where online play is completely absent or not even a focus.  I wish that some of the other games I played would drop any online capability, let me unplug the network cable, and just focus on making a really good experience for me.  I don’t want you to watch what I’m doing.  I don’t care to get “points”.  Leave me alone and let me have some fun.  Unfortunately, there’s very little money to be made in that world.

So, modern video games, I hate to say it but it’s not me, it’s you.  I miss the days of old.  Not the old games, necessarily.  New games are spectacular but the stress and anxiety of a living service is just too much for me.  You want me to give you real money so my character can dance when I win?  I need to pay you to change the color of my vehicle?  If I even attempt to play with the public, I will hear endless racist and sexist remarks.  All of my movements are being analyzed?  This isn’t what a “lifetime gamer” wants to bring his children into.

I’ve said this before and it’s worth saying again.  Passively accepting this sort of thing as “the norm” is shallow, lazy, and in my opinion, wrong.  Many people don’t agree with this and it’s obvious because these are growing billion-dollar industries.  Don’t even get me started about social media’s handling of your information.

I doubt we will ever go back to the way things were.  If that ever does happen, I will be ready with a pad of paper and a pen to draw out my map in a new, exciting world and talk about it with my kids and co-workers.  Each exciting discovery will be a rumor instead of posted to twitter and known around the world within minutes.

I haven’t had a PC capable of playing modern games since around 2002.  I’ve kept a modern console around to play a specific game or two ever since.  I don’t know if that will be the case moving forward.  I’m not “growing up” or away from my love of games, what is happening is the definition of game has changed and it’s very clear that I’m not invited.

Last Night I Lost The Best Friend I Ever Had

Little Walter wrote that line for the song Last Night.  I wished I never would say it out loud.  It took me an extra day to be comfortable sharing this.

After thirteen years of the most reliable companionship of my life, our cat, Clover, has died.  Just typing it is very emotional for me.

Erin and I got Clover more than thirteen years ago in Minnesota.  We got a small kitten at the kennel and brought her home.  She was a darling from the start.

Living far from where I grew up meant most of my friends were coworkers.  It was hard to meet people outside of work when I worked such long hours.  I met some wonderful people during my years in Minnesota, New York, and Arizona – but nobody who was there for me every single time.

About a week ago, Sarah asked me who my best friend was.  I told her that I didn’t have one because I had so many great friends that it would be impossible for me to pick just one.  That wasn’t completely true.  The best friend I ever had never spoke a word to me and never left my side during my difficult times.  Clover, a simple house cat, was the greatest friend I ever had.

Erin works hard.  School and residency are very hard and keep you away from your family for years.  During these lonely times in lonely places, Clover was always there for me.  Whether we just sat on the couch, she sat on my feet, or she was protecting me from a dangerous moth – she was there.

She actually did find a scorpion in the house once.  I must say that was the most helpful thing she could have done.

Once, a ladybug got into our Albany apartment.  Clover chased it around the house and managed to catch it.  She walked up to me with it proudly in her mouth.  She then “meowed” and it flew off her tongue back into the house.  I always thought this was so cute.

Another time, also in Albany, our terrible apartment had ill-fitting window screens.  Clover jumped up on one and it fell with her attached down two stories!  She landed on a bush.  I remember looking out the window at her, still attached to the screen, looking up at me letting out a big deep wail.  I ran down in the darkness and grabbed her.  I asked for new screens and when the complex refused I glued them all in place.

When Sarah was born four years ago, Clover was forced into the back room.  She was scared of the new and noisy character in the home.  Of course, kids multiply, get bigger, and more curious.  And as cats get older, they get more shy.  The last few years of Clover’s life were a mix of hiding in our bedroom and poking a head out to say hello when the kids were in school or asleep.  It wasn’t ideal but we gave her the best we could.

I discovered that I am allergic to cats when Clover was about four years old.  I didn’t think for a second that she would leave my life for my comfort, instead she would go when the time was right and the allergy symptoms were just part of life.

I spent far less time with her during her final years.  If I was awake, so were the kids and she was too shy for their noise.  I shower in the evenings and she had a habit of waiting for me outside the bathroom door.  I’d open the door and she’d plop down on her side so I could rub her belly.  We had done this for as long as I can remember.  I’m not looking forward to getting out of the shower tonight.

Clover was wonderful and sweet.  She had beautiful eyes.  I will forever cherish the time we spent together, not saying a word.

Bulk Convert Follow-Up

Two things have changed.  I decided to undelete the whole WMA library and re-convert to 320kbps instead of 192kbps.

Second; Plex has decided to shut down the service for which I was preparing my music.  I don’t know what I’ll do next but I will make updates as I find out more.

Here’s the new script for the conversion.  It takes care of the square brackets, long file/paths, and some other stuff.

$m = "\\?\C:\Users\jason\OneDrive\Music\"

Get-ChildItem -Path $m -Filter '*[*' -Recurse | % {Rename-Item -LiteralPath $_.fullname -NewName $_.fullname.replace("[","(")}
Get-ChildItem -Path $m -Filter '*]*' -Recurse | % {Rename-Item -LiteralPath $_.fullname -NewName $_.fullname.replace("]",")")}

$batchtoconvert = gci -LiteralPath $m -Filter *.wma -Recurse

$batchtoconvert.Count

foreach ($filename in $batchtoconvert)
{
    write-host $filename.FullName
    $st = get-date
    $input = $filename.FullName
    $output = $filename.FullName -replace ".wma", ".mp3"
    & "C:\Users\jason\OneDrive\Documents\ffmpeg\bin\ffmpeg.exe" -i $input -ab 320k -map_metadata 0 -id3v2_version 3 $output -y -loglevel panic
    $et = get-date
    $ts = [DateTime]$et - [DateTime]$st
    write-host $ts.seconds " seconds"
    Remove-Item $filename.FullName -Force
}

Bulk Convert WMA to MP3

Don’t care about the what or why?  Skip to the how below.

Many years ago, I decided that lossless WMA was going to be the wave of the future.  My Creative Labs Zen played them beautifully when the world still hadn’t accepted FLAC.

It was a weird time for music.  Ipods weren’t a thing yet and the world didn’t know what to do with digital music.  Solid storage was impractically expensive and almost no MP3 players had it.  If they did, 64 megabytes of flash storage was equivalent to a 500 megabytes of magnetic disk storage.

Basically the answer was to go backward from everything we worked toward to have our home audio closely match the real thing and use absolute crap quality, highly compressed audio files so we could carry them to the gym.  Disgusting.

I did my research way back then and I believe my argument for the lossless WMA was both that WMP ripped them quicker than lossless MP3s and, more interestingly, supposedly it was less disk access to read them.  Think about it this way – highly compressed media needs to be decompressed.  This uses processing power and battery.  Less compression (or zero compression) only needs to be read from the disk, quickly interpreted, and then turned into audio.

Back in 2003-ish, I was convinced of this and ripped tons of my personal CDs into WMAs.  Eventually the Zune popped up and though it will be forever mocked, was a solid MP3 player.  It handled WMAs just fine so I still felt comfortable with my decision made a decade prior.

Later on, post Zune, I had a Windows Phone which, again, played WMAs without any issue.  Eventually I moved away from that (forcefully) and am now on an Android.  Androids can play WMA files just fine and Microsoft’s Groove player did a fine job of that.  Still, fifteen years later, I felt like it was a fine decision.  More so now that my files were stored online and bandwidth isn’t even a consideration any longer.

Recently Microsoft announced a plan to sunset (kill) the Groove player on all platforms except Microsoft platforms.  Unfortunately this left me in a rut as the final kill will happen in a few months and I’d still like to listen to these.

Plex has a cloud service that, well, sucks.  It’s supposed to read the files from your OneDrive account and give you a serverless playback option.  It works great with MP3 files but struggles greatly with WMAs regardless of platform.  I looked for many other options and everything seems to struggle.  I don’t know if it’s an on-fly conversion or some caching issue but WMAs are a thing of the past and I’m accepting that my twenty-year-ago decision was the wrong one.

But to be fair, nobody knew what would happen.

Being in OneDrive, it’s easy to sync up my library.  I recently went through the process of converting all of the WMA files into 192kb MP3 files.  File sizes shrank drastically as did quality.  I wasn’t looking to save space, I was looking to stream my music reliably and file size is important.

HOW

If you’re like me and you keep your music up on OneDrive and want to play it anywhere at any time, give this a try.  What I’m using:

  • Windows 10
  • OneDrive (built in)
  • Plex Cloud
  • PowerShell (built in)
  • ffmpeg

First off, you’ll need to download all of the WMAs.  My collection has a combination of many file types collected over eighteen years but we’ll convert these.

Mine are all gone so here’s a dummy.  Select all (ctrl + a) and right click, choose “Always keep on this device”.  This will start the OneDrive mega sync.  All of the WMA files, regardless of folder within your “music” folder, will begin to download.  This was about 60GB for me.

Then you wait.  Go download ffmpeg while you wait and extract it somewhere.  It doesn’t need to be installed.

Find the directory of the “ffmpeg.exe” file.  This is the tool that we’ll use to do the conversions.

Next we’re going to open up PowerShell.  I’ve written the script here.  It’s sloppy but it works and we’re not going for anything permanent.  Here’s the script.

$m = "C:\users\jason\OneDrive\Music\*"
#$m = "\\?\C:\users\jason\OneDrive\Music\*"

$batchtoconvert = gci -Path $m -Filter *.wma -Recurse

foreach ($filename in $batchtoconvert)
{
	write-host $filename.FullName
	$st = get-date
	$input = $filename.FullName
	$output = $filename.FullName -replace ".wma", ".mp3"
	& "C:\PATHTOFFMPEG\bin\ffmpeg.exe" -i $input -ab 192k -map_metadata 0 -id3v2_version 3 $output -y -loglevel panic
	$et = get-date
	$ts = [DateTime]$et - [DateTime]$st
	write-host $ts.seconds " seconds"
	Remove-Item $filename.FullName -Force
}

What’s it do?  We’ll go through it.

To get PowerShell open on a Windows computer, push WindowKey + R, type “powershell ise”, and push enter.  Copy/paste that script into the TOP window.

The first line is the main path of your music folder.  Under this, in any subfolder, you’ll have your WMA files.

The second line is to be used if paths get REALLY LONG.  It might be best to use this instead.  The pound symbol is a comment.

The next chunk says “give me a list of WMA files in all of these directories and sub directories”.

Then we get to the loop.  The next thing you need to change is that c:\PATHOFFFMPEG\.  Make sure to put the path of the ffmpeg.exe file you downloaded from the website earlier.

What this will do is take each one, name by name, and convert it a 192kb MP3 file, preserving the metadata and embedded album art on the way.  Cool!  It will also remove the WMA file (if it can – more on that below) so that the MP3 can effectively take its place.

To run it, highlight the whole text and push F8.

I recommend testing a few at a time.  You explicitly specify a directory to convert or even a whole letter.  I did my collection letter by letter with “…\A*” to get all the A’s.  This was not necessary but I worry about things and my computer is pushing seven years old so I wanted to keep an eye on it.

I actually ran two instances of PowerShell and ran a letter of the alphabet in each one.  T and S took the longest and it let more cores do more work.

A few caveats that could be fixed if you wanted to spend the time fixing them:

Paths that are too long will break it.  If it simply doesn’t work from the start, try a shorter or more explicit directory and see if that works.  You might have some long stuff.  You can also try using the “\\?\” syntax in front of the path to hint at the long paths.  If you have bad habits about giving paths crazy deep or long names, this can be a problem.  Play around with it.

Second, if a file or folder has [square brackets] anywhere, it will break the delete part of the script because I never bothered to escape them.  What I recommend is either write that in yourself (haha) or after you’re all converted, do another search for all the remaining WMA files.  You might notice that they all have a square bracket somewhere.  You can bulk delete them this way.  This won’t prevent them from being converted, just deleted.

Third and what should have been at the very top of this post: do this at your own risk.  You’re deleting your old WMAs, replacing them with MP3s, and eating a ton of bandwidth on the way.

  • OneDrive will go into frantic scan and upload mode during this process if you do it in the live sync’d directory.  Let it.
  • You will break your old playlists because they likely depended on the other filenames.
  • OneDrive will keep everything deleted for at least a month in the online recycle bin.  If everything gets really screwed up, you can bring back your old stuff.
  • KEEP YOUR MEDIA PLAYER CLOSED!  If it’s trying to scan this stuff while you do this, you’re going to make it vomit.
  • Be patient.

If this all works out for you, Plex offers a cloud player that will supposedly grab your files from OneDrive and play them anywhere you can install the app.  It works on Windows, Android handhelds and TVs, and the website.  It’s a great app but their handling of the streaming is sub-par.  I don’t recommend Plex right now but when the next thing comes around, the MP3 files will most likely be where the world wants you to be.  This time, I’ll be ready.

I’m considering a hosted personal server.  If I go that route, I’ll share all Linux commands and the scripting along the way.

Expect a follow up post in 2034 with the “I was wrong again – here’s how to really do it” explanation.

Have fun.