code: def vectors_from_fn(self, fn: str):
          
          audio = load_audio(fn)
          audio_volume = self.calc_volume(audio)
          audio_volume *= 0.4 + 0.5 * random()
          audio = self.normalize_volume_to(audio, audio_volume)
  
          self.listener.clear()
          chunked_bg = chunk_audio(audio, self.args.chunk_size)
          chunked_ww = self.chunk_audio_pieces(self.generate_wakeword_pieces(audio_volume), self.args.chunk_size)
  
          for i, (chunk_bg, (chunk_ww, targets)) in enumerate(zip(chunked_bg, chunked_ww)):
              chunk = self.merge(chunk_bg, chunk_ww, 0.6)
              self.vals_buffer = np.concatenate((self.vals_buffer[len(targets):], targets))
              self.audio_buffer = np.concatenate((self.audio_buffer[len(chunk):], chunk))
              mfccs = self.listener.update_vectors(chunk)
              percent_overlapping = self.max_run_length(self.vals_buffer, 1) / len(self.vals_buffer)
  
              if self.vals_buffer[-1] == 0 and percent_overlapping > 0.8:
                  target = 1
              elif percent_overlapping < 0.5:
                  target = 0
              else:
                  continue
  
              if random() > 1.0 - self.args.save_prob:
                  name = splitext(basename(fn))[0]
                  wav_file = join('debug', 'ww' if target == 1 else 'nww', '{} - {}.wav'.format(name, i))
                  save_audio(wav_file, self.audio_buffer)
              yield mfccs, target
docs: Run through a single background audio file, overlaying with wake words.
          Generates (mfccs, target) where mfccs is a series of mfcc values and
          target is a single integer classification of the target network output for that chunk