For what you're asking (running a function prior to or after a single Migration) see the documentation for Less Commonly Implemented Migration Methods. They include:
Note this caveat from the documentation:
NOTE: If you are running your migrations through the web UI, which
chunks the work into batches, if a given migration takes long enough
to be broken into separate batches, these functions will be called for
each batch. They are called each time the migration is invoked, not
just the first (or last, in the complete case).
If you don't like that behavior, then in your
postImport() simply use a static variable to see if your custom logic has already run once. Lullabot Posted a good blog entry on using
drupal_static back in 2011 on this subject.
With regards to per-record migration completion (like moving 1 song from legacy data store to drupal -- 1 "row" of a migration) take a look at the documentation for Commonly Implemented Migration Methods. They include:
function prepare($entity, stdClass $row)
function complete($entity, stdClass $row)