Convert AstonFrame into a WAV file.

        Parameters
        ----------
        filename : str
            Name of wavfile to create.
        speed : float, optional
            How much to speed up for sound recording, e.g. a value of 60
            will turn an hour-long AstonFrame into a minute-long sound clip.
        cutoff : float, optional
            m/z's under this value will be clipped out.

def as_sound(self, filename, speed=60, cutoff=50):
        """
        Convert AstonFrame into a WAV file.

        Parameters
        ----------
        filename : str
            Name of wavfile to create.
        speed : float, optional
            How much to speed up for sound recording, e.g. a value of 60
            will turn an hour-long AstonFrame into a minute-long sound clip.
        cutoff : float, optional
            m/z's under this value will be clipped out.
        """
        # make a 1d array for the sound
        def to_t(t):
            return (t - self.index[0]) / speed

        wav_len = int(to_t(self.index[-1]) * 60 * 44100)
        wav = np.zeros(wav_len)

        # create an artificial array to interpolate times out of
        tmask = np.linspace(0, 1, self.shape[0])

        # come up with a mapping from mz to tone
        min_hz, max_hz = 50, 1000
        min_mz, max_mz = min(self.columns), max(self.columns)

        def mz_to_wv(mz):
            """
            Maps a wavelength/mz to a tone.
            """
            try:
                mz = float(mz)
            except:
                return 100
            wv = (mz * (max_hz - min_hz) -
                  max_hz * min_mz + min_hz * max_mz) / (max_mz - min_mz)
            return int(44100 / wv)

        # go through each trace and map it into the sound array
        for i, mz in enumerate(self.columns):
            if float(mz) < cutoff:
                # clip out mz/wv below a certain threshold
                # handy if data has low level noise
                continue
            print(str(i) + '/' + str(self.shape[1]))
            inter_x = np.linspace(0, 1, wav[::mz_to_wv(mz)].shape[0])
            wav[::mz_to_wv(mz)] += np.interp(inter_x, tmask, self.values[:, i])

        # scale the new array and write it out
        scaled = wav / np.max(np.abs(wav))
        scaled = scipy.signal.fftconvolve(scaled, np.ones(5) / 5, mode='same')
        scaled = np.int16(scaled * 32767)
        scipy.io.wavfile.write(filename, 44100, scaled)