Exemplo n.º 1
0
def get_words(file_path):
    """
    TODO DOCUMENTATION
    :param file_path:
    :return:
    """
    info_text = read_json(file_path)
    words = [
        k['text'].lower() for i in info_text for j in i['voices']
        for k in j['trans']
    ]
    return save_list(words, os.path.join(get_tmp_folder(), 'words.txt'))
Exemplo n.º 2
0
    def check_up(self):
        """
        TODO DOCUMENTATION
        :return:
        """
        check_audio_file(self.audio_path)
        self.audio_name = path.basename(self.audio_path).split('.')[0]
        audio_conv_path = convert_audio(
            self.audio_path, path.join(get_tmp_folder(), self.audio_name),
            self.output_samplerate, self.output_n_channels,
            self.output_bitdepth, get_working_format())

        self.raw_audio = audio_conv_path
Exemplo n.º 3
0
def generate_dic(words_path):
    destination_folder = os.path.join(get_tmp_folder(), 'words.dic')
    script = ['']
Exemplo n.º 4
0
def get_sentences(file_path):
    info_text = read_json(file_path)
    sentences = [[k['text'].lower() for k in j['trans']] for i in info_text
                 for j in i['voices']]
    return save_list(sentences, os.path.join(get_tmp_folder(),
                                             'sentences.txt'), 1)
Exemplo n.º 5
0
def noise_removal(origin_path, destination_path="", return_json=True):
    """
    TODO DOCUMENTATION
    :param return_json:
    :param origin_path:
    :param destination_path:
    :return:
    """
    gc.collect()
    if destination_path == "":
        destination_path = origin_path

    original_audio = AudioSegment.from_wav(origin_path)
    original_audio_splited = list(original_audio[::1])
    audio_chunks = []
    noise_chunks = []
    max_noise_duration = get_audio_config()['max_noise_duration']
    max_noise_level = get_audio_config()['max_noise_level']
    aux_noise = []
    for i, chunk in enumerate(original_audio_splited):
        data = (i, chunk)
        if chunk.dBFS > max_noise_level:
            if len(aux_noise) > max_noise_duration:
                noise_chunks += aux_noise
            else:
                audio_chunks += aux_noise
            aux_noise.clear()
            audio_chunks.append(data)
        else:  # SILENCE
            aux_noise.append(data)
        if len(noise_chunks) > 100000:
            break

    if len(aux_noise) > max_noise_duration:
        noise_chunks += aux_noise
    else:
        audio_chunks += aux_noise
    gc.collect()
    try:
        raw_noise = sum([*zip(*noise_chunks)][1], AudioSegment.empty())
    except IndexError:
        raw_noise = AudioSegment.empty()
    raw_noise_path = os.path.join(get_tmp_folder(), 'raw_noise.wav')
    raw_noise.export(raw_noise_path, format='wav')

    noise_reduction = sox.Transformer()
    noise_prof_path = os.path.join(get_tmp_folder(), 'noise.prof')
    noise_reduction.noiseprof(raw_noise_path, noise_prof_path)

    noise_remove = sox.Transformer()
    noise_tolerance = get_audio_config()['noise_tolerance']
    noise_remove.noisered(noise_prof_path, noise_tolerance)
    gc.collect()

    if destination_path == origin_path:
        destination_path_splited = os.path.splitext(destination_path)
        destination_path = destination_path_splited[0] + '_2' + destination_path_splited[1]
        noise_remove.build(origin_path, destination_path)
        os.remove(origin_path)
        os.rename(destination_path, origin_path)
    else:
        noise_remove.build(origin_path, destination_path)

    if return_json:
        from itertools import groupby, count
        audio_list = [(list(g)) for k, g in
                      groupby([*zip(*audio_chunks)][0], key=lambda i, j=count(): i - next(j))]
        return [(l[0], l[-1]) for l in audio_list]
Exemplo n.º 6
0
def mix_audio_trans(audio_info, trans):
    for i in audio_info:
        i['voices'] = get_text(trans, i['start_time'], i['end_time'])
    return save_json(audio_info, path.join(get_tmp_folder(), 'info.json'))