docs: def parse(cls, specsFileOrString):
          """Parsers a file or string and returns a list of AudioClipSpec
          
          Arguments:
              specsFileOrString (str): specifications' file or string
          
          Examples:
              >>> SpecsParser.parse('23.4 34.1\n40.2 79.65 Hello World!')
              [<AudioClipSpec start:23.40, end:34.10, text:''>, 
              <AudioClipSpec start:40.20, end:79.65, text:'Hello World!'>]
  
          Returns: list(AudioClipSpec) or None
          """
          stringToParse = None
  
          # Read the contents of the file if specsFileOrString is not a string
          if os.path.isfile(specsFileOrString):
              with open(specsFileOrString, 'r') as f:
                  stringToParse = f.read()
          else:
              stringToParse = specsFileOrString
  
          # Audacity uses \r for newlines
          lines = [x.strip() for x in re.split(r'[\r\n]+', stringToParse)]
  
          clips = []
          for line in lines:
              if line != '':
                  clips.append(cls._parseLine(line))
  
              # if spec != None:
              #     clips.append(spec)
  
          return clips