mixxx DJ software and Apple AAC/mp4 WMA & MOD

http://mixxx.org
hosts some great open source (free) DJing software-
Drawback is: the free pre compiled Linux Downloads you can get are not built to process Apple AAC/m4a audio files such as are widely used within iTunes. This is because of Apple & other patent issues-
On MACs & PCs it’s taken care of by their own pre installed Libraries.

Yet you are free to build it yourself legally and freely.
But don’t distribute the results. Such is the Law.
Also the Default will not handle my old collection of .MOD/.IT (Screamtracker) audio files from Amiga days, 1980’s era…
Not Commonly Needed. But I have some!
Also, although the site seems to suggest Windows .wma files cannot be handled. my compile seemed to  read them Just Fine.. with an Exception: Microsoft code a PRO format. 
“Windows Media Audio 10 Professional” reports the “medianfo” utility in Ubuntu : (
These load as a BLANK timeline with no spectrograph-
and won’t make sound.  Use ffmpeg to convert them. Too Bad.
I wanted to be able to read all possible audio formats without having to convert anything. This Compile seemed to work for me in Linux using  Mint ver 20 based on Ubuntu 19 & the latest ‘stable’ Branch of Mixxx, which is ver 2.4.4 as of Oct 2020

Not Kosher– But, I found it easiest to run everything as ‘root’ rather than ‘sudo’ this that & the other. Some tricky instructions are indeed here:
https://github.com/mixxxdj/mixxx/wiki/compiling%20on%20linux
but I became Confused in the footsteps of those for whom this is familiar territory.  For Starters:
#apt-get install cmake

Now we need to put in ‘development’ Headers and info about the Libraries that will be Used
(Don’t worry too much about ‘already installed’ warnings here)
So, in My Case, as Root, on One Line::

#apt-get install g++ git scons libportmidi-dev libopusfile-dev libshout-dev libtag1-dev libprotobuf-dev protobuf-compiler libusb-1.0-0-dev libfftw3-dev libmad0-dev portaudio19-dev libchromaprint-dev librubberband-dev libsqlite3-dev libid3tag0-dev libflac-dev libsndfile-dev libupower-glib-dev libavcodec-dev libavformat-dev libavutil-dev libswresample-dev libgl-dev liblilv-dev libjack-dev libjack0 portaudio19-dev libmp3lame-dev libebur128-dev
(lots of messages– Look For Error)
Then more:
#apt-get install qt5-default qtdeclarative5-dev libqt5opengl5-dev qtscript5-dev libqt5svg5-dev libqt5x11extras5-dev libqt5sql5-sqlite libmodplug-dev
(More Blurbs– Look for Errors)

Now! Onto the Build Process: (For Current stable ver 2.2.x)
#cd /usr/src 
#md git 
#cd git 
#git clone -b2.2 https://github.com/mixxxdj/mixxx 
#cd mixxx 
#scons faad=1 ffmpeg=1 prefix=/usr/local -j `nproc` optimize=native

-j nproc will execute the “nproc” command to return the number of CPUs you have to the -j parameter, so the compiler will work in parallel. Wow. Look at TOP where I have an 8 core laptop– This made the cooling fan  run and took about 5 mins to compile. I get compile time Warnings in Blue, nothing in red..

14848 root 20 0 340616 292780 17168 R 98.7 1.2 0:03.85 cc1plus
14828 root 20 0 402956 363292 23336 R 98.3 1.5 0:06.47 cc1plus
14858 root 20 0 250128 217712 16720 R 97.3 0.9 0:03.02 cc1plus
14795 root 20 0 489764 434088 23432 R 95.7 1.8 0:09.46 cc1plus
14854 root 20 0 283376 235888 17080 R 85.7 1.0 0:03.11 cc1plus
14869 root 20 0 181592 153036 16888 R 58.5 0.6 0:01.76 cc1plus
14875 root 20 0 157396 130176 16988 R 47.8 0.5 0:01.44 cc1plus
14881 root 20 0 122708 93916 16888 R 26.6 0.4 0:00.80 cc1plus

Now then!
#cmake install
This will create the following installs:
/usr/local/bin/mixxx
/usr/local/lib/mixxx
/usr/loca/share/doc/mixxx
/usr/local/share/applications/mixxx.desktop

Ideally copy this last file onto your Desktop

BEFORE running mixxx
Check in ~/.mixxx
in case you have run things before, perhaps move everything out of that folder. It will be re created and store your (NON ROOT) launch of mixxx

 

Movie Timestamp Work

This article is a ‘nutshell’ and assumes rough familiarity with the concepts involved. I use it to refer back to : ). It is also Incomplete : )

I have some old phone videos from 2012 whose FILE timestamp is roughly right (IE:: AROUND that Christmastime) but the video camera used- a Palm Treo I think- did not store EXIF internal metadata about this. All time  fields were set to Zero.
My MAC PHOTOS software uses the EXIF date/time stamps to help order the pictures chronologically.
I got EXIFTOOL command line tool from here
(NO graphical interface, but All the Power in the World)
https://exiftool.org/
and Set to Work. (also available for distributions like brew, apt, yum…

Task: Set the missing INTERNAL EXIF timestamps to match that of the file creation date.
This was likely not actually when the camera took them, but rather when they ended up on an old PC, closer to the real time than ‘now’
For full file info for my demo file “Various2011and2012_009.mov”

$exiftool Various2011and2012_009.mov
(long resulting printout)
Here is one example for the ls -l Command::
2686011 Jan 16 2012 Various2011and2012_009.mov
(NOTE: arguments to exiftool do not care about upper and lowercase)
$exiftool -alldates Various2011and2012_009.mov
Create Date : 0000:00:00 00:00:00
Modify Date : 0000:00:00 00:00:00
a full print out reports (snip) also:
Media Create Date : 0000:00:00 00:00:00
Media Modify Date : 0000:00:00 00:00:00
so there are at least FOUR places within the video where time stamps are used. As I do not know which one(s) that MAC PHOTOS uses, I shall change them ALL to that of whatever the file timestamp itself is:

exiftool “-AllDates<FileModifyDate” Various2011and2012_009.mov
1 image files updated

(that’s one line) look closely within the single-quotes: it reads like:
“Get alldates FROM (<) the FileModifyDate” 
(alldates actually refers to just 2 mains dates: Create and Modify, there are more…)
Wildcards work, too
exiftool “-AllDates<FileModifyDate” *.mov

HEre is the effect of that:

2686003 Oct 14 23:51 Various2011and2012_009.mov
2686011 Jan 16 2012 Various2011and2012_009.mov_original

TWO files, the Original and the Modified with a very slightly different size due to added 8 bytes of binary data- and NOTE the modified file NOW has the present timestamp on – because it just got written to!
But we will Deal With That In A Moment:
There are 2 more timestamps I want to Change
MediaCreateDate and MediaModifyDate
Well– that’s easy.

$exiftool ‘-mediacreatedate<createdate’ Various2011and2012_009.mov
1 image files updated

$exiftool ‘-mediamodifydate<modifydate’ Various2011and2012_009.mov
1 image files updated

The File Timestamp is ‘now’ so! let’s set that back to what it was,
just for fun:
$exiftool ‘-filemodifydate<createdate’ Various2011and2012_009.mov
1 image files updated

So there you have it– everything your album software wants to know about Timestamps it has it. Not so much when the image was made as when it was copied somewhere. With luck it COULD be the actual Time it was Taken

NOTE: I have done nothing here about time zones etc etc.
Also– Note that if you are COPYING files under, for example, Linux– be sure to use the Archive or Preserve flag so the copied file is not timestamped ‘now’, IE:
$cp -av fileA.mov fileB.mov
 So YES work on COPIES of the precious old videos, please!
Want to do these steps on a mass of files? Something like:
$exiftool ‘-alldates<FileModifyDate’ *.mov

As a side-note– for un recalled reasons, all there videos were rotated 90 degrees. MAC PHOTOS can rotate still images, not videos, so I used FFMPEG which *also*  converted the rotated videos to the more efficient .mp4 format. Extra parematers are needed to ensure the timestamps get copied over…

$ffmpeg -i Various2011and2012_009.mov -vf “transpose=1” -map_metadata 0 Various2011and2012_009.mp4

(LONG screed of Blurb… 🙂

_metadata 0 Note the “-map_metadata 0” arg. without this you will LOSE the timestamp in conversion?!
So YES this will mess up the file timestamp and YES ffmpeg preserves the EXIF internal times stamps during conversion- making the file up to 10 times smaller with no noticeable degradation

I threw that in as an aside almost, to show command lines are extremely powerful but can be user-hostile : )

HERE is the Batch File used to mass rotate

for name in *.mov; do
echo FileName: \”$f\”
ffmpeg -nostdin -y -i $name -vf transpose=1 -map_metadata 0 ${name%.*}.mp4
done

IF you are on a MAC, all this is possible using the BREW system described here:

https://brew.sh/
which tells you to do like:
$ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"
FOLLOW  THE INSTRUCTIONS there Closely, BE PATIENT then perform:

brew install exiftool

brew install ffmpeg

and you are in business.
I have said nothing here about converting stuff in batches– s separate Projects elsewhere and requiring “bash scripts’ or the like

ls -la
Linux: It’s even easier. |
Use your package installer.
Windows– similar, I suppose but I have not tried it

 Please contact me with any Questions– this is a Nutshell or Outline