<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def play(self, sox_effects=()):
 """ Play a speech. """


    # build the segments
    preloader_threads = []
    if self.text != "-":
      segments = list(self)
      # start preloader thread(s)
      preloader_threads = [PreloaderThread(name="PreloaderThread-%u" % (i)) for i in range(PRELOADER_THREAD_COUNT)]
      for preloader_thread in preloader_threads:
        preloader_thread.segments = segments
        preloader_thread.start()
    else:
      segments = iter(self)

    # play segments
    for segment in segments:
      segment.play(sox_effects)

    if self.text != "-":
      # destroy preloader threads
      for preloader_thread in preloader_threads:
        preloader_thread.join()