def METHOD_NAME(self, text):
    """ Speak the given *text* using text-to-speech. """
    if len(self._read_stdin_command) == 0:
        raise NotImplementedError("Virtual method not implemented.")
    # Encode input, if necessary.
    encoding = getpreferredencoding()
    if isinstance(text, text_type):
        text = text.encode(encoding)
    # Speak *text* using the specified command.
    p = Popen(self._read_stdin_command, stdout=PIPE, stdin=PIPE,
              stderr=PIPE)
    stdout, stderr = p.communicate(input=text)
    returncode = p.wait()
    # Decode output if it is binary.
    if isinstance(stdout, binary_type): stdout = stdout.decode(encoding)
    if isinstance(stderr, binary_type): stderr = stderr.decode(encoding)
    if stdout: print(stdout)
    if stderr: print(stderr, file=sys.stderr)
    # Handle non-zero return codes.
    if returncode != 0:
        raise RuntimeError("%s exited with non-zero return code %d"
                           % (self.name, p.returncode))