<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def send_audio(self, left_channel, right_channel):
 """Add the audio samples to the stream. The left and the right channel should have the same shape. Raises an OSError when the stream is closed. :param left_channel: array containing the audio signal. :type left_channel: numpy array with shape (k, ) containing values between -1.0 and 1.0. k can be any integer :param right_channel: array containing the audio signal. :type right_channel: numpy array with shape (k, ) containing values between -1.0 and 1.0. k can be any integer """

        if self.audio_pipe is None:
            if not os.path.exists('/tmp/audiopipe'):
                os.mkfifo('/tmp/audiopipe')
            self.audio_pipe = os.open('/tmp/audiopipe', os.O_WRONLY)

        assert len(left_channel.shape) == 1
        assert left_channel.shape == right_channel.shape

        frame = np.column_stack((left_channel, right_channel)).flatten()

        frame = np.clip(32767*frame, -32767, 32767).astype('int16')
        try:
            os.write(self.audio_pipe, frame.tostring())
        except OSError:
            # The pipe has been closed. Reraise and handle it further
            # downstream
            raise