Exemplo n.º 1
0
 def get_wav(self):
     assert self.donesynth
     waveform = Waveform()
     waveform.samples = np.zeros(LIBHTS.HTS_Engine_get_nsamples(
         self.engine), np.int16)  #16-bit samples
     waveform.samplerate = int(
         LIBHTS.HTS_Engine_get_sampling_frequency(self.engine))
     waveform.channels = 1
     for i in range(len(waveform.samples)):
         waveform.samples[i] = LIBHTS.HTS_Engine_get_generated_speech(
             self.engine, i)  #copy
     return waveform
Exemplo n.º 2
0
    def _concatunits(self, utt, args):
        """ Concatenates units and produces waveform via residual
            excited LPC synthesis filter...
        """

        unit_rel = utt.get_relation("Unit")
        #concat:
        unit_item = unit_rel.head_item
        lpctrack = copy.deepcopy(
            unit_item["selected_unit"]["candidate"]["lpc-coefs"])
        residuals = window_residual(
            unit_item["selected_unit"]["candidate"]["lpc-coefs"],
            unit_item["selected_unit"]["candidate"]["residuals"])
        unit_item = unit_item.next_item
        while unit_item is not None:
            temptrack = unit_item["selected_unit"]["candidate"]["lpc-coefs"]
            #append lpccoefs to lpctrack:
            lpctrack.times = np.concatenate(
                (lpctrack.times, (temptrack.times + lpctrack.times[-1])))
            lpctrack.values = np.concatenate(
                (lpctrack.values, temptrack.values))
            #append windowed residuals:
            residuals.extend(
                window_residual(
                    temptrack,
                    unit_item["selected_unit"]["candidate"]["residuals"]))
            unit_item = unit_item.next_item

        #overlap add residual:
        lastsample = int(round(lpctrack.times[-1] * SAMPLERATE)) + int(
            round(len(residuals[-1]) / 2))
        residual = np.zeros(lastsample + 1)

        for i, time in enumerate(lpctrack.times):
            centersample = int(round(time * SAMPLERATE))
            firstsample = centersample - int(len(residuals[i]) / 2)
            residual[firstsample:firstsample + len(residuals[i])] += np.array(
                residuals[i])

        #synth filter:
        samples = synth_filter(lpctrack.times, lpctrack.values,
                               residual.astype(np.float), SAMPLERATE)

        #save in utterance:
        w = Waveform()
        w.samplerate = SAMPLERATE
        w.samples = samples.astype("int16")  #16bit samples
        w.channels = 1
        utt["waveform"] = w
        return utt