Reverse the audio file.

        The reversing is done efficiently using NumPy views inplace
        instead of swapping values.

        Only speech and nonspeech intervals are actually recomputed
        as Python lists.

def reverse(self):
        """
        Reverse the audio file.

        The reversing is done efficiently using NumPy views inplace
        instead of swapping values.

        Only speech and nonspeech intervals are actually recomputed
        as Python lists.
        """
        self.log(u"Reversing...")
        all_length = self.all_length
        self.__mfcc = self.__mfcc[:, ::-1]
        tmp = self.__middle_end
        self.__middle_end = all_length - self.__middle_begin
        self.__middle_begin = all_length - tmp
        if self.__mfcc_mask is not None:
            self.__mfcc_mask = self.__mfcc_mask[::-1]
            # equivalent to
            # self.__mfcc_mask_map = ((all_length - 1) - self.__mfcc_mask_map)[::-1]
            # but done in place using NumPy view
            self.__mfcc_mask_map *= -1
            self.__mfcc_mask_map += all_length - 1
            self.__mfcc_mask_map = self.__mfcc_mask_map[::-1]
            self.__speech_intervals = [(all_length - i[1], all_length - i[0]) for i in self.__speech_intervals[::-1]]
            self.__nonspeech_intervals = [(all_length - i[1], all_length - i[0]) for i in self.__nonspeech_intervals[::-1]]
        self.is_reversed = not self.is_reversed
        self.log(u"Reversing...done")