示例#1
0
def Segmentacao(SegmentosCaracteristicas,
                LocalizacoesCaracteristicas,
                caminhosdict,
                diA,
                tamanho=1):
    print(f'segmentacao caracteristicas: {SegmentosCaracteristicas}')
    nomes = tuple([f_d.caminho_nome(x, ['.p']) for x in caminhosdict])
    chavearquivo = (nomes, tuple(SegmentosCaracteristicas))
    try:
        segmentacoes = f_d.le_pickle(diA + '\\_segmentacoes_.p')
        sorecorrencias = segmentacoes[chavearquivo]
        print(f'resgatada do arquivo:')
        print('quantidade so recorrencias:')
        dadosseg(sorecorrencias)
        print()
        return sorecorrencias
    except FileNotFoundError:
        sorecorrencias = gerandotamanhos(SegmentosCaracteristicas,
                                         LocalizacoesCaracteristicas,
                                         caminhosdict, tamanho)
        segmentacoes = dict()
        segmentacoes.setdefault(chavearquivo, sorecorrencias)
        f_d.escreve_pickle(diA, segmentacoes, '_segmentacoes_', trunca=True)
        return sorecorrencias
    except KeyError:
        del (segmentacoes)
        sorecorrencias = gerandotamanhos(SegmentosCaracteristicas,
                                         LocalizacoesCaracteristicas,
                                         caminhosdict, tamanho)
        segmentacoes = f_d.le_pickle(diA + '\\_segmentacoes_.p')
        segmentacoes.setdefault(chavearquivo, sorecorrencias)
        f_d.escreve_pickle(diA, segmentacoes, '_segmentacoes_', trunca=True)
        return sorecorrencias
示例#2
0
def segdur_sodotamanho(caminhosdict, janela):
    aDicio = defaultdict(list)
    for caminho in caminhosdict:
        musD = f_d.le_pickle(caminho)
        nome = musD.pop('nome')
        print(f'analisando {nome}, ',
              caminhosdict.index(caminho) + 1, ' de ', len(caminhosdict))
        for parte in musD:
            for voz, caracteristicas in musD[parte].items():
                if 'intDia' in caracteristicas:
                    p1 = 0
                    while p1 + janela <= len(caracteristicas['intDia']):
                        p2 = p1 + janela
                        aDicio[(
                            tuple(caracteristicas['intDia'][p1:p2]),
                            tuple(caracteristicas['duracao'][p1:p2]))].append(
                                (nome, parte, voz, (p1, p2),
                                 (caracteristicas['Ncompasso'][p1],
                                  caracteristicas['Pcompasso'][p1]),
                                 (caracteristicas['Ncompasso'][p2 - 1],
                                  caracteristicas['Pcompasso'][p2 - 1])))
                        p1 += 1
    aDicio = sorted([(k, v) for k, v in aDicio.items() if len(v) > 1],
                    key=lambda x: (len(x[0][0]), len(x[1])),
                    reverse=True)
    return aDicio
示例#3
0
def segdur_maisdeumamusica(caminhosdict):
    aDiciopronto = []
    for caminho in caminhosdict:
        musD = f_d.le_pickle(caminho)
        nome = musD.pop('nome')
        print('analisando',
              caminhosdict.index(caminho) + 1, ' de ', len(caminhosdict))
        aDiciopronto = segdur_todasasrecorrenciaspormusica(
            musD, nome, aDiciopronto)
    aDiciopronto = [(k, v) for k, v in aDiciopronto if len(v) > 1]
    return aDiciopronto
示例#4
0
def gerandotamanhos(SegmentosCaracteristicas, LocalizacoesCaracteristicas,
                    caminhosdict, tamanho):
    start = time.perf_counter()
    SegmentosLocalizacoes = dict()
    while True:
        SegmentosDoTam = defaultdict(list)
        for caminho in caminhosdict:
            musD = f_d.le_pickle(caminho)
            nome = musD.pop('nome')
            for parte in musD:
                for voz, caracteristicas in musD[parte].items():
                    if 'intDia' in caracteristicas and len(
                            caracteristicas['intDia']) >= tamanho:
                        p1 = 0
                        while p1 + tamanho <= len(caracteristicas['intDia']):
                            p2 = p1 + tamanho

                            segmento = []
                            for caracteristica in SegmentosCaracteristicas:
                                if caracteristica[1] == 'p1':
                                    segmento.append(
                                        tuple(caracteristicas[
                                            caracteristica[0]][p1:p1 + 1]))
                                elif caracteristica[1] == 'p1p2':
                                    segmento.append(
                                        tuple(caracteristicas[
                                            caracteristica[0]][p1:p2]))
                                elif caracteristica[1] == 'p2':
                                    segmento.append(
                                        tuple(caracteristicas[
                                            caracteristica[0]][p2 - 1:p2]))
                                else:
                                    raise ValueError(
                                        'caracteristica deve ser p1, p1p2 ou p2'
                                    )
                            segmento = tuple(segmento)

                            localizacao = [nome, parte, voz, (p1, p2)]
                            for caracteristica in LocalizacoesCaracteristicas:
                                if caracteristica[1] == 'p1':
                                    localizacao.append(
                                        tuple(caracteristicas[
                                            caracteristica[0]][p1:p1 + 1]))
                                elif caracteristica[1] == 'p1p2':
                                    localizacao.append(
                                        tuple(caracteristicas[
                                            caracteristica[0]][p1:p2]))
                                elif caracteristica[1] == 'p2':
                                    localizacao.append(
                                        tuple(caracteristicas[
                                            caracteristica[0]][p2 - 1:p2]))
                                else:
                                    raise ValueError(
                                        'caracteristica deve ser p1, p1p2 ou p2'
                                    )
                            localizacao = tuple(localizacao)

                            SegmentosDoTam[segmento].append(localizacao)
                            p1 += 1
        tamanho += 1
        for localizacoes in SegmentosDoTam.values():
            if len(localizacoes) > 1:
                SegmentosLocalizacoes.update(SegmentosDoTam)
                break
        else:
            stop = time.perf_counter()
            print(f'gerados segmentos até tamanho: {tamanho-1} ')
            print('quantidade tudo:')
            dadosseg(SegmentosLocalizacoes)
            t = stop - start
            start = time.perf_counter()
            SegmentosLocalizacoes = [(c, v)
                                     for c, v in SegmentosLocalizacoes.items()
                                     if len(v) > 1]
            stop = time.perf_counter()
            t = t + stop - start
            print('quantidade so recorrencias:')
            dadosseg(SegmentosLocalizacoes)
            print(f'{t} segundos\n')
            return SegmentosLocalizacoes