It would probably be easier to have a single argument that accepts either a filename or a recording object.  The io class can then figure out which you are dealing with (such as hastattr(filename, 'lower') to check if it is a string), then act appropriately.  This avoids the issue of having to deal with users providing both a filename and a recording object.