#algoritmo1
for i from 1 to 17
teste_diretorio=fileReadable ("/home/samuel/Documentos/curso_praat/basecurso/VGE'i'.wav")
if teste_diretorio=1
Read from file: "/home/samuel/Documentos/curso_praat/basecurso/VGE'i'.wav"
endif
endfor
#algoritmo2
#chooseFolder$ comando do praat para o usuários escolhar a pasta com os arquivos
pastaentrada$=chooseFolder$: "Escolha a pasta onde estão seus arquivos de voz"
#teste para verificar se o diretório tem "\" ou "/" que depende dos sistema operacional
if windows = 1
ultima_string=endsWith(pastaentrada$, "\")
else
ultima_string=endsWith(pastaentrada$, "/")
endif
#teste para acrescentar "\" ou "/" que depende dos sistema operacional
if ultima_string = 0
if windows = 1
pastaentrada$=pastaentrada$ + "\"
else
pastaentrada$=pastaentrada$ + "/"
endif
endif
#criando um objeto de lista de strings dos arquivos de áudio da pasta escolhida
lista_audio=Create Strings as file list: "lista_audio", pastaentrada$+"*.wav"
#seleciona objeto lista_audio
select lista_audio
#Quantidade de posições da lista
num_audio = Get number of strings
#laço p/ ler todos os audios de uma pasta
for cont_audio from 1 to num_audio
#seleciona o objeto audio
select lista_audio
#variavel recebe string referente a posição cont_audio
nome_audio$ = Get string: cont_audio
#ler aquivo de audio
audio = Read from file: pastaentrada$+nome_audio$
endfor
#Padronizar duração do áudio em 3 segundos e aplicar um filtro rejeita faixas
#chooseFolder$ comando do praat para o usuários escolhar a pasta com os arquivos
pastaentrada$=chooseFolder$: "Escolha a pasta onde estão seus arquivos de voz"
#teste para verificar se o diretório tem "\" ou "/" que depende dos sistema operacional
if windows = 1
ultima_string=endsWith(pastaentrada$, "\")
else
ultima_string=endsWith(pastaentrada$, "/")
endif
#teste para acrescentar "\" ou "/" que depende dos sistema operacional
if ultima_string = 0
if windows = 1
pastaentrada$=pastaentrada$ + "\"
else
pastaentrada$=pastaentrada$ + "/"
endif
endif
#chooseFolder$ comando do praat para o usuários escolhar a pasta em que as vozes padronizada serão salvas
pastasaida$=chooseFolder$: "Escolha a pasta para salvar seus arquivos de voz padronizado"
#teste para verificar se o diretório tem "\" ou "/" que depende dos sistema operacional
if windows = 1
ultima_string=endsWith(pastasaida$, "\")
else
ultima_string=endsWith(pastasaida$, "/")
endif
#teste para acrescentar "\" ou "/" que depende dos sistema operacional
if ultima_string = 0
if windows = 1
pastasaida$=pastasaida$ + "\"
else
pastasaida$=pastasaida$ + "/"
endif
endif
#teste para informar que as pastas devem ser diferentes para não sobrescrever o arquivo original
if pastaentrada$ = pastasaida$
exitScript: "ERRO: Diretório igual ao arquivo original"
endif
#lista de strings
lista_audio=Create Strings as file list: "lista_audio", pastaentrada$+"*.wav"
#seleciona objeto lista_audio
select lista_audio
#Quantidade de posições da lista
num_audio = Get number of strings
#laço p/ ler, padronizar e aplicar filtro rejeita faixa p/ todos os audios de uma pasta
for cont_audio from 1 to num_audio
#selecionando a lista
select lista_audio
#variavel recebe string referente a posição cont_audio
nome_audio$ = Get string: cont_audio
#abrir aquivo de audio
audio = Read from file: pastaentrada$+nome_audio$
#selecionando áudio
select audio
#variável p/ amrzenar a duração total do áudio
total=Get total duration
#teste p/ padronizar
if total > 3
#chamando o procedimento padronizar
@padronizar: total
endif
#selecionando e Removendo o objeto áudio
select audio
Remove
endfor
#Selecionando e removendo o objeto lista
select lista_audio
Remove
procedure padronizar: .total
#variável que armazenar o valor central da duração do áudio
.meio=.total/2
#duração do novo áudio
.trecho=3
#Metade da duração do novo áudio
.trecho_metade=.trecho/2
#início do novo áudio
.novo_inicio=.meio-.trecho_metade
#fim do novo áudio
.novo_fim=.meio+.trecho_metade
#extraindo o áudio com tamanho padronizado
.audio_novo = Extract part: .novo_inicio, .novo_fim, "rectangular", 1, "no"
#selecionando o objeto .audio_novo
select .audio_novo
#chamando o procedimento para filtrar o sinal de voz
@rejeitafaixa
#Selecionando e removendo o objeto .audio_novo
select .audio_novo
Remove
endproc
#procedimento criado para aplicar um filtro rejeita faixa entre 0 até 63 Hz
procedure rejeitafaixa
#variável que recebe o áudio após aplicado o filtro rejeita faixa
.audio_novo_filtro=Filter (stop Hann band): 0, 63, 0.1
#selecionando o áudio padronizado e após aplicação do filtro
select .audio_novo_filtro
#Salvando o áudio padronizado e após aplicação do filtro
Save as WAV file: pastasaida$ + nome_audio$
#selecionando e removendo o objeto .audio_novo_filtro
select .audio_novo_filtro
Remove
endproc
#Salvar arquivo como diretorio.praat
pastaentrada$=chooseFolder$: "Escolha a pasta onde estão seus arquivos de voz"
if windows = 1
ultima_string=endsWith(pastaentrada$, "\")
else
ultima_string=endsWith(pastaentrada$, "/")
endif
if ultima_string = 0
if windows = 1
pastaentrada$=pastaentrada$ + "\"
else
pastaentrada$=pastaentrada$ + "/"
endif
endif
pastasaida$=chooseFolder$: "Escolha a pasta para salvar o relatatório acústico"
if windows = 1
ultima_string=endsWith(pastasaida$, "\")
else
ultima_string=endsWith(pastasaida$, "/")
endif
if ultima_string = 0
if windows = 1
pastasaida$=pastasaida$ + "\"
else
pastasaida$=pastasaida$ + "/"
endif
endif
include diretorio.praat
lista_audio=Create Strings as file list: "lista_audio", pastaentrada$+"*.wav"
#seleciona objeto lista_audio
select lista_audio
#Quantidade de strings(audios)
num_audio = Get number of strings
f0_tabela_columns$ = "Indice Mediaf0 DPf0 CVf0 Medianaf0 1ªquartil 3ªquartil Maxf0 Minf0 Amplitude ProporcaoMinMAxf0"
f0_tabela = Create Table with column names: "f0_tabela", 0, f0_tabela_columns$
for cont_audio from 1 to num_audio
select lista_audio
#variavel recebe string referente a posição cont_audio
nome_audio$ = Get string: cont_audio
#abrir aquivo de audio
audio = Read from file: pastaentrada$+nome_audio$
piso=75
teto=600
select audio
@medidasf0: piso, teto
@tabmedidasf0
select audio
Remove
endfor
select f0_tabela
Save as comma-separated file: pastasaida$ + "f0.csv"
select f0_tabela
plus lista_audio
Remove
procedure medidasf0: .piso, .teto
.f0lista=To Pitch (cc): 0, .piso, 15, "no", 0.03, 0.45, 0.01, 0.35, 0.14, .teto
select .f0lista
.min=Get minimum: 0, 0, "Hertz", "parabolic"
.max=Get maximum: 0, 0, "Hertz", "parabolic"
.mediana=Get quantile: 0, 0, 0.5, "Hertz"
.media=Get mean: 0, 0, "Hertz"
.dp=Get standard deviation: 0, 0, "Hertz"
.q1=Get quantile: 0, 0, 0.25, "Hertz"
.q3=Get quantile: 0, 0, 0.75, "Hertz"
.cv=(.dp/.media)*100
.amplitude=.max-.min
.propminmax=.min/.max
select .f0lista
Remove
endproc
procedure tabmedidasf0
select f0_tabela
Append row
.r = Get number of rows
Set string value: .r,"Indice", nome_audio$
Set numeric value: .r, "Mediaf0", medidasf0.media
Set numeric value: .r, "DPf0", medidasf0.dp
Set numeric value: .r, "CVf0", medidasf0.cv
Set numeric value: .r, "Medianaf0", medidasf0.mediana
Set numeric value: .r, "1ªquartil", medidasf0.q1
Set numeric value: .r, "3ªquartil", medidasf0.q3
Set numeric value: .r, "Maxf0", medidasf0.max
Set numeric value: .r, "Minf0", medidasf0.min
Set numeric value: .r, "Amplitude", medidasf0.amplitude
Set numeric value: .r, "ProporcaoMinMAxf0", medidasf0.propminmax
endproc
#Início da implementação do relatório acústico
#chamando o script diretorio.praat
include diretorio.praat
#Criando lista de strings com o caminho especificado pelo usuário
lista_audio=Create Strings as file list: "lista_audio", pastaentrada$+"*.wav"
#seleciona objeto lista_audio
select lista_audio
#quantidade de arquivos de audio
num_audio = Get number of strings
#Criando os nomes dos atributos das medidas que serão alocadas na tabela
tabela_medidas_columns$ = "Indice f0CPP Mediaf0 DPf0 CVf0 Medianaf0 1ªquartil 3ªquartil Maxf0 Minf0 Amplitude ProporcaoMinMAxf0"
# Criando tabela e colocando os nomes dos atributos
tabela_medidas = Create Table with column names: "tabela_medidas", 0, tabela_medidas_columns$
#Início da estrutura de repetição
for cont_audio from 1 to num_audio
#selecionando a lista de áudio
select lista_audio
#variável recebe string referente a posição cont_audio
nome_audio$ = Get string: cont_audio
#ler aquivo de áudio
audio = Read from file: pastaentrada$+nome_audio$
#argumentos para serem preenchidos de f0
piso=75
teto=600
oitava=0.01
saltooitava=0.35
#chamando o procedimento medidasf0
@medidasf0: piso, oitava, saltooitava,teto
#chamando o procedimento f0cpp
@f0cpp
#Teste para atualizar argumentos de f0 e a rerência é f0cpp
#Primeira condição verifica o min e max de f0 e os compara com o valor de f0cpp
if (medidasf0.min < (0.65*f0cpp.f0)) or (medidasf0.max > (1.65*f0cpp.f0))
#atualizando argumentos custo de oitava e salto de oitava
oitava=0.04
saltooitava=0.5
#chamando o procedimento medidasf0
@medidasf0: piso, oitava, saltooitava, teto
endif
#realizado o teste com as mesmas condições novamente
#o objetivo é atualizar valores de referência de frequência inferior e superior
#caso o teste anterior não tenha sido eficiente
if (medidasf0.min < (0.65*f0cpp.f0)) or (medidasf0.max > (1.65*f0cpp.f0))
#atualizando argumentos de limites inferior e superior de f0, custo de oitava e salto de oitava
piso=0.6 * f0cpp.f0
teto=1.4 * f0cpp.f0
oitava=0.04
saltooitava=0.5
#chamando o procedimento medidasf0
@medidasf0: piso, oitava, saltooitava, teto
endif
#chamando o procedimento oscilograma
@oscilograma
#chamando o procedimento contornof0
@contornof0
#chamando o procedimento imprimirmedidas
@imprimirmedidas
#chamando o procedimento tabmedidasf0
@tabmedidasf0
#selecionado e removendo o objeto áudio
select audio
Remove
#fim da estrutura for
endfor
#selecionado a tabela com os valores das medidas
select tabela_medidas
#salvando essa tabela em uma planhilha .csv
Save as comma-separated file: pastasaida$ + "medidas.csv"
#Selecionando a tabela com as medidas
select tabela_medidas
#adicionando na seleção a lista das strings
plus lista_audio
plus medidasf0.f0lista
# removendo os objetos selecionados
Remove
#procedimento para extrair f0 e suas medidas
procedure medidasf0: .piso, .oitava, .saltooitava, .teto
if variableExists(".f0lista")
select .f0lista
Remove
endif
select audio
#armazenando na variável .f0lista os valores de f0
.f0lista=To Pitch (cc): 0, .piso, 15, "no", 0.03, 0.45, .oitava, .saltooitava, 0.14, .teto
#selecionando o objeto .f0lista
select .f0lista
#valor mínimo de f0
.min=Get minimum: 0, 0, "Hertz", "parabolic"
#valor máximo de f0
.max=Get maximum: 0, 0, "Hertz", "parabolic"
#valor da mediana de f0
.mediana=Get quantile: 0, 0, 0.5, "Hertz"
#valor da média de f0
.media=Get mean: 0, 0, "Hertz"
#valor do desvio padrão de f0
.dp=Get standard deviation: 0, 0, "Hertz"
#valor do 1ª quartil de f0
.q1=Get quantile: 0, 0, 0.25, "Hertz"
#valor do 3ª quartil de f0
.q3=Get quantile: 0, 0, 0.75, "Hertz"
#cálculo do coeficiente de variação de f0
.cv=(.dp/.media)*100
#cálculo da amplitude de f0
.amplitude=.max-.min
#relação de proporção en o mínino e o máximo de f0
.propminmax=.min/.max
endproc
#procedimento para calcular f0 com o cpp
procedure f0cpp
#selecionando o objeto áudio
select audio
#variável que armazena o objeto cepstrograma
.cepstrograma =noprogress To PowerCepstrogram: 60, 0.002, 5000, 50
#selecionando o objeto cepstrograma
select .cepstrograma
#variável que armazana o objeto cepstro
.cepstrogramamarginal=To PowerCepstrum (slice): 0.1
#selecionando o objeto cepstro
select .cepstrogramamarginal
#extraindo a quefrency
.quefrency=Get quefrency of peak: 60, 333.3, "parabolic"
#calculando f0 do cpp
.f0=1/.quefrency
#Selecionando e removendo os objetos cepstrograma e cepstrogramamarginal
select .cepstrograma
plus .cepstrogramamarginal
Remove
endproc
#procedimento para desenhar o oscilograma
procedure oscilograma
#seleciona o objeto áudio
select audio
#duração total do áudio
.duracaotot = Get total duration
#valor mínimo da amplitude do áudio
.amplitudemin = Get minimum: 0, 0, "sinc70"
#valor máximo da amplitude do áudio
.amplitudemax = Get maximum: 0, 0, "sinc70"
#apagando tudo da janela Praat Picture
Erase all
#selecionado o tipo de linha
Solid line
#Largura da linha
Line width: 1
#selecionando cor
Black
#selecionando fonte
Helvetica
#selecionando área da janela Praat Picture
Select inner viewport: 1, 5.5, 0.5, 1
#tamanho da fonte
Font size: 12
#selecioando eixos
Axes: 1.5, 5.5, 0.5, 0.8
#texto que será impresso com seus parâmetros
Text: 2.7, "Left", 0.5, "Half", "##Relatório acústico do arquivo de voz 'nome_audio$'"
#tamanho da fonte
Font size: 8
#selecionando área da janela Praat Picture
Select inner viewport... 1 7.5 1.1 2.1
#seleção do objeto áudio
select audio
#desenhado o objeto áudio
Draw: 0, 0, 0, 0, "no", "Curve"
#desenha uma caixa (retângulo) no contorno da figura
Draw inner box
#Os comandos abaixo são para escrever os parâmetros referentes aos eixos vertical e horizontal do oscilograma
One mark left: .amplitudemin, "no", "yes", "no", "'.amplitudemin:2'"
One mark left: .amplitudemax, "no", "yes", "no", "'.amplitudemax:2'"
Text left: "no", "Amplitude (Pa)"
One mark bottom: 0, "no", "yes", "no", "0.00"
One mark bottom: .duracaotot, "no", "yes", "no", "'.duracaotot:2'"
Text bottom: "no", "Tempo (s)"
endproc
#procedimento para desenhar o contorno de f0 no tempo
procedure contornof0
#tamanho da fonte
Font size: 8
#selecionando área da janela Praat Picture
Select inner viewport: 1, 7.5, 2.5, 3.5
#seleção do objeto com os valores de f0
select medidasf0.f0lista
#Cor do contorno
Colour: "red"
#desenhando o contorno
Draw: 0, 0, 0, 500, "no"
#desenha uma caixa (retângulo) no contorno da figura
Draw inner box
#Os comandos abaixo são para escrever os parâmetros referentes aos eixos vertical e horizontal do contorno de f0
One mark left: 0, "no", "yes", "no", "0"
One mark left: 100, "no", "yes", "no", "100"
One mark left: 200, "no", "yes", "no", "200"
One mark left: 300, "no", "yes", "no", "300"
One mark left: 400, "no", "yes", "no", "400"
One mark left: 500, "no", "yes", "no", "500"
Colour: "black"
Text right: "no", "f0 (Hz)"
One mark bottom: 0, "no", "yes", "no", "0.00"
One mark bottom: oscilograma.duracaotot, "no", "yes", "no", "'oscilograma.duracaotot:2'"
Text bottom: "no", "Tempo (s)"
endproc
#procedimento para imprimir as medidas no Praat Picture
procedure imprimirmedidas
#tamanho da fonte
Font size: 8
#selecioando uma área no Praat Picture
Select inner viewport: 1, 7.5, 9.2, 11.1
#selecionando os eixos
Axes: 1, 7.7, 9.2, 0
#comandos abaixo são as medidas que serão impressas no Praat Picture
Text: 1.1, "Left", 0.5, "Half", "f0 CPP: ##'f0cpp.f0:2' Hz#"
Text: 1.1, "Left", 1.5, "Half", "Média f0: ##'medidasf0.media:2' Hz#"
Text: 1.1, "Left", 2.5, "Half", "Desvio padrão f0: ##'medidasf0.dp:2' Hz#"
Text: 1.1, "Left", 3.5, "Half", "Coeficiente de variação f0: ##'medidasf0.cv:2'\% #"
Text: 1.1, "Left", 4.5, "Half", "1ª quartil f0: ##'medidasf0.q1:2' Hz#"
Text: 1.1, "Left", 5.5, "Half", "Mediana f0: ##'medidasf0.mediana:2' Hz#"
Text: 1.1, "Left", 6.5, "Half", "3ª quartil f0: ##'medidasf0.q3:2' Hz#"
Text: 1.1, "Left", 7.5, "Half", "Mínimo f0: ##'medidasf0.min:2' Hz#"
Text: 1.1, "Left", 8.5, "Half", "Máximo f0: ##'medidasf0.max:2' Hz#"
Text: 3.1, "Left", 0.5, "Half", "Amplitude f0: ##'medidasf0.amplitude:2' Hz#"
#selecioando uma área no Praat Picture
Select inner viewport: 1, 7.5, 9.2, 11.1
#desenha uma caixa (retângulo) no contorno da área selecionada
Draw inner box
#selecioando uma área do tamanho de um folha A4 no Praat Picture
Select inner viewport: 0, 8.26, 0, 11.69
#criando variável e retirando a string ".wav"
.nome$=nome_audio$ - ".wav"
#salvar imagem do Praat Picture em PDF
#Save as PDF file: pastasaida$ + .nome$ + ".pdf"
#salvar imagem do Praat Picture em PNG com 600 dpi
#Save as 600-dpi PNG file: pastasaida$ + .nome$ +".png"
#salvar imagem do Praat Picture em PNG com 300 dpi
Save as 300-dpi PNG file: pastasaida$ + .nome$ +".png"
endproc
#procedimento p/ inserir os valores das medidas na tabela
procedure tabmedidasf0
#selecionando tabela
select tabela_medidas
#Comando p/ acrescentar linha
Append row
#variável que recebe o número da linha
.r = Get number of rows
# Comandos p/ preencher tabela com strings e valores das medidas
Set string value: .r,"Indice", nome_audio$-".wav"
Set numeric value: .r, "f0CPP", f0cpp.f0
Set numeric value: .r, "Mediaf0", medidasf0.media
Set numeric value: .r, "DPf0", medidasf0.dp
Set numeric value: .r, "CVf0", medidasf0.cv
Set numeric value: .r, "Medianaf0", medidasf0.mediana
Set numeric value: .r, "1ªquartil", medidasf0.q1
Set numeric value: .r, "3ªquartil", medidasf0.q3
Set numeric value: .r, "Maxf0", medidasf0.max
Set numeric value: .r, "Minf0", medidasf0.min
Set numeric value: .r, "Amplitude", medidasf0.amplitude
Set numeric value: .r, "ProporcaoMinMAxf0", medidasf0.propminmax
endproc
include diretorio.praat
lista_audio=Create Strings as file list: "lista_audio", pastaentrada$+"*.wav"
#seleciona objeto lista_audio
select lista_audio
#Quantidade de strings(audios)
num_audio = Get number of strings
jitter_tabela_columns$ = "Indice jitter_local RAP PPQ5"
jitter_tabela = Create Table with column names: "jitter_tabela", 0, jitter_tabela_columns$
for cont_audio from 1 to num_audio
select lista_audio
#variavel recebe string referente a posição cont_audio
nome_audio$ = Get string: cont_audio
#abrir aquivo de audio
audio = Read from file: pastaentrada$+nome_audio$
piso=75
teto=600
select audio
@medidasjitter: piso, teto
@tabmedidasjitter
select audio
plus medidasjitter.f0lista
plus medidasjitter.pontos
Remove
endfor
select jitter_tabela
Save as comma-separated file: pastasaida$ + "jitter.csv"
select jitter_tabela
plus lista_audio
Remove
procedure medidasjitter: .piso, .teto
select audio
.f0lista=To Pitch (cc): 0, .piso, 15, "no", 0.03, 0.45, 0.01, 0.35, 0.14, .teto
select audio
plus .f0lista
.pontos=noprogress To PointProcess (cc)
select .pontos
.jitter_loc=Get jitter (local): 0, 0, 0.0001, 0.02, 1.3
.jitter_loc_perc=.jitter_loc*100
.jitter_rap=Get jitter (rap): 0, 0, 0.0001, 0.02, 1.3
.jitter_rap_perc=.jitter_rap*100
.jitter_ppq5=Get jitter (ppq5): 0, 0, 0.0001, 0.02, 1.3
.jitter_ppq5_perc=.jitter_ppq5*100
endproc
procedure tabmedidasjitter
select jitter_tabela
Append row
.r = Get number of rows
Set string value: .r,"Indice", nome_audio$
Set numeric value: .r, "jitter_local", medidasjitter.jitter_loc_perc
Set numeric value: .r, "RAP", medidasjitter.jitter_rap_perc
Set numeric value: .r, "PPQ5", medidasjitter.jitter_ppq5_perc
endproc
#incrementando o relatório com as medidas de jitter
#chamando o script diretorio.praat
include diretorio.praat
#Criando lista de strings com o caminho especificado pelo usuário
lista_audio=Create Strings as file list: "lista_audio", pastaentrada$+"*.wav"
#seleciona objeto lista_audio
select lista_audio
#quantidade de arquivos de audio
num_audio = Get number of strings
#Criando os nomes dos atributos das medidas que serão alocadas na tabela
tabela_medidas_columns$ = "Indice f0CPP Mediaf0 DPf0 CVf0 Medianaf0 1ªquartil 3ªquartil Maxf0 Minf0 Amplitude
... ProporcaoMinMAxf0 jitter_local RAP PPQ5"
# Criando tabela e colocando os nomes dos atributos
tabela_medidas = Create Table with column names: "tabela_medidas", 0, tabela_medidas_columns$
#Início da estrutura de repetição
for cont_audio from 1 to num_audio
#selecionando a lista de áudio
select lista_audio
#variável recebe string referente a posição cont_audio
nome_audio$ = Get string: cont_audio
#ler aquivo de áudio
audio = Read from file: pastaentrada$+nome_audio$
#argumentos para serem preenchidos de f0
piso=75
teto=600
oitava=0.01
saltooitava=0.35
#chamando o procedimento medidasf0
@medidasf0: piso, oitava, saltooitava,teto
#chamando o procedimento f0cpp
@f0cpp
#Teste para atualizar argumentos de f0 e a rerência é f0cpp
#Primeira condição verifica o min e max de f0 e os compara com o valor de f0cpp
if (medidasf0.min < (0.65*f0cpp.f0)) or (medidasf0.max > (1.65*f0cpp.f0))
#atualizando argumentos custo de oitava e salto de oitava
oitava=0.04
saltooitava=0.5
#chamando o procedimento medidasf0
@medidasf0: piso, oitava, saltooitava, teto
endif
#realizado o teste com as mesmas condições novamente
#o objetivo é atualizar valores de referência de frequência inferior e superior
#caso o teste anterior não tenha sido eficiente
if (medidasf0.min < (0.65*f0cpp.f0)) or (medidasf0.max > (1.65*f0cpp.f0))
#atualizando argumentos de limites inferior e superior de f0, custo de oitava e salto de oitava
piso=0.6 * f0cpp.f0
teto=1.4 * f0cpp.f0
oitava=0.04
saltooitava=0.5
#chamando o procedimento medidasf0
@medidasf0: piso, oitava, saltooitava, teto
endif
#chamando o procedimento medidasjitter
@medidasjitter
#chamando o procedimento oscilograma
@oscilograma
#chamando o procedimento contornof0
@contornof0
#chamando o procedimento imprimirmedidas
@imprimirmedidas
#chamando o procedimento tabmedidasf0
@tabmedidasf0
#selecionado e removendo o objeto áudio
select audio
Remove
#fim da estrutura for
endfor
#selecionado a tabela com os valores das medidas
select tabela_medidas
#salvando essa tabela em uma planhilha .csv
Save as comma-separated file: pastasaida$ + "medidas.csv"
#Selecionando a tabela com as medidas
select tabela_medidas
#adicionando na seleção a lista das strings
plus lista_audio
plus medidasf0.f0lista
plus medidasjitter.pontos
# removendo os objetos selecionados
Remove
#procedimento para extrair f0 e suas medidas
procedure medidasf0: .piso, .oitava, .saltooitava, .teto
if variableExists(".f0lista")
select .f0lista
Remove
endif
select audio
#armazenando na variável .f0lista os valores de f0
.f0lista=To Pitch (cc): 0, .piso, 15, "no", 0.03, 0.45, .oitava, .saltooitava, 0.14, .teto
#selecionando o objeto .f0lista
select .f0lista
#valor mínimo de f0
.min=Get minimum: 0, 0, "Hertz", "parabolic"
#valor máximo de f0
.max=Get maximum: 0, 0, "Hertz", "parabolic"
#valor da mediana de f0
.mediana=Get quantile: 0, 0, 0.5, "Hertz"
#valor da média de f0
.media=Get mean: 0, 0, "Hertz"
#valor do desvio padrão de f0
.dp=Get standard deviation: 0, 0, "Hertz"
#valor do 1ª quartil de f0
.q1=Get quantile: 0, 0, 0.25, "Hertz"
#valor do 3ª quartil de f0
.q3=Get quantile: 0, 0, 0.75, "Hertz"
#cálculo do coeficiente de variação de f0
.cv=(.dp/.media)*100
#cálculo da amplitude de f0
.amplitude=.max-.min
#relação de proporção en o mínino e o máximo de f0
.propminmax=.min/.max
endproc
#procedimento para calcular f0 com o cpp
procedure f0cpp
#selecionando o objeto áudio
select audio
#variável que armazena o objeto cepstrograma
.cepstrograma =noprogress To PowerCepstrogram: 60, 0.002, 5000, 50
#selecionando o objeto cepstrograma
select .cepstrograma
#variável que armazana o objeto cepstro
.cepstrogramamarginal=To PowerCepstrum (slice): 0.1
#selecionando o objeto cepstro
select .cepstrogramamarginal
#extraindo a quefrency
.quefrency=Get quefrency of peak: 60, 333.3, "parabolic"
#calculando f0 do cpp
.f0=round(1/.quefrency)
#Selecionando e removendo os objetos cepstrograma e cepstrogramamarginal
select .cepstrograma
plus .cepstrogramamarginal
Remove
endproc
procedure medidasjitter
if variableExists(".pontos")
select .pontos
Remove
endif
select audio
plus medidasf0.f0lista
.pontos=noprogress To PointProcess (cc)
select .pontos
.jitter_loc=Get jitter (local): 0, 0, 0.0001, 0.02, 1.3
.jitter_loc_perc=.jitter_loc*100
.jitter_rap=Get jitter (rap): 0, 0, 0.0001, 0.02, 1.3
.jitter_rap_perc=.jitter_rap*100
.jitter_ppq5=Get jitter (ppq5): 0, 0, 0.0001, 0.02, 1.3
.jitter_ppq5_perc=.jitter_ppq5*100
endproc
#procedimento para desenhar o oscilograma
procedure oscilograma
#seleciona o objeto áudio
select audio
#duração total do áudio
.duracaotot = Get total duration
#valor mínimo da amplitude do áudio
.amplitudemin = Get minimum: 0, 0, "sinc70"
#valor máximo da amplitude do áudio
.amplitudemax = Get maximum: 0, 0, "sinc70"
#apagando tudo da janela Praat Picture
Erase all
#selecionado o tipo de linha
Solid line
#Largura da linha
Line width: 1
#selecionando cor
Black
#selecionando fonte
Helvetica
#selecionando área da janela Praat Picture
Select inner viewport: 1, 5.5, 0.5, 1
#tamanho da fonte
Font size: 12
#selecioando eixos
Axes: 1.5, 5.5, 0.5, 0.8
#texto que será impresso com seus parâmetros
Text: 2.7, "Left", 0.5, "Half", "##Relatório acústico do arquivo de voz 'nome_audio$'"
#tamanho da fonte
Font size: 8
#selecionando área da janela Praat Picture
Select inner viewport... 1 7.5 1.1 2.1
#seleção do objeto áudio
select audio
#desenhado o objeto áudio
Draw: 0, 0, 0, 0, "no", "Curve"
#desenha uma caixa (retângulo) no contorno da figura
Draw inner box
#Os comandos abaixo são para escrever os parâmetros referentes aos eixos vertical e horizontal do oscilograma
One mark left: .amplitudemin, "no", "yes", "no", "'.amplitudemin:2'"
One mark left: .amplitudemax, "no", "yes", "no", "'.amplitudemax:2'"
Text left: "no", "Amplitude (Pa)"
One mark bottom: 0, "no", "yes", "no", "0.00"
One mark bottom: .duracaotot, "no", "yes", "no", "'.duracaotot:2'"
Text bottom: "no", "Tempo (s)"
endproc
#procedimento para desenhar o contorno de f0 no tempo
procedure contornof0
#tamanho da fonte
Font size: 8
#selecionando área da janela Praat Picture
Select inner viewport: 1, 7.5, 2.5, 3.5
#seleção do objeto com os valores de f0
select medidasf0.f0lista
#Cor do contorno
Colour: "red"
#desenhando o contorno
Draw: 0, 0, 0, 500, "no"
#desenha uma caixa (retângulo) no contorno da figura
Draw inner box
#Os comandos abaixo são para escrever os parâmetros referentes aos eixos vertical e horizontal do contorno de f0
One mark left: 0, "no", "yes", "no", "0"
One mark left: 100, "no", "yes", "no", "100"
One mark left: 200, "no", "yes", "no", "200"
One mark left: 300, "no", "yes", "no", "300"
One mark left: 400, "no", "yes", "no", "400"
One mark left: 500, "no", "yes", "no", "500"
Colour: "black"
Text right: "no", "f0 (Hz)"
One mark bottom: 0, "no", "yes", "no", "0.00"
One mark bottom: oscilograma.duracaotot, "no", "yes", "no", "'oscilograma.duracaotot:2'"
Text bottom: "no", "Tempo (s)"
endproc
#procedimento para imprimir as medidas no Praat Picture
procedure imprimirmedidas
#tamanho da fonte
Font size: 8
#selecioando uma área no Praat Picture
Select inner viewport: 1, 7.5, 9.2, 11.1
#selecionando os eixos
Axes: 1, 7.7, 9.2, 0
#comandos abaixo são as medidas que serão impressas no Praat Picture
Text: 1.1, "Left", 0.5, "Half", "f0 CPP: ##'f0cpp.f0:2' Hz#"
Text: 1.1, "Left", 1.5, "Half", "Média f0: ##'medidasf0.media:2' Hz#"
Text: 1.1, "Left", 2.5, "Half", "Desvio padrão f0: ##'medidasf0.dp:2' Hz#"
Text: 1.1, "Left", 3.5, "Half", "Coeficiente de variação f0: ##'medidasf0.cv:2'\% #"
Text: 1.1, "Left", 4.5, "Half", "1ª quartil f0: ##'medidasf0.q1:2' Hz#"
Text: 1.1, "Left", 5.5, "Half", "Mediana f0: ##'medidasf0.mediana:2' Hz#"
Text: 1.1, "Left", 6.5, "Half", "3ª quartil f0: ##'medidasf0.q3:2' Hz#"
Text: 1.1, "Left", 7.5, "Half", "Mínimo f0: ##'medidasf0.min:2' Hz#"
Text: 1.1, "Left", 8.5, "Half", "Máximo f0: ##'medidasf0.max:2' Hz#"
Text: 3.1, "Left", 0.5, "Half", "Amplitude f0: ##'medidasf0.amplitude:2' Hz#"
Text: 3.1, "Left", 1.5, "Half", "Jitter (local): ##'medidasjitter.jitter_loc_perc:2'\% #"
Text: 3.1, "Left", 2.5, "Half", "Jitter (RAP): ##'medidasjitter.jitter_rap_perc:2'\% #"
Text: 3.1, "Left", 3.5, "Half", "Jitter (PPQ5): ##'medidasjitter.jitter_ppq5_perc:2'\% #"
#selecioando uma área no Praat Picture
Select inner viewport: 1, 7.5, 9.2, 11.1
#desenha uma caixa (retângulo) no contorno da área selecionada
Draw inner box
#selecioando uma área do tamanho de um folha A4 no Praat Picture
Select inner viewport: 0, 8.26, 0, 11.69
#criando variável e retirando a string ".wav"
.nome$=nome_audio$ - ".wav"
#salvar imagem do Praat Picture em PDF
#Save as PDF file: pastasaida$ + .nome$ + ".pdf"
#salvar imagem do Praat Picture em PNG com 600 dpi
#Save as 600-dpi PNG file: pastasaida$ + .nome$ +".png"
#salvar imagem do Praat Picture em PNG com 300 dpi
Save as 300-dpi PNG file: pastasaida$ + .nome$ +".png"
endproc
#procedimento p/ inserir os valores das medidas na tabela
procedure tabmedidasf0
#selecionando tabela
select tabela_medidas
#Comando p/ acrescentar linha
Append row
#variável que recebe o número da linha
.r = Get number of rows
# Comandos p/ preencher tabela com strings e valores das medidas
Set string value: .r,"Indice", nome_audio$-".wav"
Set numeric value: .r, "f0CPP", f0cpp.f0
Set numeric value: .r, "Mediaf0", medidasf0.media
Set numeric value: .r, "DPf0", medidasf0.dp
Set numeric value: .r, "CVf0", medidasf0.cv
Set numeric value: .r, "Medianaf0", medidasf0.mediana
Set numeric value: .r, "1ªquartil", medidasf0.q1
Set numeric value: .r, "3ªquartil", medidasf0.q3
Set numeric value: .r, "Maxf0", medidasf0.max
Set numeric value: .r, "Minf0", medidasf0.min
Set numeric value: .r, "Amplitude", medidasf0.amplitude
Set numeric value: .r, "ProporcaoMinMAxf0", medidasf0.propminmax
Set numeric value: .r, "jitter_local", medidasjitter.jitter_loc_perc
Set numeric value: .r, "RAP", medidasjitter.jitter_rap_perc
Set numeric value: .r, "PPQ5", medidasjitter.jitter_ppq5_perc
endproc
include diretorio.praat
lista_audio=Create Strings as file list: "lista_audio", pastaentrada$+"*.wav"
#seleciona objeto lista_audio
select lista_audio
#Quantidade de strings(audios)
num_audio = Get number of strings
shimmer_tabela_columns$ = "Indice shimmer_local shimmer_dB APQ3 APQ5 APQ11"
shimmer_tabela = Create Table with column names: "shimmer_tabela", 0, shimmer_tabela_columns$
for cont_audio from 1 to num_audio
select lista_audio
#variavel recebe string referente a posição cont_audio
nome_audio$ = Get string: cont_audio
#abrir aquivo de audio
audio = Read from file: pastaentrada$+nome_audio$
piso=75
teto=600
select audio
@medidasshimmer: piso, teto
@tabmedidasshimmer
select audio
plus medidasshimmer.f0lista
plus medidasshimmer.pontos
Remove
endfor
select shimmer_tabela
Save as comma-separated file: pastasaida$ + "shimmer.csv"
select shimmer_tabela
plus lista_audio
Remove
procedure medidasshimmer: .piso, .teto
select audio
.f0lista=To Pitch (cc): 0, .piso, 15, "no", 0.03, 0.45, 0.01, 0.35, 0.14, .teto
select audio
plus .f0lista
.pontos=noprogress To PointProcess (cc)
select audio
plus .pontos
.shimmer_loc=Get shimmer (local): 0, 0, 0.0001, 0.02, 1.3, 1.6
.shimmer_loc_perc=.shimmer_loc*100
.shimmer_db=Get shimmer (local_dB): 0, 0, 0.0001, 0.02, 1.3, 1.6
.shimmer_apq3=Get shimmer (apq3): 0, 0, 0.0001, 0.02, 1.3, 1.6
.shimmer_apq3_perc=.shimmer_apq3*100
.shimmer_apq5=Get shimmer (apq5): 0, 0, 0.0001, 0.02, 1.3, 1.6
.shimmer_apq5_perc=.shimmer_apq5*100
.shimmer_apq11=Get shimmer (apq11): 0, 0, 0.0001, 0.02, 1.3, 1.6
.shimmer_apq11_perc=.shimmer_apq11*100
endproc
procedure tabmedidasshimmer
select shimmer_tabela
Append row
.r = Get number of rows
Set string value: .r,"Indice", nome_audio$
Set numeric value: .r, "shimmer_local", medidasshimmer.shimmer_loc_perc
Set numeric value: .r, "shimmer_dB", medidasshimmer.shimmer_db
Set numeric value: .r, "APQ3", medidasshimmer.shimmer_apq3_perc
Set numeric value: .r, "APQ5", medidasshimmer.shimmer_apq5_perc
Set numeric value: .r, "APQ11", medidasshimmer.shimmer_apq11_perc
endproc
#incrementando o relatório com as medidas de shimmer
#chamando o script diretorio.praat
include diretorio.praat
#Criando lista de strings com o caminho especificado pelo usuário
lista_audio=Create Strings as file list: "lista_audio", pastaentrada$+"*.wav"
#seleciona objeto lista_audio
select lista_audio
#quantidade de arquivos de audio
num_audio = Get number of strings
#Criando os nomes dos atributos das medidas que serão alocadas na tabela
tabela_medidas_columns$ = "Indice f0CPP Mediaf0 DPf0 CVf0 Medianaf0 1ªquartil 3ªquartil Maxf0 Minf0 Amplitude
... ProporcaoMinMAxf0 jitter_local RAP PPQ5 shimmer_local shimmer_dB APQ3 APQ5 APQ11"
# Criando tabela e colocando os nomes dos atributos
tabela_medidas = Create Table with column names: "tabela_medidas", 0, tabela_medidas_columns$
#Início da estrutura de repetição
for cont_audio from 1 to num_audio
#selecionando a lista de áudio
select lista_audio
#variável recebe string referente a posição cont_audio
nome_audio$ = Get string: cont_audio
#ler aquivo de áudio
audio = Read from file: pastaentrada$+nome_audio$
#argumentos para serem preenchidos de f0
piso=75
teto=600
oitava=0.01
saltooitava=0.35
#chamando o procedimento medidasf0
@medidasf0: piso, oitava, saltooitava,teto
#chamando o procedimento f0cpp
@f0cpp
#Teste para atualizar argumentos de f0 e a rerência é f0cpp
#Primeira condição verifica o min e max de f0 e os compara com o valor de f0cpp
if (medidasf0.min < (0.65*f0cpp.f0)) or (medidasf0.max > (1.65*f0cpp.f0))
#atualizando argumentos custo de oitava e salto de oitava
oitava=0.04
saltooitava=0.5
#chamando o procedimento medidasf0
@medidasf0: piso, oitava, saltooitava, teto
endif
#realizado o teste com as mesmas condições novamente
#o objetivo é atualizar valores de referência de frequência inferior e superior
#caso o teste anterior não tenha sido eficiente
if (medidasf0.min < (0.65*f0cpp.f0)) or (medidasf0.max > (1.65*f0cpp.f0))
#atualizando argumentos de limites inferior e superior de f0, custo de oitava e salto de oitava
piso=0.6 * f0cpp.f0
teto=1.4 * f0cpp.f0
oitava=0.04
saltooitava=0.5
#chamando o procedimento medidasf0
@medidasf0: piso, oitava, saltooitava, teto
endif
#chamando o procedimento medidasjitter
@medidasjitter
#chamando o procedimento medidasshimmer
@medidasshimmer
#chamando o procedimento oscilograma
@oscilograma
#chamando o procedimento contornof0
@contornof0
#chamando o procedimento imprimirmedidas
@imprimirmedidas
#chamando o procedimento tabmedidasf0
@tabmedidasf0
#selecionado e removendo o objeto áudio
select audio
Remove
#fim da estrutura for
endfor
#selecionado a tabela com os valores das medidas
select tabela_medidas
#salvando essa tabela em uma planhilha .csv
Save as comma-separated file: pastasaida$ + "medidas.csv"
#Selecionando a tabela com as medidas
select tabela_medidas
#adicionando na seleção a lista das strings
plus lista_audio
plus medidasf0.f0lista
plus medidasjitter.pontos
# removendo os objetos selecionados
Remove
#procedimento para extrair f0 e suas medidas
procedure medidasf0: .piso, .oitava, .saltooitava, .teto
if variableExists(".f0lista")
select .f0lista
Remove
endif
select audio
#armazenando na variável .f0lista os valores de f0
.f0lista=To Pitch (cc): 0, .piso, 15, "no", 0.03, 0.45, .oitava, .saltooitava, 0.14, .teto
#selecionando o objeto .f0lista
select .f0lista
#valor mínimo de f0
.min=Get minimum: 0, 0, "Hertz", "parabolic"
#valor máximo de f0
.max=Get maximum: 0, 0, "Hertz", "parabolic"
#valor da mediana de f0
.mediana=Get quantile: 0, 0, 0.5, "Hertz"
#valor da média de f0
.media=Get mean: 0, 0, "Hertz"
#valor do desvio padrão de f0
.dp=Get standard deviation: 0, 0, "Hertz"
#valor do 1ª quartil de f0
.q1=Get quantile: 0, 0, 0.25, "Hertz"
#valor do 3ª quartil de f0
.q3=Get quantile: 0, 0, 0.75, "Hertz"
#cálculo do coeficiente de variação de f0
.cv=(.dp/.media)*100
#cálculo da amplitude de f0
.amplitude=.max-.min
#relação de proporção en o mínino e o máximo de f0
.propminmax=.min/.max
endproc
#procedimento para calcular f0 com o cpp
procedure f0cpp
#selecionando o objeto áudio
select audio
#variável que armazena o objeto cepstrograma
.cepstrograma =noprogress To PowerCepstrogram: 60, 0.002, 5000, 50
#selecionando o objeto cepstrograma
select .cepstrograma
#variável que armazana o objeto cepstro
.cepstrogramamarginal=To PowerCepstrum (slice): 0.1
#selecionando o objeto cepstro
select .cepstrogramamarginal
#extraindo a quefrency
.quefrency=Get quefrency of peak: 60, 333.3, "parabolic"
#calculando f0 do cpp
.f0=1/.quefrency
#Selecionando e removendo os objetos cepstrograma e cepstrogramamarginal
select .cepstrograma
plus .cepstrogramamarginal
Remove
endproc
procedure medidasjitter
if variableExists(".pontos")
select .pontos
Remove
endif
select audio
plus medidasf0.f0lista
.pontos=noprogress To PointProcess (cc)
select .pontos
.jitter_loc=Get jitter (local): 0, 0, 0.0001, 0.02, 1.3
.jitter_loc_perc=.jitter_loc*100
.jitter_rap=Get jitter (rap): 0, 0, 0.0001, 0.02, 1.3
.jitter_rap_perc=.jitter_rap*100
.jitter_ppq5=Get jitter (ppq5): 0, 0, 0.0001, 0.02, 1.3
.jitter_ppq5_perc=.jitter_ppq5*100
endproc
procedure medidasshimmer
select audio
plus medidasjitter.pontos
.shimmer_loc=Get shimmer (local): 0, 0, 0.0001, 0.02, 1.3, 1.6
.shimmer_loc_perc=.shimmer_loc*100
.shimmer_db=Get shimmer (local_dB): 0, 0, 0.0001, 0.02, 1.3, 1.6
.shimmer_apq3=Get shimmer (apq3): 0, 0, 0.0001, 0.02, 1.3, 1.6
.shimmer_apq3_perc=.shimmer_apq3*100
.shimmer_apq5=Get shimmer (apq5): 0, 0, 0.0001, 0.02, 1.3, 1.6
.shimmer_apq5_perc=.shimmer_apq5*100
.shimmer_apq11=Get shimmer (apq11): 0, 0, 0.0001, 0.02, 1.3, 1.6
.shimmer_apq11_perc=.shimmer_apq11*100
endproc
#procedimento para desenhar o oscilograma
procedure oscilograma
#seleciona o objeto áudio
select audio
#duração total do áudio
.duracaotot = Get total duration
#valor mínimo da amplitude do áudio
.amplitudemin = Get minimum: 0, 0, "sinc70"
#valor máximo da amplitude do áudio
.amplitudemax = Get maximum: 0, 0, "sinc70"
#apagando tudo da janela Praat Picture
Erase all
#selecionado o tipo de linha
Solid line
#Largura da linha
Line width: 1
#selecionando cor
Black
#selecionando fonte
Helvetica
#selecionando área da janela Praat Picture
Select inner viewport: 1, 5.5, 0.5, 1
#tamanho da fonte
Font size: 12
#selecioando eixos
Axes: 1.5, 5.5, 0.5, 0.8
#texto que será impresso com seus parâmetros
Text: 2.7, "Left", 0.5, "Half", "##Relatório acústico do arquivo de voz 'nome_audio$'"
#tamanho da fonte
Font size: 8
#selecionando área da janela Praat Picture
Select inner viewport: 1, 7.5, 1.1, 2.1
#seleção do objeto áudio
select audio
#desenhado o objeto áudio
Draw: 0, 0, 0, 0, "no", "Curve"
#desenha uma caixa (retângulo) no contorno da figura
Draw inner box
#Os comandos abaixo são para escrever os parâmetros referentes aos eixos vertical e horizontal do oscilograma
One mark left: .amplitudemin, "no", "yes", "no", "'.amplitudemin:2'"
One mark left: .amplitudemax, "no", "yes", "no", "'.amplitudemax:2'"
Text left: "no", "Amplitude (Pa)"
One mark bottom: 0, "no", "yes", "no", "0.00"
One mark bottom: .duracaotot, "no", "yes", "no", "'.duracaotot:2'"
Text bottom: "no", "Tempo (s)"
endproc
#procedimento para desenhar o contorno de f0 no tempo
procedure contornof0
#tamanho da fonte
Font size: 8
#selecionando área da janela Praat Picture
Select inner viewport: 1, 7.5, 2.5, 3.5
#seleção do objeto com os valores de f0
select medidasf0.f0lista
#Cor do contorno
Colour: "red"
#desenhando o contorno
Draw: 0, 0, 0, 500, "no"
#desenha uma caixa (retângulo) no contorno da figura
Draw inner box
#Os comandos abaixo são para escrever os parâmetros referentes aos eixos vertical e horizontal do contorno de f0
One mark left: 0, "no", "yes", "no", "0"
One mark left: 100, "no", "yes", "no", "100"
One mark left: 200, "no", "yes", "no", "200"
One mark left: 300, "no", "yes", "no", "300"
One mark left: 400, "no", "yes", "no", "400"
One mark left: 500, "no", "yes", "no", "500"
Colour: "black"
Text right: "no", "f0 (Hz)"
One mark bottom: 0, "no", "yes", "no", "0.00"
One mark bottom: oscilograma.duracaotot, "no", "yes", "no", "'oscilograma.duracaotot:2'"
Text bottom: "no", "Tempo (s)"
endproc
#procedimento para imprimir as medidas no Praat Picture
procedure imprimirmedidas
#tamanho da fonte
Font size: 8
#selecioando uma área no Praat Picture
Select inner viewport: 1, 7.5, 9.2, 11.1
#selecionando os eixos
Axes: 1, 7.7, 9.2, 0
#comandos abaixo são as medidas que serão impressas no Praat Picture
Text: 1.1, "Left", 0.5, "Half", "f0 CPP: ##'f0cpp.f0:2' Hz#"
Text: 1.1, "Left", 1.5, "Half", "Média f0: ##'medidasf0.media:2' Hz#"
Text: 1.1, "Left", 2.5, "Half", "Desvio padrão f0: ##'medidasf0.dp:2' Hz#"
Text: 1.1, "Left", 3.5, "Half", "Coeficiente de variação f0: ##'medidasf0.cv:2'\% #"
Text: 1.1, "Left", 4.5, "Half", "1ª quartil f0: ##'medidasf0.q1:2' Hz#"
Text: 1.1, "Left", 5.5, "Half", "Mediana f0: ##'medidasf0.mediana:2' Hz#"
Text: 1.1, "Left", 6.5, "Half", "3ª quartil f0: ##'medidasf0.q3:2' Hz#"
Text: 1.1, "Left", 7.5, "Half", "Mínimo f0: ##'medidasf0.min:2' Hz#"
Text: 1.1, "Left", 8.5, "Half", "Máximo f0: ##'medidasf0.max:2' Hz#"
Text: 3.1, "Left", 0.5, "Half", "Amplitude f0: ##'medidasf0.amplitude:2' Hz#"
Text: 3.1, "Left", 1.5, "Half", "Jitter (local): ##'medidasjitter.jitter_loc_perc:2'\% #"
Text: 3.1, "Left", 2.5, "Half", "Jitter (RAP): ##'medidasjitter.jitter_rap_perc:2'\% #"
Text: 3.1, "Left", 3.5, "Half", "Jitter (PPQ5): ##'medidasjitter.jitter_ppq5_perc:2'\% #"
Text: 3.1, "Left", 4.5, "Half", "Shimmer (local): ##'medidasshimmer.shimmer_loc_perc:2'\% #"
Text: 3.1, "Left", 5.5, "Half", "Shimmer (dB): ##'medidasshimmer.shimmer_db:2' dB #"
Text: 3.1, "Left", 6.5, "Half", "Shimmer (APQ3): ##'medidasshimmer.shimmer_apq3_perc:2'\% #"
Text: 3.1, "Left", 7.5, "Half", "Shimmer (APQ5): ##'medidasshimmer.shimmer_apq5_perc:2'\% #"
Text: 3.1, "Left", 8.5, "Half", "Shimmer (APQ11): ##'medidasshimmer.shimmer_apq11_perc:2'\% #"
#selecioando uma área no Praat Picture
Select inner viewport: 1, 7.5, 9.2, 11.1
#desenha uma caixa (retângulo) no contorno da área selecionada
Draw inner box
#selecioando uma área do tamanho de um folha A4 no Praat Picture
Select inner viewport: 0, 8.26, 0, 11.69
#criando variável e retirando a string ".wav"
.nome$=nome_audio$ - ".wav"
#salvar imagem do Praat Picture em PDF
#Save as PDF file: pastasaida$ + .nome$ + ".pdf"
#salvar imagem do Praat Picture em PNG com 600 dpi
#Save as 600-dpi PNG file: pastasaida$ + .nome$ +".png"
#salvar imagem do Praat Picture em PNG com 300 dpi
Save as 300-dpi PNG file: pastasaida$ + .nome$ +".png"
endproc
#procedimento p/ inserir os valores das medidas na tabela
procedure tabmedidasf0
#selecionando tabela
select tabela_medidas
#Comando p/ acrescentar linha
Append row
#variável que recebe o número da linha
.r = Get number of rows
# Comandos p/ preencher tabela com strings e valores das medidas
Set string value: .r,"Indice", nome_audio$-".wav"
Set numeric value: .r, "f0CPP", f0cpp.f0
Set numeric value: .r, "Mediaf0", medidasf0.media
Set numeric value: .r, "DPf0", medidasf0.dp
Set numeric value: .r, "CVf0", medidasf0.cv
Set numeric value: .r, "Medianaf0", medidasf0.mediana
Set numeric value: .r, "1ªquartil", medidasf0.q1
Set numeric value: .r, "3ªquartil", medidasf0.q3
Set numeric value: .r, "Maxf0", medidasf0.max
Set numeric value: .r, "Minf0", medidasf0.min
Set numeric value: .r, "Amplitude", medidasf0.amplitude
Set numeric value: .r, "ProporcaoMinMAxf0", medidasf0.propminmax
Set numeric value: .r, "jitter_local", medidasjitter.jitter_loc_perc
Set numeric value: .r, "RAP", medidasjitter.jitter_rap_perc
Set numeric value: .r, "PPQ5", medidasjitter.jitter_ppq5_perc
Set numeric value: .r, "shimmer_local", medidasshimmer.shimmer_loc_perc
Set numeric value: .r, "shimmer_dB", medidasshimmer.shimmer_db
Set numeric value: .r, "APQ3", medidasshimmer.shimmer_apq3_perc
Set numeric value: .r, "APQ5", medidasshimmer.shimmer_apq5_perc
Set numeric value: .r, "APQ11", medidasshimmer.shimmer_apq11_perc
endproc
include diretorio.praat
lista_audio=Create Strings as file list: "lista_audio", pastaentrada$+"*.wav"
#seleciona objeto lista_audio
select lista_audio
#Quantidade de strings(audios)
num_audio = Get number of strings
hnr_tabela_columns$ = "Indice MediaHNR DP_HNR MinHNR MaxHNR"
hnr_tabela = Create Table with column names: "hnr_tabela", 0, hnr_tabela_columns$
for cont_audio from 1 to num_audio
select lista_audio
#variavel recebe string referente a posição cont_audio
nome_audio$ = Get string: cont_audio
#abrir aquivo de audio
audio = Read from file: pastaentrada$+nome_audio$
select audio
@medidashnr
@tabmedidashnr
select audio
Remove
endfor
select hnr_tabela
Save as comma-separated file: pastasaida$ + "hnr.csv"
select hnr_tabela
plus lista_audio
Remove
procedure medidashnr
.hnrlista=To Harmonicity (cc): 0.01, 75, 0.1, 1
.media=Get mean: 0, 0
.dp=Get standard deviation: 0, 0
.min=Get minimum: 0, 0, "parabolic"
.max=Get maximum: 0, 0, "parabolic"
select .hnrlista
Remove
endproc
procedure tabmedidashnr
select hnr_tabela
Append row
.r = Get number of rows
Set string value: .r,"Indice", nome_audio$
Set numeric value: .r, "MediaHNR", medidashnr.media
Set numeric value: .r, "DP_HNR", medidashnr.dp
Set numeric value: .r, "MinHNR", medidashnr.min
Set numeric value: .r, "MaxHNR", medidashnr.max
endproc
#incrementando o relatório com HNR
#chamando o script diretorio.praat
include diretorio.praat
#Criando lista de strings com o caminho especificado pelo usuário
lista_audio=Create Strings as file list: "lista_audio", pastaentrada$+"*.wav"
#seleciona objeto lista_audio
select lista_audio
#quantidade de arquivos de audio
num_audio = Get number of strings
#Criando os nomes dos atributos das medidas que serão alocadas na tabela
tabela_medidas_columns$ = "Indice f0CPP Mediaf0 DPf0 CVf0 Medianaf0 1ªquartil 3ªquartil Maxf0 Minf0 Amplitude
... ProporcaoMinMAxf0 jitter_local RAP PPQ5 shimmer_local shimmer_dB APQ3 APQ5 APQ11 MediaHNR DP_HNR MinHNR MaxHNR"
# Criando tabela e colocando os nomes dos atributos
tabela_medidas = Create Table with column names: "tabela_medidas", 0, tabela_medidas_columns$
#Início da estrutura de repetição
for cont_audio from 1 to num_audio
#selecionando a lista de áudio
select lista_audio
#variável recebe string referente a posição cont_audio
nome_audio$ = Get string: cont_audio
#ler aquivo de áudio
audio = Read from file: pastaentrada$+nome_audio$
#argumentos para serem preenchidos de f0
piso=75
teto=600
oitava=0.01
saltooitava=0.35
#chamando o procedimento medidasf0
@medidasf0: piso, oitava, saltooitava,teto
#chamando o procedimento f0cpp
@f0cpp
#Teste para atualizar argumentos de f0 e a rerência é f0cpp
#Primeira condição verifica o min e max de f0 e os compara com o valor de f0cpp
if (medidasf0.min < (0.65*f0cpp.f0)) or (medidasf0.max > (1.65*f0cpp.f0))
#atualizando argumentos custo de oitava e salto de oitava
oitava=0.04
saltooitava=0.5
#chamando o procedimento medidasf0
@medidasf0: piso, oitava, saltooitava, teto
endif
#realizado o teste com as mesmas condições novamente
#o objetivo é atualizar valores de referência de frequência inferior e superior
#caso o teste anterior não tenha sido eficiente
if (medidasf0.min < (0.65*f0cpp.f0)) or (medidasf0.max > (1.65*f0cpp.f0))
#atualizando argumentos de limites inferior e superior de f0, custo de oitava e salto de oitava
piso=0.6 * f0cpp.f0
teto=1.4 * f0cpp.f0
oitava=0.04
saltooitava=0.5
#chamando o procedimento medidasf0
@medidasf0: piso, oitava, saltooitava, teto
endif
#chamando o procedimento medidasjitter
@medidasjitter
#chamando o procedimento medidasshimmer
@medidasshimmer
#chamando o procedimento medidashnr
@medidashnr
#chamando o procedimento oscilograma
@oscilograma
#chamando o procedimento contornof0
@contornof0
#chamando o procedimento espectrograma
@espectrograma
#chamando o procedimento imprimirmedidas
@imprimirmedidas
#chamando o procedimento tabmedidasf0
@tabmedidasf0
#selecionado e removendo o objeto áudio
select audio
Remove
#fim da estrutura for
endfor
#selecionado a tabela com os valores das medidas
select tabela_medidas
#salvando essa tabela em uma planhilha .csv
Save as comma-separated file: pastasaida$ + "medidas.csv"
#Selecionando a tabela com as medidas
select tabela_medidas
#adicionando na seleção a lista das strings
plus lista_audio
plus medidasf0.f0lista
plus medidasjitter.pontos
# removendo os objetos selecionados
Remove
#procedimento para extrair f0 e suas medidas
procedure medidasf0: .piso, .oitava, .saltooitava, .teto
if variableExists(".f0lista")
select .f0lista
Remove
endif
select audio
#armazenando na variável .f0lista os valores de f0
.f0lista=To Pitch (cc): 0, .piso, 15, "no", 0.03, 0.45, .oitava, .saltooitava, 0.14, .teto
#selecionando o objeto .f0lista
select .f0lista
#valor mínimo de f0
.min=Get minimum: 0, 0, "Hertz", "parabolic"
#valor máximo de f0
.max=Get maximum: 0, 0, "Hertz", "parabolic"
#valor da mediana de f0
.mediana=Get quantile: 0, 0, 0.5, "Hertz"
#valor da média de f0
.media=Get mean: 0, 0, "Hertz"
#valor do desvio padrão de f0
.dp=Get standard deviation: 0, 0, "Hertz"
#valor do 1ª quartil de f0
.q1=Get quantile: 0, 0, 0.25, "Hertz"
#valor do 3ª quartil de f0
.q3=Get quantile: 0, 0, 0.75, "Hertz"
#cálculo do coeficiente de variação de f0
.cv=(.dp/.media)*100
#cálculo da amplitude de f0
.amplitude=.max-.min
#relação de proporção en o mínino e o máximo de f0
.propminmax=.min/.max
endproc
#procedimento para calcular f0 com o cpp
procedure f0cpp
#selecionando o objeto áudio
select audio
#variável que armazena o objeto cepstrograma
.cepstrograma =To PowerCepstrogram: 60, 0.002, 5000, 50
#selecionando o objeto cepstrograma
select .cepstrograma
#variável que armazana o objeto cepstro
.cepstrogramamarginal=To PowerCepstrum (slice): 0.1
#selecionando o objeto cepstro
select .cepstrogramamarginal
#extraindo a quefrency
.quefrency=Get quefrency of peak: 60, 333.3, "parabolic"
#calculando f0 do cpp
.f0=1/.quefrency
#Selecionando e removendo os objetos cepstrograma e cepstrogramamarginal
select .cepstrograma
plus .cepstrogramamarginal
Remove
endproc
procedure medidasjitter
if variableExists(".pontos")
select .pontos
Remove
endif
select audio
plus medidasf0.f0lista
.pontos=To PointProcess (cc)
select .pontos
.jitter_loc=Get jitter (local): 0, 0, 0.0001, 0.02, 1.3
.jitter_loc_perc=.jitter_loc*100
.jitter_rap=Get jitter (rap): 0, 0, 0.0001, 0.02, 1.3
.jitter_rap_perc=.jitter_rap*100
.jitter_ppq5=Get jitter (ppq5): 0, 0, 0.0001, 0.02, 1.3
.jitter_ppq5_perc=.jitter_ppq5*100
endproc
procedure medidasshimmer
select audio
plus medidasjitter.pontos
.shimmer_loc=Get shimmer (local): 0, 0, 0.0001, 0.02, 1.3, 1.6
.shimmer_loc_perc=.shimmer_loc*100
.shimmer_db=Get shimmer (local_dB): 0, 0, 0.0001, 0.02, 1.3, 1.6
.shimmer_apq3=Get shimmer (apq3): 0, 0, 0.0001, 0.02, 1.3, 1.6
.shimmer_apq3_perc=.shimmer_apq3*100
.shimmer_apq5=Get shimmer (apq5): 0, 0, 0.0001, 0.02, 1.3, 1.6
.shimmer_apq5_perc=.shimmer_apq5*100
.shimmer_apq11=Get shimmer (apq11): 0, 0, 0.0001, 0.02, 1.3, 1.6
.shimmer_apq11_perc=.shimmer_apq11*100
endproc
procedure medidashnr
select audio
.hnrlista= To Harmonicity (cc): 0.01, medidasf0.piso, 0.1, 1
select .hnrlista
.media=Get mean: 0, 0
.dp=Get standard deviation: 0, 0
.min=Get minimum: 0, 0, "parabolic"
.max=Get maximum: 0, 0, "parabolic"
select .hnrlista
Remove
endproc
#procedimento para desenhar o oscilograma
procedure oscilograma
#seleciona o objeto áudio
select audio
#duração total do áudio
.duracaotot = Get total duration
#valor mínimo da amplitude do áudio
.amplitudemin = Get minimum: 0, 0, "sinc70"
#valor máximo da amplitude do áudio
.amplitudemax = Get maximum: 0, 0, "sinc70"
#apagando tudo da janela Praat Picture
Erase all
#selecionado o tipo de linha
Solid line
#Largura da linha
Line width: 1
#selecionando cor
Black
#selecionando fonte
Helvetica
#selecionando área da janela Praat Picture
Select inner viewport: 1, 5.5, 0.5, 1
#tamanho da fonte
Font size: 12
#selecioando eixos
Axes: 1.5, 5.5, 0.5, 0.8
#texto que será impresso com seus parâmetros
Text: 2.7, "Left", 0.5, "Half", "##Relatório acústico do arquivo de voz 'nome_audio$'"
#tamanho da fonte
Font size: 8
#selecionando área da janela Praat Picture
Select inner viewport: 1, 7.5, 1.1, 2.1
#seleção do objeto áudio
select audio
#desenhado o objeto áudio
Draw: 0, 0, 0, 0, "no", "Curve"
#desenha uma caixa (retângulo) no contorno da figura
Draw inner box
#Os comandos abaixo são para escrever os parâmetros referentes aos eixos vertical e horizontal do oscilograma
One mark left: .amplitudemin, "no", "yes", "no", "'.amplitudemin:2'"
One mark left: .amplitudemax, "no", "yes", "no", "'.amplitudemax:2'"
Text left: "no", "Amplitude (Pa)"
One mark bottom: 0, "no", "yes", "no", "0.00"
One mark bottom: .duracaotot, "no", "yes", "no", "'.duracaotot:2'"
Text bottom: "no", "Tempo (s)"
endproc
#procedimento para desenhar o contorno de f0 no tempo
procedure contornof0
#tamanho da fonte
Font size: 8
#selecionando área da janela Praat Picture
Select inner viewport: 1, 7.5, 2.4, 3.4
#seleção do objeto com os valores de f0
select medidasf0.f0lista
#Cor do contorno
Colour: "red"
#desenhando o contorno
Draw: 0, 0, 0, 500, "no"
#desenha uma caixa (retângulo) no contorno da figura
Draw inner box
#Os comandos abaixo são para escrever os parâmetros referentes aos eixos vertical e horizontal do contorno de f0
One mark left: 0, "no", "yes", "no", "0"
One mark left: 100, "no", "yes", "no", "100"
One mark left: 200, "no", "yes", "no", "200"
One mark left: 300, "no", "yes", "no", "300"
One mark left: 400, "no", "yes", "no", "400"
One mark left: 500, "no", "yes", "no", "500"
Colour: "black"
Text right: "no", "f0 (Hz)"
One mark bottom: 0, "no", "yes", "no", "0.00"
One mark bottom: oscilograma.duracaotot, "no", "yes", "no", "'oscilograma.duracaotot:2'"
Text bottom: "no", "Tempo (s)"
endproc
procedure espectrograma
select audio
.espectrograma_estreito=noprogress To Spectrogram... 0.03 2000 0.002 20 Gaussian
select audio
.espectrograma_largo=noprogress To Spectrogram... 0.005 5000 0.002 20 Gaussian
Select inner viewport: 1, 7.5, 3.7, 5.2
select .espectrograma_estreito
Paint: 0, 0, 0, 2000, 100, "yes", 50, 6, 0, "no"
Draw inner box
One mark left: 0, "no", "yes", "no", "0"
One mark left: 1000, "no", "yes", "no", "1"
One mark left: 2000, "no", "yes", "no", "2"
Text right: "no", "Frequência (kHz)"
One mark bottom: 0, "no", "yes", "no", "0.00"
One mark bottom: oscilograma.duracaotot, "no", "yes", "no", "'oscilograma.duracaotot:2'"
Text bottom: "no", "Tempo (s)"
Select inner viewport: 1, 7.5, 5.5, 7
select .espectrograma_largo
Paint: 0, 0, 0, 5000, 100, "yes", 50, 6, 0, "no"
Draw inner box
One mark left: 0, "no", "yes", "no", "0"
One mark left: 1000, "no", "yes", "no", "1"
One mark left: 2000, "no", "yes", "no", "2"
One mark left: 3000, "no", "yes", "no", "3"
One mark left: 4000, "no", "yes", "no", "4"
One mark left: 5000, "no", "yes", "no", "5"
Text right: "no", "Frequência (kHz)"
One mark bottom: 0, "no", "yes", "no", "0.00"
One mark bottom: oscilograma.duracaotot, "no", "yes", "no", "'oscilograma.duracaotot:2'"
Text bottom: "no", "Tempo (s)"
select .espectrograma_estreito
plus .espectrograma_largo
Remove
endproc
#procedimento para imprimir as medidas no Praat Picture
procedure imprimirmedidas
#tamanho da fonte
Font size: 8
#selecioando uma área no Praat Picture
Select inner viewport: 1, 7.5, 9.2, 11.1
#selecionando os eixos
Axes: 1, 7.7, 9.2, 0
#comandos abaixo são as medidas que serão impressas no Praat Picture
Text: 1.1, "Left", 0.5, "Half", "f0 CPP: ##'f0cpp.f0:2' Hz#"
Text: 1.1, "Left", 1.5, "Half", "Média f0: ##'medidasf0.media:2' Hz#"
Text: 1.1, "Left", 2.5, "Half", "Desvio padrão f0: ##'medidasf0.dp:2' Hz#"
Text: 1.1, "Left", 3.5, "Half", "Coeficiente de variação f0: ##'medidasf0.cv:2'\% #"
Text: 1.1, "Left", 4.5, "Half", "1ª quartil f0: ##'medidasf0.q1:2' Hz#"
Text: 1.1, "Left", 5.5, "Half", "Mediana f0: ##'medidasf0.mediana:2' Hz#"
Text: 1.1, "Left", 6.5, "Half", "3ª quartil f0: ##'medidasf0.q3:2' Hz#"
Text: 1.1, "Left", 7.5, "Half", "Mínimo f0: ##'medidasf0.min:2' Hz#"
Text: 1.1, "Left", 8.5, "Half", "Máximo f0: ##'medidasf0.max:2' Hz#"
Text: 2.9, "Left", 0.5, "Half", "Amplitude f0: ##'medidasf0.amplitude:2' Hz#"
Text: 2.9, "Left", 1.5, "Half", "Jitter (local): ##'medidasjitter.jitter_loc_perc:2'\% #"
Text: 2.9, "Left", 2.5, "Half", "Jitter (RAP): ##'medidasjitter.jitter_rap_perc:2'\% #"
Text: 2.9, "Left", 3.5, "Half", "Jitter (PPQ5): ##'medidasjitter.jitter_ppq5_perc:2'\% #"
Text: 2.9, "Left", 4.5, "Half", "Shimmer (local): ##'medidasshimmer.shimmer_loc_perc:2'\% #"
Text: 2.9, "Left", 5.5, "Half", "Shimmer (dB): ##'medidasshimmer.shimmer_db:2' dB #"
Text: 2.9, "Left", 6.5, "Half", "Shimmer (APQ3): ##'medidasshimmer.shimmer_apq3_perc:2'\% #"
Text: 2.9, "Left", 7.5, "Half", "Shimmer (APQ5): ##'medidasshimmer.shimmer_apq5_perc:2'\% #"
Text: 2.9, "Left", 8.5, "Half", "Shimmer (APQ11): ##'medidasshimmer.shimmer_apq11_perc:2'\% #"
Text: 4.3, "Left", 0.5, "Half", "Média HNR: ##'medidashnr.media:2' dB #"
Text: 4.3, "Left", 1.5, "Half", "Desvio padrão HNR: ##'medidashnr.dp:2' dB #"
Text: 4.3, "Left", 2.5, "Half", "Mínimo HNR: ##'medidashnr.min:2' dB #"
Text: 4.3, "Left", 3.5, "Half", "Máximo HNR: ##'medidashnr.max:2' dB #"
#selecioando uma área no Praat Picture
Select inner viewport: 1, 7.5, 9.2, 11.1
#desenha uma caixa (retângulo) no contorno da área selecionada
Draw inner box
#selecioando uma área do tamanho de um folha A4 no Praat Picture
Select inner viewport: 0, 8.26, 0, 11.69
#criando variável e retirando a string ".wav"
.nome$=nome_audio$ - ".wav"
#salvar imagem do Praat Picture em PDF
#Save as PDF file: pastasaida$ + .nome$ + ".pdf"
#salvar imagem do Praat Picture em PNG com 600 dpi
#Save as 600-dpi PNG file: pastasaida$ + .nome$ +".png"
#salvar imagem do Praat Picture em PNG com 300 dpi
Save as 300-dpi PNG file: pastasaida$ + .nome$ +".png"
endproc
#procedimento p/ inserir os valores das medidas na tabela
procedure tabmedidasf0
#selecionando tabela
select tabela_medidas
#Comando p/ acrescentar linha
Append row
#variável que recebe o número da linha
.r = Get number of rows
# Comandos p/ preencher tabela com strings e valores das medidas
Set string value: .r,"Indice", nome_audio$-".wav"
Set numeric value: .r, "f0CPP", f0cpp.f0
Set numeric value: .r, "Mediaf0", medidasf0.media
Set numeric value: .r, "DPf0", medidasf0.dp
Set numeric value: .r, "CVf0", medidasf0.cv
Set numeric value: .r, "Medianaf0", medidasf0.mediana
Set numeric value: .r, "1ªquartil", medidasf0.q1
Set numeric value: .r, "3ªquartil", medidasf0.q3
Set numeric value: .r, "Maxf0", medidasf0.max
Set numeric value: .r, "Minf0", medidasf0.min
Set numeric value: .r, "Amplitude", medidasf0.amplitude
Set numeric value: .r, "ProporcaoMinMAxf0", medidasf0.propminmax
Set numeric value: .r, "jitter_local", medidasjitter.jitter_loc_perc
Set numeric value: .r, "RAP", medidasjitter.jitter_rap_perc
Set numeric value: .r, "PPQ5", medidasjitter.jitter_ppq5_perc
Set numeric value: .r, "shimmer_local", medidasshimmer.shimmer_loc_perc
Set numeric value: .r, "shimmer_dB", medidasshimmer.shimmer_db
Set numeric value: .r, "APQ3", medidasshimmer.shimmer_apq3_perc
Set numeric value: .r, "APQ5", medidasshimmer.shimmer_apq5_perc
Set numeric value: .r, "APQ11", medidasshimmer.shimmer_apq11_perc
Set numeric value: .r, "MediaHNR", medidashnr.media
Set numeric value: .r, "DP_HNR", medidashnr.dp
Set numeric value: .r, "MinHNR", medidashnr.min
Set numeric value: .r, "MaxHNR", medidashnr.max
endproc
#Valores baseados no estudo
#MICHAELIS, Dirk; GRAMSS, Tino; STRUBE, Hans Werner. Glottal-to-noise excitation ratio–a new measure for describing pathological
#voices. Acta Acustica united with Acustica, v. 83, n. 4, p. 700-706, 1997.
include diretorio.praat
lista_audio=Create Strings as file list: "lista_audio", pastaentrada$+"*.wav"
#seleciona objeto lista_audio
select lista_audio
#Quantidade de strings(audios)
num_audio = Get number of strings
gne_tabela_columns$ = "Indice GNE_1kHz GNE_2kHz GNE_3kHz"
gne_tabela = Create Table with column names: "gne_tabela", 0, gne_tabela_columns$
for cont_audio from 1 to num_audio
select lista_audio
#variavel recebe string referente a posição cont_audio
nome_audio$ = Get string: cont_audio
#abrir aquivo de audio
audio = Read from file: pastaentrada$+nome_audio$
select audio
@medidasgne
@tabmedidasgne
select audio
Remove
endfor
select gne_tabela
Save as comma-separated file: pastasaida$ + "gne.csv"
select gne_tabela
plus lista_audio
Remove
procedure medidasgne
select audio
.gne1matriz=noprogress To Harmonicity (gne): 500, 4500, 1000, 80
select audio
.gne2matriz=noprogress To Harmonicity (gne): 1000, 4000, 2000, 100
select audio
.gne3matriz=noprogress To Harmonicity (gne): 1500, 3500, 3000, 100
select .gne1matriz
.gne1=Get maximum
select .gne2matriz
.gne2=Get maximum
select .gne3matriz
.gne3=Get maximum
select .gne1matriz
plus .gne2matriz
plus .gne3matriz
Remove
endproc
procedure tabmedidasgne
select gne_tabela
Append row
.r = Get number of rows
Set string value: .r,"Indice", nome_audio$
Set numeric value: .r, "GNE_1kHz", medidasgne.gne1
Set numeric value: .r, "GNE_2kHz", medidasgne.gne2
Set numeric value: .r, "GNE_3kHz", medidasgne.gne3
endproc
#incrementando o relatório com GNE
#chamando o script diretorio.praat
include diretorio.praat
#Criando lista de strings com o caminho especificado pelo usuário
lista_audio=Create Strings as file list: "lista_audio", pastaentrada$+"*.wav"
#seleciona objeto lista_audio
select lista_audio
#quantidade de arquivos de audio
num_audio = Get number of strings
#Criando os nomes dos atributos das medidas que serão alocadas na tabela
tabela_medidas_columns$ = "Indice f0CPP Mediaf0 DPf0 CVf0 Medianaf0 1ªquartil 3ªquartil Maxf0 Minf0 Amplitude
... ProporcaoMinMAxf0 jitter_local RAP PPQ5 shimmer_local shimmer_dB APQ3 APQ5 APQ11 MediaHNR DP_HNR MinHNR MaxHNR
... GNE_1kHz GNE_2kHz GNE_3kHz"
# Criando tabela e colocando os nomes dos atributos
tabela_medidas = Create Table with column names: "tabela_medidas", 0, tabela_medidas_columns$
#Início da estrutura de repetição
for cont_audio from 1 to num_audio
#selecionando a lista de áudio
select lista_audio
#variável recebe string referente a posição cont_audio
nome_audio$ = Get string: cont_audio
#ler aquivo de áudio
audio = Read from file: pastaentrada$+nome_audio$
#argumentos para serem preenchidos de f0
piso=75
teto=600
oitava=0.01
saltooitava=0.35
#chamando o procedimento medidasf0
@medidasf0: piso, oitava, saltooitava,teto
#chamando o procedimento f0cpp
@f0cpp
#Teste para atualizar argumentos de f0 e a rerência é f0cpp
#Primeira condição verifica o min e max de f0 e os compara com o valor de f0cpp
if (medidasf0.min < (0.65*f0cpp.f0)) or (medidasf0.max > (1.65*f0cpp.f0))
#atualizando argumentos custo de oitava e salto de oitava
oitava=0.04
saltooitava=0.5
#chamando o procedimento medidasf0
@medidasf0: piso, oitava, saltooitava, teto
endif
#realizado o teste com as mesmas condições novamente
#o objetivo é atualizar valores de referência de frequência inferior e superior
#caso o teste anterior não tenha sido eficiente
if (medidasf0.min < (0.65*f0cpp.f0)) or (medidasf0.max > (1.65*f0cpp.f0))
#atualizando argumentos de limites inferior e superior de f0, custo de oitava e salto de oitava
piso=0.6 * f0cpp.f0
teto=1.4 * f0cpp.f0
oitava=0.04
saltooitava=0.5
#chamando o procedimento medidasf0
@medidasf0: piso, oitava, saltooitava, teto
endif
#chamando o procedimento medidasjitter
@medidasjitter
#chamando o procedimento medidasshimmer
@medidasshimmer
#chamando o procedimento medidashnr
@medidashnr
#chamando o procedimento medidashnr
@medidasgne
#chamando o procedimento oscilograma
@oscilograma
#chamando o procedimento contornof0
@contornof0
#chamando o procedimento espectrograma
@espectrograma
#chamando o procedimento imprimirmedidas
@imprimirmedidas
#chamando o procedimento tabmedidasf0
@tabmedidasf0
#selecionado e removendo o objeto áudio
select audio
Remove
#fim da estrutura for
endfor
#selecionado a tabela com os valores das medidas
select tabela_medidas
#salvando essa tabela em uma planhilha .csv
Save as comma-separated file: pastasaida$ + "medidas.csv"
#Selecionando a tabela com as medidas
select tabela_medidas
#adicionando na seleção a lista das strings
plus lista_audio
plus medidasf0.f0lista
plus medidasjitter.pontos
# removendo os objetos selecionados
Remove
#procedimento para extrair f0 e suas medidas
procedure medidasf0: .piso, .oitava, .saltooitava, .teto
if variableExists(".f0lista")
select .f0lista
Remove
endif
select audio
#armazenando na variável .f0lista os valores de f0
.f0lista=To Pitch (cc): 0, .piso, 15, "no", 0.03, 0.45, .oitava, .saltooitava, 0.14, .teto
#selecionando o objeto .f0lista
select .f0lista
#valor mínimo de f0
.min=Get minimum: 0, 0, "Hertz", "parabolic"
#valor máximo de f0
.max=Get maximum: 0, 0, "Hertz", "parabolic"
#valor da mediana de f0
.mediana=Get quantile: 0, 0, 0.5, "Hertz"
#valor da média de f0
.media=Get mean: 0, 0, "Hertz"
#valor do desvio padrão de f0
.dp=Get standard deviation: 0, 0, "Hertz"
#valor do 1ª quartil de f0
.q1=Get quantile: 0, 0, 0.25, "Hertz"
#valor do 3ª quartil de f0
.q3=Get quantile: 0, 0, 0.75, "Hertz"
#cálculo do coeficiente de variação de f0
.cv=(.dp/.media)*100
#cálculo da amplitude de f0
.amplitude=.max-.min
#relação de proporção en o mínino e o máximo de f0
.propminmax=.min/.max
endproc
#procedimento para calcular f0 com o cpp
procedure f0cpp
#selecionando o objeto áudio
select audio
#variável que armazena o objeto cepstrograma
.cepstrograma =To PowerCepstrogram: 60, 0.002, 5000, 50
#selecionando o objeto cepstrograma
select .cepstrograma
#variável que armazana o objeto cepstro
.cepstrogramamarginal=To PowerCepstrum (slice): 0.1
#selecionando o objeto cepstro
select .cepstrogramamarginal
#extraindo a quefrency
.quefrency=Get quefrency of peak: 60, 333.3, "parabolic"
#calculando f0 do cpp
.f0=1/.quefrency
#Selecionando e removendo os objetos cepstrograma e cepstrogramamarginal
select .cepstrograma
plus .cepstrogramamarginal
Remove
endproc
procedure medidasjitter
if variableExists(".pontos")
select .pontos
Remove
endif
select audio
plus medidasf0.f0lista
.pontos=To PointProcess (cc)
select .pontos
.jitter_loc=Get jitter (local): 0, 0, 0.0001, 0.02, 1.3
.jitter_loc_perc=.jitter_loc*100
.jitter_rap=Get jitter (rap): 0, 0, 0.0001, 0.02, 1.3
.jitter_rap_perc=.jitter_rap*100
.jitter_ppq5=Get jitter (ppq5): 0, 0, 0.0001, 0.02, 1.3
.jitter_ppq5_perc=.jitter_ppq5*100
endproc
procedure medidasshimmer
select audio
plus medidasjitter.pontos
.shimmer_loc=Get shimmer (local): 0, 0, 0.0001, 0.02, 1.3, 1.6
.shimmer_loc_perc=.shimmer_loc*100
.shimmer_db=Get shimmer (local_dB): 0, 0, 0.0001, 0.02, 1.3, 1.6
.shimmer_apq3=Get shimmer (apq3): 0, 0, 0.0001, 0.02, 1.3, 1.6
.shimmer_apq3_perc=.shimmer_apq3*100
.shimmer_apq5=Get shimmer (apq5): 0, 0, 0.0001, 0.02, 1.3, 1.6
.shimmer_apq5_perc=.shimmer_apq5*100
.shimmer_apq11=Get shimmer (apq11): 0, 0, 0.0001, 0.02, 1.3, 1.6
.shimmer_apq11_perc=.shimmer_apq11*100
endproc
procedure medidashnr
select audio
.hnrlista= To Harmonicity (cc): 0.01, medidasf0.piso, 0.1, 1
select .hnrlista
.media=Get mean: 0, 0
.dp=Get standard deviation: 0, 0
.min=Get minimum: 0, 0, "parabolic"
.max=Get maximum: 0, 0, "parabolic"
select .hnrlista
Remove
endproc
procedure medidasgne
select audio
.gne1matriz=noprogress To Harmonicity (gne): 500, 4500, 1000, 80
select audio
.gne2matriz=noprogress To Harmonicity (gne): 1000, 4000, 2000, 100
select audio
.gne3matriz=noprogress To Harmonicity (gne): 1500, 3500, 3000, 100
select .gne1matriz
.gne1=Get maximum
select .gne2matriz
.gne2=Get maximum
select .gne3matriz
.gne3=Get maximum
select .gne1matriz
plus .gne2matriz
plus .gne3matriz
Remove
endproc
#procedimento para desenhar o oscilograma
procedure oscilograma
#seleciona o objeto áudio
select audio
#duração total do áudio
.duracaotot = Get total duration
#valor mínimo da amplitude do áudio
.amplitudemin = Get minimum: 0, 0, "sinc70"
#valor máximo da amplitude do áudio
.amplitudemax = Get maximum: 0, 0, "sinc70"
#apagando tudo da janela Praat Picture
Erase all
#selecionado o tipo de linha
Solid line
#Largura da linha
Line width: 1
#selecionando cor
Black
#selecionando fonte
Helvetica
#selecionando área da janela Praat Picture
Select inner viewport: 1, 5.5, 0.5, 1
#tamanho da fonte
Font size: 12
#selecioando eixos
Axes: 1.5, 5.5, 0.5, 0.8
#texto que será impresso com seus parâmetros
Text: 2.7, "Left", 0.5, "Half", "##Relatório acústico do arquivo de voz 'nome_audio$'"
#tamanho da fonte
Font size: 8
#selecionando área da janela Praat Picture
Select inner viewport: 1, 7.5, 1.1, 2.1
#seleção do objeto áudio
select audio
#desenhado o objeto áudio
Draw: 0, 0, 0, 0, "no", "Curve"
#desenha uma caixa (retângulo) no contorno da figura
Draw inner box
#Os comandos abaixo são para escrever os parâmetros referentes aos eixos vertical e horizontal do oscilograma
One mark left: .amplitudemin, "no", "yes", "no", "'.amplitudemin:2'"
One mark left: .amplitudemax, "no", "yes", "no", "'.amplitudemax:2'"
Text left: "no", "Amplitude (Pa)"
One mark bottom: 0, "no", "yes", "no", "0.00"
One mark bottom: .duracaotot, "no", "yes", "no", "'.duracaotot:2'"
Text bottom: "no", "Tempo (s)"
endproc
#procedimento para desenhar o contorno de f0 no tempo
procedure contornof0
#tamanho da fonte
Font size: 8
#selecionando área da janela Praat Picture
Select inner viewport: 1, 7.5, 2.4, 3.4
#seleção do objeto com os valores de f0
select medidasf0.f0lista
#Cor do contorno
Colour: "red"
#desenhando o contorno
Draw: 0, 0, 0, 500, "no"
#desenha uma caixa (retângulo) no contorno da figura
Draw inner box
#Os comandos abaixo são para escrever os parâmetros referentes aos eixos vertical e horizontal do contorno de f0
One mark left: 0, "no", "yes", "no", "0"
One mark left: 100, "no", "yes", "no", "100"
One mark left: 200, "no", "yes", "no", "200"
One mark left: 300, "no", "yes", "no", "300"
One mark left: 400, "no", "yes", "no", "400"
One mark left: 500, "no", "yes", "no", "500"
Colour: "black"
Text right: "no", "f0 (Hz)"
One mark bottom: 0, "no", "yes", "no", "0.00"
One mark bottom: oscilograma.duracaotot, "no", "yes", "no", "'oscilograma.duracaotot:2'"
Text bottom: "no", "Tempo (s)"
endproc
procedure espectrograma
select audio
.espectrograma_estreito=noprogress To Spectrogram... 0.03 2000 0.002 20 Gaussian
select audio
.espectrograma_largo=noprogress To Spectrogram... 0.005 5000 0.002 20 Gaussian
Select inner viewport: 1, 7.5, 3.7, 5.2
select .espectrograma_estreito
Paint: 0, 0, 0, 2000, 100, "yes", 50, 6, 0, "no"
Draw inner box
One mark left: 0, "no", "yes", "no", "0"
One mark left: 1000, "no", "yes", "no", "1"
One mark left: 2000, "no", "yes", "no", "2"
Text right: "no", "Frequência (kHz)"
One mark bottom: 0, "no", "yes", "no", "0.00"
One mark bottom: oscilograma.duracaotot, "no", "yes", "no", "'oscilograma.duracaotot:2'"
Text bottom: "no", "Tempo (s)"
Select inner viewport: 1, 7.5, 5.5, 7
select .espectrograma_largo
Paint: 0, 0, 0, 5000, 100, "yes", 50, 6, 0, "no"
Draw inner box
One mark left: 0, "no", "yes", "no", "0"
One mark left: 1000, "no", "yes", "no", "1"
One mark left: 2000, "no", "yes", "no", "2"
One mark left: 3000, "no", "yes", "no", "3"
One mark left: 4000, "no", "yes", "no", "4"
One mark left: 5000, "no", "yes", "no", "5"
Text right: "no", "Frequência (kHz)"
One mark bottom: 0, "no", "yes", "no", "0.00"
One mark bottom: oscilograma.duracaotot, "no", "yes", "no", "'oscilograma.duracaotot:2'"
Text bottom: "no", "Tempo (s)"
select .espectrograma_estreito
plus .espectrograma_largo
Remove
endproc
#procedimento para imprimir as medidas no Praat Picture
procedure imprimirmedidas
#tamanho da fonte
Font size: 8
#selecioando uma área no Praat Picture
Select inner viewport: 1, 7.5, 9.2, 11.1
#selecionando os eixos
Axes: 1, 7.7, 9.2, 0
#comandos abaixo são as medidas que serão impressas no Praat Picture
Text: 1.1, "Left", 0.5, "Half", "f0 CPP: ##'f0cpp.f0:2' Hz#"
Text: 1.1, "Left", 1.5, "Half", "Média f0: ##'medidasf0.media:2' Hz#"
Text: 1.1, "Left", 2.5, "Half", "Desvio padrão f0: ##'medidasf0.dp:2' Hz#"
Text: 1.1, "Left", 3.5, "Half", "Coeficiente de variação f0: ##'medidasf0.cv:2'\% #"
Text: 1.1, "Left", 4.5, "Half", "1ª quartil f0: ##'medidasf0.q1:2' Hz#"
Text: 1.1, "Left", 5.5, "Half", "Mediana f0: ##'medidasf0.mediana:2' Hz#"
Text: 1.1, "Left", 6.5, "Half", "3ª quartil f0: ##'medidasf0.q3:2' Hz#"
Text: 1.1, "Left", 7.5, "Half", "Mínimo f0: ##'medidasf0.min:2' Hz#"
Text: 1.1, "Left", 8.5, "Half", "Máximo f0: ##'medidasf0.max:2' Hz#"
Text: 2.9, "Left", 0.5, "Half", "Amplitude f0: ##'medidasf0.amplitude:2' Hz#"
Text: 2.9, "Left", 1.5, "Half", "Jitter (local): ##'medidasjitter.jitter_loc_perc:2'\% #"
Text: 2.9, "Left", 2.5, "Half", "Jitter (RAP): ##'medidasjitter.jitter_rap_perc:2'\% #"
Text: 2.9, "Left", 3.5, "Half", "Jitter (PPQ5): ##'medidasjitter.jitter_ppq5_perc:2'\% #"
Text: 2.9, "Left", 4.5, "Half", "Shimmer (local): ##'medidasshimmer.shimmer_loc_perc:2'\% #"
Text: 2.9, "Left", 5.5, "Half", "Shimmer (dB): ##'medidasshimmer.shimmer_db:2' dB #"
Text: 2.9, "Left", 6.5, "Half", "Shimmer (APQ3): ##'medidasshimmer.shimmer_apq3_perc:2'\% #"
Text: 2.9, "Left", 7.5, "Half", "Shimmer (APQ5): ##'medidasshimmer.shimmer_apq5_perc:2'\% #"
Text: 2.9, "Left", 8.5, "Half", "Shimmer (APQ11): ##'medidasshimmer.shimmer_apq11_perc:2'\% #"
Text: 4.4, "Left", 0.5, "Half", "Média HNR: ##'medidashnr.media:2' dB #"
Text: 4.4, "Left", 1.5, "Half", "Desvio padrão HNR: ##'medidashnr.dp:2' dB #"
Text: 4.4, "Left", 2.5, "Half", "Mínimo HNR: ##'medidashnr.min:2' dB #"
Text: 4.4, "Left", 3.5, "Half", "Máximo HNR: ##'medidashnr.max:2' dB #"
Text: 4.4, "Left", 4.5, "Half", "GNE 1 kHz: ##'medidasgne.gne1:2' #"
Text: 4.4, "Left", 5.5, "Half", "GNE 2 kHz: ##'medidasgne.gne2:2' #"
Text: 4.4, "Left", 6.5, "Half", "GNE 3 kHz: ##'medidasgne.gne3:2' #"
#selecioando uma área no Praat Picture
Select inner viewport: 1, 7.5, 9.2, 11.1
#desenha uma caixa (retângulo) no contorno da área selecionada
Draw inner box
#selecioando uma área do tamanho de um folha A4 no Praat Picture
Select inner viewport: 0, 8.26, 0, 11.69
#criando variável e retirando a string ".wav"
.nome$=nome_audio$ - ".wav"
#salvar imagem do Praat Picture em PDF
#Save as PDF file: pastasaida$ + .nome$ + ".pdf"
#salvar imagem do Praat Picture em PNG com 600 dpi
#Save as 600-dpi PNG file: pastasaida$ + .nome$ +".png"
#salvar imagem do Praat Picture em PNG com 300 dpi
Save as 300-dpi PNG file: pastasaida$ + .nome$ +".png"
endproc
#procedimento p/ inserir os valores das medidas na tabela
procedure tabmedidasf0
#selecionando tabela
select tabela_medidas
#Comando p/ acrescentar linha
Append row
#variável que recebe o número da linha
.r = Get number of rows
# Comandos p/ preencher tabela com strings e valores das medidas
Set string value: .r,"Indice", nome_audio$-".wav"
Set numeric value: .r, "f0CPP", f0cpp.f0
Set numeric value: .r, "Mediaf0", medidasf0.media
Set numeric value: .r, "DPf0", medidasf0.dp
Set numeric value: .r, "CVf0", medidasf0.cv
Set numeric value: .r, "Medianaf0", medidasf0.mediana
Set numeric value: .r, "1ªquartil", medidasf0.q1
Set numeric value: .r, "3ªquartil", medidasf0.q3
Set numeric value: .r, "Maxf0", medidasf0.max
Set numeric value: .r, "Minf0", medidasf0.min
Set numeric value: .r, "Amplitude", medidasf0.amplitude
Set numeric value: .r, "ProporcaoMinMAxf0", medidasf0.propminmax
Set numeric value: .r, "jitter_local", medidasjitter.jitter_loc_perc
Set numeric value: .r, "RAP", medidasjitter.jitter_rap_perc
Set numeric value: .r, "PPQ5", medidasjitter.jitter_ppq5_perc
Set numeric value: .r, "shimmer_local", medidasshimmer.shimmer_loc_perc
Set numeric value: .r, "shimmer_dB", medidasshimmer.shimmer_db
Set numeric value: .r, "APQ3", medidasshimmer.shimmer_apq3_perc
Set numeric value: .r, "APQ5", medidasshimmer.shimmer_apq5_perc
Set numeric value: .r, "APQ11", medidasshimmer.shimmer_apq11_perc
Set numeric value: .r, "MediaHNR", medidashnr.media
Set numeric value: .r, "DP_HNR", medidashnr.dp
Set numeric value: .r, "MinHNR", medidashnr.min
Set numeric value: .r, "MaxHNR", medidashnr.max
Set numeric value: .r, "GNE_1kHz", medidasgne.gne1
Set numeric value: .r, "GNE_2kHz", medidasgne.gne2
Set numeric value: .r, "GNE_3kHz", medidasgne.gne3
endproc
include diretorio.praat
lista_audio=Create Strings as file list: "lista_audio", pastaentrada$+"*.wav"
#seleciona objeto lista_audio
select lista_audio
#Quantidade de strings(audios)
num_audio = Get number of strings
cpp_tabela_columns$ = "Indice CPP CPPS"
cpp_tabela = Create Table with column names: "cpp_tabela", 0, cpp_tabela_columns$
for cont_audio from 1 to num_audio
select lista_audio
#variavel recebe string referente a posição cont_audio
nome_audio$ = Get string: cont_audio
#abrir aquivo de audio
audio = Read from file: pastaentrada$+nome_audio$
@medidascepstrais
@tabmedidascepstrais
select audio
Remove
endfor
select cpp_tabela
Save as comma-separated file: pastasaida$ + "cepstrais.csv"
select cpp_tabela
plus lista_audio
Remove
procedure medidascepstrais
#selecionando o objeto áudio
select audio
#variável que armazena o objeto cepstrograma
.cepstrograma =To PowerCepstrogram: 60, 0.002, 5000, 50
#selecionando o objeto cepstrograma
select .cepstrograma
#variável que armazana o objeto cepstro
.cepstrogramamarginal=To PowerCepstrum (slice): 0.1
#selecionando o objeto cepstro
select .cepstrogramamarginal
#extraindo a quefrency
#.quefrency=Get quefrency of peak: 60, 333.3, "parabolic"
#calculando f0 do cpp
#.f0=1/.quefrency
.pico_cpp=Get peak prominence: 60, 333.3, "cubic", 0.001, 0, "Straight", "Robust"
select .cepstrograma
.pico_cpps=Get CPPS: "no", 0.01, 0.001, 60, 330, 0.05, "parabolic", 0.001, 0, "Straight", "Robust"
#Selecionando e removendo os objetos cepstrograma e cepstrogramamarginal
select .cepstrograma
plus .cepstrogramamarginal
Remove
endproc
procedure tabmedidascepstrais
select cpp_tabela
Append row
.r = Get number of rows
Set string value: .r,"Indice", nome_audio$
Set numeric value: .r, "CPP", medidascepstrais.pico_cpp
Set numeric value: .r, "CPPS", medidascepstrais.pico_cpps
endproc
#incrementando o relatório com CPP e CPPS
#chamando o script diretorio.praat
include diretorio.praat
#Criando lista de strings com o caminho especificado pelo usuário
lista_audio=Create Strings as file list: "lista_audio", pastaentrada$+"*.wav"
#seleciona objeto lista_audio
select lista_audio
#quantidade de arquivos de audio
num_audio = Get number of strings
#Criando os nomes dos atributos das medidas que serão alocadas na tabela
tabela_medidas_columns$ = "Indice f0CPP Mediaf0 DPf0 CVf0 Medianaf0 1ªquartil 3ªquartil Maxf0 Minf0 Amplitude
... ProporcaoMinMAxf0 jitter_local RAP PPQ5 shimmer_local shimmer_dB APQ3 APQ5 APQ11 MediaHNR DP_HNR MinHNR MaxHNR
... GNE_1kHz GNE_2kHz GNE_3kHz CPP CPPS Quefrency"
# Criando tabela e colocando os nomes dos atributos
tabela_medidas = Create Table with column names: "tabela_medidas", 0, tabela_medidas_columns$
#Início da estrutura de repetição
for cont_audio from 1 to num_audio
#selecionando a lista de áudio
select lista_audio
#variável recebe string referente a posição cont_audio
nome_audio$ = Get string: cont_audio
#ler aquivo de áudio
audio = Read from file: pastaentrada$+nome_audio$
#argumentos para serem preenchidos de f0
piso=75
teto=600
oitava=0.01
saltooitava=0.35
#chamando o procedimento medidasf0
@medidasf0: piso, oitava, saltooitava,teto
#chamando o procedimento medidascepstrais
@medidascepstrais
#Teste para atualizar argumentos de f0 e a rerência é f0cpp
#Primeira condição verifica o min e max de f0 e os compara com o valor de f0cpp
if (medidasf0.min < (0.65*medidascepstrais.f0)) or (medidasf0.max > (1.65*medidascepstrais.f0))
#atualizando argumentos custo de oitava e salto de oitava
oitava=0.04
saltooitava=0.5
#chamando o procedimento medidasf0
@medidasf0: piso, oitava, saltooitava, teto
endif
#realizado o teste com as mesmas condições novamente
#o objetivo é atualizar valores de referência de frequência inferior e superior
#caso o teste anterior não tenha sido eficiente
if (medidasf0.min < (0.65*medidascepstrais.f0)) or (medidasf0.max > (1.65*medidascepstrais.f0))
#atualizando argumentos de limites inferior e superior de f0, custo de oitava e salto de oitava
piso=0.6 * medidascepstrais.f0
teto=1.4 * medidascepstrais.f0
oitava=0.04
saltooitava=0.5
#chamando o procedimento medidasf0
@medidasf0: piso, oitava, saltooitava, teto
endif
#chamando o procedimento medidasjitter
@medidasjitter
#chamando o procedimento medidasshimmer
@medidasshimmer
#chamando o procedimento medidashnr
@medidashnr
#chamando o procedimento medidashnr
@medidasgne
#chamando o procedimento oscilograma
@oscilograma
#chamando o procedimento contornof0
@contornof0
#chamando o procedimento espectrograma
@espectrograma
#chamando o procedimento graficocpp
@graficocpp
#chamando o procedimento imprimirmedidas
@imprimirmedidas
#chamando o procedimento tabmedidasf0
@tabmedidasf0
#selecionado e removendo o objeto áudio
select audio
Remove
#fim da estrutura for
endfor
#selecionado a tabela com os valores das medidas
select tabela_medidas
#salvando essa tabela em uma planhilha .csv
Save as comma-separated file: pastasaida$ + "medidas.csv"
#Selecionando a tabela com as medidas
select tabela_medidas
#adicionando na seleção a lista das strings
plus lista_audio
plus medidasf0.f0lista
plus medidasjitter.pontos
plus medidascepstrais.cepstrogramamarginal
# removendo os objetos selecionados
Remove
#procedimento para extrair f0 e suas medidas
procedure medidasf0: .piso, .oitava, .saltooitava, .teto
if variableExists(".f0lista")
select .f0lista
Remove
endif
select audio
#armazenando na variável .f0lista os valores de f0
.f0lista=To Pitch (cc): 0, .piso, 15, "no", 0.03, 0.45, .oitava, .saltooitava, 0.14, .teto
#selecionando o objeto .f0lista
select .f0lista
#valor mínimo de f0
.min=Get minimum: 0, 0, "Hertz", "parabolic"
#valor máximo de f0
.max=Get maximum: 0, 0, "Hertz", "parabolic"
#valor da mediana de f0
.mediana=Get quantile: 0, 0, 0.5, "Hertz"
#valor da média de f0
.media=Get mean: 0, 0, "Hertz"
#valor do desvio padrão de f0
.dp=Get standard deviation: 0, 0, "Hertz"
#valor do 1ª quartil de f0
.q1=Get quantile: 0, 0, 0.25, "Hertz"
#valor do 3ª quartil de f0
.q3=Get quantile: 0, 0, 0.75, "Hertz"
#cálculo do coeficiente de variação de f0
.cv=(.dp/.media)*100
#cálculo da amplitude de f0
.amplitude=.max-.min
#relação de proporção en o mínino e o máximo de f0
.propminmax=.min/.max
endproc
#procedimento para extrair as medidas cepstrais
procedure medidascepstrais
if variableExists(".cepstrogramamarginal")
select .cepstrogramamarginal
Remove
endif
#selecionando o objeto áudio
select audio
#variável que armazena o objeto cepstrograma
.cepstrograma =To PowerCepstrogram: 60, 0.002, 5000, 50
#selecionando o objeto cepstrograma
select .cepstrograma
#variável que armazana o objeto cepstro
.cepstrogramamarginal=To PowerCepstrum (slice): 0.1
#selecionando o objeto cepstro
select .cepstrogramamarginal
#extraindo a quefrency
.quefrency=Get quefrency of peak: 60, 333.3, "parabolic"
#calculando f0 do cpp
.f0=1/.quefrency
.pico_cpp=Get peak prominence: 60, 333.3, "cubic", 0.001, 0, "Straight", "Robust"
.maximocepstro = Get peak: 60, 330, "None"
select .cepstrograma
.pico_cpps=Get CPPS: "no", 0.01, 0.001, 60, 330, 0.05, "parabolic", 0.001, 0, "Straight", "Robust"
#Selecionando e removendo os objetos cepstrograma e cepstrogramamarginal
select .cepstrograma
Remove
endproc
procedure medidasjitter
if variableExists(".pontos")
select .pontos
Remove
endif
select audio
plus medidasf0.f0lista
.pontos=To PointProcess (cc)
select .pontos
.jitter_loc=Get jitter (local): 0, 0, 0.0001, 0.02, 1.3
.jitter_loc_perc=.jitter_loc*100
.jitter_rap=Get jitter (rap): 0, 0, 0.0001, 0.02, 1.3
.jitter_rap_perc=.jitter_rap*100
.jitter_ppq5=Get jitter (ppq5): 0, 0, 0.0001, 0.02, 1.3
.jitter_ppq5_perc=.jitter_ppq5*100
endproc
procedure medidasshimmer
select audio
plus medidasjitter.pontos
.shimmer_loc=Get shimmer (local): 0, 0, 0.0001, 0.02, 1.3, 1.6
.shimmer_loc_perc=.shimmer_loc*100
.shimmer_db=Get shimmer (local_dB): 0, 0, 0.0001, 0.02, 1.3, 1.6
.shimmer_apq3=Get shimmer (apq3): 0, 0, 0.0001, 0.02, 1.3, 1.6
.shimmer_apq3_perc=.shimmer_apq3*100
.shimmer_apq5=Get shimmer (apq5): 0, 0, 0.0001, 0.02, 1.3, 1.6
.shimmer_apq5_perc=.shimmer_apq5*100
.shimmer_apq11=Get shimmer (apq11): 0, 0, 0.0001, 0.02, 1.3, 1.6
.shimmer_apq11_perc=.shimmer_apq11*100
endproc
procedure medidashnr
select audio
.hnrlista= To Harmonicity (cc): 0.01, medidasf0.piso, 0.1, 1
select .hnrlista
.media=Get mean: 0, 0
.dp=Get standard deviation: 0, 0
.min=Get minimum: 0, 0, "parabolic"
.max=Get maximum: 0, 0, "parabolic"
select .hnrlista
Remove
endproc
procedure medidasgne
select audio
.gne1matriz=noprogress To Harmonicity (gne): 500, 4500, 1000, 80
select audio
.gne2matriz=noprogress To Harmonicity (gne): 1000, 4000, 2000, 100
select audio
.gne3matriz=noprogress To Harmonicity (gne): 1500, 3500, 3000, 100
select .gne1matriz
.gne1=Get maximum
select .gne2matriz
.gne2=Get maximum
select .gne3matriz
.gne3=Get maximum
select .gne1matriz
plus .gne2matriz
plus .gne3matriz
Remove
endproc
#procedimento para desenhar o oscilograma
procedure oscilograma
#seleciona o objeto áudio
select audio
#duração total do áudio
.duracaotot = Get total duration
#valor mínimo da amplitude do áudio
.amplitudemin = Get minimum: 0, 0, "sinc70"
#valor máximo da amplitude do áudio
.amplitudemax = Get maximum: 0, 0, "sinc70"
#apagando tudo da janela Praat Picture
Erase all
#selecionado o tipo de linha
Solid line
#Largura da linha
Line width: 1
#selecionando cor
Black
#selecionando fonte
Helvetica
#selecionando área da janela Praat Picture
Select inner viewport: 1, 5.5, 0.5, 1
#tamanho da fonte
Font size: 12
#selecioando eixos
Axes: 1.5, 5.5, 0.5, 0.8
#texto que será impresso com seus parâmetros
Text: 2.7, "Left", 0.5, "Half", "##Relatório acústico do arquivo de voz 'nome_audio$'"
#tamanho da fonte
Font size: 8
#selecionando área da janela Praat Picture
Select inner viewport: 1, 7.5, 1.1, 2.1
#seleção do objeto áudio
select audio
#desenhado o objeto áudio
Draw: 0, 0, 0, 0, "no", "Curve"
#desenha uma caixa (retângulo) no contorno da figura
Draw inner box
#Os comandos abaixo são para escrever os parâmetros referentes aos eixos vertical e horizontal do oscilograma
One mark left: .amplitudemin, "no", "yes", "no", "'.amplitudemin:2'"
One mark left: .amplitudemax, "no", "yes", "no", "'.amplitudemax:2'"
Text left: "no", "Amplitude (Pa)"
One mark bottom: 0, "no", "yes", "no", "0.00"
One mark bottom: .duracaotot, "no", "yes", "no", "'.duracaotot:2'"
Text bottom: "no", "Tempo (s)"
endproc
#procedimento para desenhar o contorno de f0 no tempo
procedure contornof0
#tamanho da fonte
Font size: 8
#selecionando área da janela Praat Picture
Select inner viewport: 1, 7.5, 2.4, 3.4
#seleção do objeto com os valores de f0
select medidasf0.f0lista
#Cor do contorno
Colour: "red"
#desenhando o contorno
Draw: 0, 0, 0, 500, "no"
#desenha uma caixa (retângulo) no contorno da figura
Draw inner box
#Os comandos abaixo são para escrever os parâmetros referentes aos eixos vertical e horizontal do contorno de f0
One mark left: 0, "no", "yes", "no", "0"
One mark left: 100, "no", "yes", "no", "100"
One mark left: 200, "no", "yes", "no", "200"
One mark left: 300, "no", "yes", "no", "300"
One mark left: 400, "no", "yes", "no", "400"
One mark left: 500, "no", "yes", "no", "500"
Colour: "black"
Text right: "no", "f0 (Hz)"
One mark bottom: 0, "no", "yes", "no", "0.00"
One mark bottom: oscilograma.duracaotot, "no", "yes", "no", "'oscilograma.duracaotot:2'"
Text bottom: "no", "Tempo (s)"
endproc
procedure espectrograma
select audio
.espectrograma_estreito=noprogress To Spectrogram... 0.03 2000 0.002 20 Gaussian
select audio
.espectrograma_largo=noprogress To Spectrogram... 0.005 5000 0.002 20 Gaussian
Select inner viewport: 1, 7.5, 3.7, 5.2
select .espectrograma_estreito
Paint: 0, 0, 0, 2000, 100, "yes", 50, 6, 0, "no"
Draw inner box
One mark left: 0, "no", "yes", "no", "0"
One mark left: 1000, "no", "yes", "no", "1"
One mark left: 2000, "no", "yes", "no", "2"
Text right: "no", "Frequência (kHz)"
One mark bottom: 0, "no", "yes", "no", "0.00"
One mark bottom: oscilograma.duracaotot, "no", "yes", "no", "'oscilograma.duracaotot:2'"
Text bottom: "no", "Tempo (s)"
Select inner viewport: 1, 7.5, 5.5, 7
select .espectrograma_largo
Paint: 0, 0, 0, 5000, 100, "yes", 50, 6, 0, "no"
Draw inner box
One mark left: 0, "no", "yes", "no", "0"
One mark left: 1000, "no", "yes", "no", "1"
One mark left: 2000, "no", "yes", "no", "2"
One mark left: 3000, "no", "yes", "no", "3"
One mark left: 4000, "no", "yes", "no", "4"
One mark left: 5000, "no", "yes", "no", "5"
Text right: "no", "Frequência (kHz)"
One mark bottom: 0, "no", "yes", "no", "0.00"
One mark bottom: oscilograma.duracaotot, "no", "yes", "no", "'oscilograma.duracaotot:2'"
Text bottom: "no", "Tempo (s)"
select .espectrograma_estreito
plus .espectrograma_largo
Remove
endproc
procedure graficocpp
Select inner viewport: 1, 3.5, 7.3, 8.9
select medidascepstrais.cepstrogramamarginal
Draw: 0, 0, 0, medidascepstrais.maximocepstro, "no"
Colour: "red"
Draw trend line: 0, 0, 0, medidascepstrais.maximocepstro, 0.001, 0.05, "straight", "robust slow"
Draw inner box
One mark left: 0, "no", "yes", "no", "0"
One mark left: medidascepstrais.maximocepstro, "no", "yes", "no", "'medidascepstrais.maximocepstro:2'"
Colour: "black"
Text left: "no", "Amplitude (dB)"
One mark bottom: 0, "no", "yes", "no", "0"
One mark bottom: 0.0512, "no", "yes", "no", "0.0512"
Text bottom: "no", "Quefrency (s)"
endproc
#procedimento para imprimir as medidas no Praat Picture
procedure imprimirmedidas
#tamanho da fonte
Font size: 8
#selecioando uma área no Praat Picture
Select inner viewport: 1, 7.5, 9.2, 11.1
#selecionando os eixos
Axes: 1, 7.7, 9.2, 0
#comandos abaixo são as medidas que serão impressas no Praat Picture
Text: 1.1, "Left", 0.5, "Half", "f0 CPP: ##'medidascepstrais.f0:2' Hz#"
Text: 1.1, "Left", 1.5, "Half", "Média f0: ##'medidasf0.media:2' Hz#"
Text: 1.1, "Left", 2.5, "Half", "Desvio padrão f0: ##'medidasf0.dp:2' Hz#"
Text: 1.1, "Left", 3.5, "Half", "Coeficiente de variação f0: ##'medidasf0.cv:2'\% #"
Text: 1.1, "Left", 4.5, "Half", "1ª quartil f0: ##'medidasf0.q1:2' Hz#"
Text: 1.1, "Left", 5.5, "Half", "Mediana f0: ##'medidasf0.mediana:2' Hz#"
Text: 1.1, "Left", 6.5, "Half", "3ª quartil f0: ##'medidasf0.q3:2' Hz#"
Text: 1.1, "Left", 7.5, "Half", "Mínimo f0: ##'medidasf0.min:2' Hz#"
Text: 1.1, "Left", 8.5, "Half", "Máximo f0: ##'medidasf0.max:2' Hz#"
Text: 3.1, "Left", 0.5, "Half", "Amplitude f0: ##'medidasf0.amplitude:2' Hz#"
Text: 3.1, "Left", 1.5, "Half", "Jitter (local): ##'medidasjitter.jitter_loc_perc:2'\% #"
Text: 3.1, "Left", 2.5, "Half", "Jitter (RAP): ##'medidasjitter.jitter_rap_perc:2'\% #"
Text: 3.1, "Left", 3.5, "Half", "Jitter (PPQ5): ##'medidasjitter.jitter_ppq5_perc:2'\% #"
Text: 3.1, "Left", 4.5, "Half", "Shimmer (local): ##'medidasshimmer.shimmer_loc_perc:2'\% #"
Text: 3.1, "Left", 5.5, "Half", "Shimmer (dB): ##'medidasshimmer.shimmer_db:2' dB #"
Text: 3.1, "Left", 6.5, "Half", "Shimmer (APQ3): ##'medidasshimmer.shimmer_apq3_perc:2'\% #"
Text: 3.1, "Left", 7.5, "Half", "Shimmer (APQ5): ##'medidasshimmer.shimmer_apq5_perc:2'\% #"
Text: 3.1, "Left", 8.5, "Half", "Shimmer (APQ11): ##'medidasshimmer.shimmer_apq11_perc:2'\% #"
Text: 4.6, "Left", 0.5, "Half", "Média HNR: ##'medidashnr.media:2' dB #"
Text: 4.6, "Left", 1.5, "Half", "Desvio padrão HNR: ##'medidashnr.dp:2' dB #"
Text: 4.6, "Left", 2.5, "Half", "Mínimo HNR: ##'medidashnr.min:2' dB #"
Text: 4.6, "Left", 3.5, "Half", "Máximo HNR: ##'medidashnr.max:2' dB #"
Text: 4.6, "Left", 4.5, "Half", "GNE 1 kHz: ##'medidasgne.gne1:2' #"
Text: 4.6, "Left", 5.5, "Half", "GNE 2 kHz: ##'medidasgne.gne2:2' #"
Text: 4.6, "Left", 6.5, "Half", "GNE 3 kHz: ##'medidasgne.gne3:2' #"
Text: 4.6, "Left", 7.5, "Half", "CPP: ##'medidascepstrais.pico_cpp:2' dB #"
Text: 4.6, "Left", 8.5, "Half", "CPPS: ##'medidascepstrais.pico_cpps:2' dB #"
Text: 6.4, "Left", 0.5, "Half", "Quefrency: ##'medidascepstrais.quefrency:5' s #"
#selecioando uma área no Praat Picture
Select inner viewport: 1, 7.5, 9.2, 11.1
#desenha uma caixa (retângulo) no contorno da área selecionada
Draw inner box
#selecioando uma área do tamanho de um folha A4 no Praat Picture
Select inner viewport: 0, 8.26, 0, 11.69
#criando variável e retirando a string ".wav"
.nome$=nome_audio$ - ".wav"
#salvar imagem do Praat Picture em PDF
#Save as PDF file: pastasaida$ + .nome$ + ".pdf"
#salvar imagem do Praat Picture em PNG com 600 dpi
#Save as 600-dpi PNG file: pastasaida$ + .nome$ +".png"
#salvar imagem do Praat Picture em PNG com 300 dpi
Save as 300-dpi PNG file: pastasaida$ + .nome$ +".png"
endproc
#procedimento p/ inserir os valores das medidas na tabela
procedure tabmedidasf0
#selecionando tabela
select tabela_medidas
#Comando p/ acrescentar linha
Append row
#variável que recebe o número da linha
.r = Get number of rows
# Comandos p/ preencher tabela com strings e valores das medidas
Set string value: .r,"Indice", nome_audio$-".wav"
Set numeric value: .r, "f0CPP", medidascepstrais.f0
Set numeric value: .r, "Mediaf0", medidasf0.media
Set numeric value: .r, "DPf0", medidasf0.dp
Set numeric value: .r, "CVf0", medidasf0.cv
Set numeric value: .r, "Medianaf0", medidasf0.mediana
Set numeric value: .r, "1ªquartil", medidasf0.q1
Set numeric value: .r, "3ªquartil", medidasf0.q3
Set numeric value: .r, "Maxf0", medidasf0.max
Set numeric value: .r, "Minf0", medidasf0.min
Set numeric value: .r, "Amplitude", medidasf0.amplitude
Set numeric value: .r, "ProporcaoMinMAxf0", medidasf0.propminmax
Set numeric value: .r, "jitter_local", medidasjitter.jitter_loc_perc
Set numeric value: .r, "RAP", medidasjitter.jitter_rap_perc
Set numeric value: .r, "PPQ5", medidasjitter.jitter_ppq5_perc
Set numeric value: .r, "shimmer_local", medidasshimmer.shimmer_loc_perc
Set numeric value: .r, "shimmer_dB", medidasshimmer.shimmer_db
Set numeric value: .r, "APQ3", medidasshimmer.shimmer_apq3_perc
Set numeric value: .r, "APQ5", medidasshimmer.shimmer_apq5_perc
Set numeric value: .r, "APQ11", medidasshimmer.shimmer_apq11_perc
Set numeric value: .r, "MediaHNR", medidashnr.media
Set numeric value: .r, "DP_HNR", medidashnr.dp
Set numeric value: .r, "MinHNR", medidashnr.min
Set numeric value: .r, "MaxHNR", medidashnr.max
Set numeric value: .r, "GNE_1kHz", medidasgne.gne1
Set numeric value: .r, "GNE_2kHz", medidasgne.gne2
Set numeric value: .r, "GNE_3kHz", medidasgne.gne3
Set numeric value: .r, "CPP", medidascepstrais.pico_cpp
Set numeric value: .r, "CPPS", medidascepstrais.pico_cpps
Set numeric value: .r, "Quefrency", medidascepstrais.quefrency
endproc
#Relatório Finalizado
#chamando o script diretorio.praat
include diretorio.praat
#Criando lista de strings com o caminho especificado pelo usuário
lista_audio=Create Strings as file list: "lista_audio", pastaentrada$+"*.wav"
#seleciona objeto lista_audio
select lista_audio
#quantidade de arquivos de audio
num_audio = Get number of strings
#Criando os nomes dos atributos das medidas que serão alocadas na tabela
tabela_medidas_columns$ = "Indice f0CPP Mediaf0 DPf0 CVf0 Medianaf0 1ªquartil 3ªquartil Maxf0 Minf0 Amplitude
... ProporcaoMinMAxf0 jitter_local RAP PPQ5 shimmer_local shimmer_dB APQ3 APQ5 APQ11 MediaHNR DP_HNR MinHNR MaxHNR
... GNE_1kHz GNE_2kHz GNE_3kHz CPP CPPS Quefrency Declínio Tilt Intensidade"
# Criando tabela e colocando os nomes dos atributos
tabela_medidas = Create Table with column names: "tabela_medidas", 0, tabela_medidas_columns$
#Início da estrutura de repetição
for cont_audio from 1 to num_audio
#selecionando a lista de áudio
select lista_audio
#variável recebe string referente a posição cont_audio
nome_audio$ = Get string: cont_audio
#ler aquivo de áudio
audio = Read from file: pastaentrada$+nome_audio$
select audio
intensidade=Get intensity (dB)
#argumentos para serem preenchidos de f0
piso=75
teto=600
oitava=0.01
saltooitava=0.35
#chamando o procedimento medidasf0
@medidasf0: piso, oitava, saltooitava,teto
#chamando o procedimento medidascepstrais
@medidascepstrais
#Teste para atualizar argumentos de f0 e a rerência é f0cpp
#Primeira condição verifica o min e max de f0 e os compara com o valor de f0cpp
if (medidasf0.min < (0.65*medidascepstrais.f0)) or (medidasf0.max > (1.65*medidascepstrais.f0))
#atualizando argumentos custo de oitava e salto de oitava
oitava=0.04
saltooitava=0.5
#chamando o procedimento medidasf0
@medidasf0: piso, oitava, saltooitava, teto
endif
#realizado o teste com as mesmas condições novamente
#o objetivo é atualizar valores de referência de frequência inferior e superior
#caso o teste anterior não tenha sido eficiente
if (medidasf0.min < (0.65*medidascepstrais.f0)) or (medidasf0.max > (1.65*medidascepstrais.f0))
#atualizando argumentos de limites inferior e superior de f0, custo de oitava e salto de oitava
piso=0.6 * medidascepstrais.f0
teto=1.4 * medidascepstrais.f0
oitava=0.04
saltooitava=0.5
#chamando o procedimento medidasf0
@medidasf0: piso, oitava, saltooitava, teto
endif
#chamando o procedimento medidasjitter
@medidasjitter
#chamando o procedimento medidasshimmer
@medidasshimmer
#chamando o procedimento medidashnr
@medidashnr
#chamando o procedimento medidashnr
@medidasgne
#chamando o procedimento declinio_tilt_espectral
@declinio_tilt_espectral
#chamando o procedimento oscilograma
@oscilograma
#chamando o procedimento contornof0
@contornof0
#chamando o procedimento espectrograma
@espectrograma
#chamando o procedimento graficocpp
@graficocpp
#chamando o procedimento graficoltas
@graficoltas
#chamando o procedimento imprimirmedidas
@imprimirmedidas
#chamando o procedimento tabmedidasf0
@tabmedidasf0
#selecionado e removendo o objeto áudio
select audio
Remove
#fim da estrutura for
endfor
#selecionado a tabela com os valores das medidas
select tabela_medidas
#salvando essa tabela em uma planhilha .csv
Save as comma-separated file: pastasaida$ + "medidas.csv"
#Selecionando a tabela com as medidas
select tabela_medidas
#adicionando na seleção a lista das strings
plus lista_audio
plus medidasf0.f0lista
plus medidasjitter.pontos
plus medidascepstrais.cepstrogramamarginal
plus declinio_tilt_espectral.ltas
# removendo os objetos selecionados
Remove
#procedimento para extrair f0 e suas medidas
procedure medidasf0: .piso, .oitava, .saltooitava, .teto
if variableExists(".f0lista")
select .f0lista
Remove
endif
select audio
#armazenando na variável .f0lista os valores de f0
.f0lista=To Pitch (cc): 0, .piso, 15, "no", 0.03, 0.45, .oitava, .saltooitava, 0.14, .teto
#selecionando o objeto .f0lista
select .f0lista
#valor mínimo de f0
.min=Get minimum: 0, 0, "Hertz", "parabolic"
#valor máximo de f0
.max=Get maximum: 0, 0, "Hertz", "parabolic"
#valor da mediana de f0
.mediana=Get quantile: 0, 0, 0.5, "Hertz"
#valor da média de f0
.media=Get mean: 0, 0, "Hertz"
#valor do desvio padrão de f0
.dp=Get standard deviation: 0, 0, "Hertz"
#valor do 1ª quartil de f0
.q1=Get quantile: 0, 0, 0.25, "Hertz"
#valor do 3ª quartil de f0
.q3=Get quantile: 0, 0, 0.75, "Hertz"
#cálculo do coeficiente de variação de f0
.cv=(.dp/.media)*100
#cálculo da amplitude de f0
.amplitude=.max-.min
#relação de proporção en o mínino e o máximo de f0
.propminmax=.min/.max
endproc
#procedimento para extrair as medidas cepstrais
procedure medidascepstrais
if variableExists(".cepstrogramamarginal")
select .cepstrogramamarginal
Remove
endif
#selecionando o objeto áudio
select audio
#variável que armazena o objeto cepstrograma
.cepstrograma =To PowerCepstrogram: 60, 0.002, 5000, 50
#selecionando o objeto cepstrograma
select .cepstrograma
#variável que armazana o objeto cepstro
.cepstrogramamarginal=To PowerCepstrum (slice): 0.1
#selecionando o objeto cepstro
select .cepstrogramamarginal
#extraindo a quefrency
.quefrency=Get quefrency of peak: 60, 333.3, "parabolic"
#calculando f0 do cpp
.f0=1/.quefrency
.pico_cpp=Get peak prominence: 60, 333.3, "cubic", 0.001, 0, "Straight", "Robust"
.maximocepstro = Get peak: 60, 330, "None"
select .cepstrograma
.pico_cpps=Get CPPS: "no", 0.01, 0.001, 60, 330, 0.05, "parabolic", 0.001, 0, "Straight", "Robust"
#Selecionando e removendo os objetos cepstrograma e cepstrogramamarginal
select .cepstrograma
Remove
endproc
procedure medidasjitter
if variableExists(".pontos")
select .pontos
Remove
endif
select audio
plus medidasf0.f0lista
.pontos=To PointProcess (cc)
select .pontos
.jitter_loc=Get jitter (local): 0, 0, 0.0001, 0.02, 1.3
.jitter_loc_perc=.jitter_loc*100
.jitter_rap=Get jitter (rap): 0, 0, 0.0001, 0.02, 1.3
.jitter_rap_perc=.jitter_rap*100
.jitter_ppq5=Get jitter (ppq5): 0, 0, 0.0001, 0.02, 1.3
.jitter_ppq5_perc=.jitter_ppq5*100
endproc
procedure medidasshimmer
select audio
plus medidasjitter.pontos
.shimmer_loc=Get shimmer (local): 0, 0, 0.0001, 0.02, 1.3, 1.6
.shimmer_loc_perc=.shimmer_loc*100
.shimmer_db=Get shimmer (local_dB): 0, 0, 0.0001, 0.02, 1.3, 1.6
.shimmer_apq3=Get shimmer (apq3): 0, 0, 0.0001, 0.02, 1.3, 1.6
.shimmer_apq3_perc=.shimmer_apq3*100
.shimmer_apq5=Get shimmer (apq5): 0, 0, 0.0001, 0.02, 1.3, 1.6
.shimmer_apq5_perc=.shimmer_apq5*100
.shimmer_apq11=Get shimmer (apq11): 0, 0, 0.0001, 0.02, 1.3, 1.6
.shimmer_apq11_perc=.shimmer_apq11*100
endproc
procedure medidashnr
select audio
.hnrlista= To Harmonicity (cc): 0.01, medidasf0.piso, 0.1, 1
select .hnrlista
.media=Get mean: 0, 0
.dp=Get standard deviation: 0, 0
.min=Get minimum: 0, 0, "parabolic"
.max=Get maximum: 0, 0, "parabolic"
select .hnrlista
Remove
endproc
procedure medidasgne
select audio
.gne1matriz=noprogress To Harmonicity (gne): 500, 4500, 1000, 80
select audio
.gne2matriz=noprogress To Harmonicity (gne): 1000, 4000, 2000, 100
select audio
.gne3matriz=noprogress To Harmonicity (gne): 1500, 3500, 3000, 100
select .gne1matriz
.gne1=Get maximum
select .gne2matriz
.gne2=Get maximum
select .gne3matriz
.gne3=Get maximum
select .gne1matriz
plus .gne2matriz
plus .gne3matriz
Remove
endproc
procedure declinio_tilt_espectral
if variableExists(".ltas")
select .ltas
Remove
endif
select audio
.ltas=To Ltas: 1
select .ltas
.minespectro = Get minimum: 0, 4000, "None"
.maxespectro = Get maximum: 0, 4000, "None"
.declinio = Get slope: 0, 1000, 1000, 10000, "energy"
select .ltas
.linhatend=Compute trend line: 1, 10000
select .linhatend
.tilt = Get slope: 0, 1000, 1000, 10000, "energy"
select .linhatend
Remove
endproc
#procedimento para desenhar o oscilograma
procedure oscilograma
#seleciona o objeto áudio
select audio
#duração total do áudio
.duracaotot = Get total duration
#valor mínimo da amplitude do áudio
.amplitudemin = Get minimum: 0, 0, "sinc70"
#valor máximo da amplitude do áudio
.amplitudemax = Get maximum: 0, 0, "sinc70"
#apagando tudo da janela Praat Picture
Erase all
#selecionado o tipo de linha
Solid line
#Largura da linha
Line width: 1
#selecionando cor
Black
#selecionando fonte
Helvetica
#selecionando área da janela Praat Picture
Select inner viewport: 1, 5.5, 0.5, 1
#tamanho da fonte
Font size: 12
#selecioando eixos
Axes: 1.5, 5.5, 0.5, 0.8
#texto que será impresso com seus parâmetros
Text: 2.7, "Left", 0.5, "Half", "##Relatório acústico do arquivo de voz 'nome_audio$'"
#tamanho da fonte
Font size: 8
#selecionando área da janela Praat Picture
Select inner viewport: 1, 7.5, 1.1, 2.1
#seleção do objeto áudio
select audio
#desenhado o objeto áudio
Draw: 0, 0, 0, 0, "no", "Curve"
#desenha uma caixa (retângulo) no contorno da figura
Draw inner box
#Os comandos abaixo são para escrever os parâmetros referentes aos eixos vertical e horizontal do oscilograma
One mark left: .amplitudemin, "no", "yes", "no", "'.amplitudemin:2'"
One mark left: .amplitudemax, "no", "yes", "no", "'.amplitudemax:2'"
Text left: "no", "Amplitude (Pa)"
One mark bottom: 0, "no", "yes", "no", "0.00"
One mark bottom: .duracaotot, "no", "yes", "no", "'.duracaotot:2'"
Text bottom: "no", "Tempo (s)"
endproc
#procedimento para desenhar o contorno de f0 no tempo
procedure contornof0
#tamanho da fonte
Font size: 8
#selecionando área da janela Praat Picture
Select inner viewport: 1, 7.5, 2.4, 3.4
#seleção do objeto com os valores de f0
select medidasf0.f0lista
#Cor do contorno
Colour: "red"
#desenhando o contorno
Draw: 0, 0, 0, 500, "no"
#desenha uma caixa (retângulo) no contorno da figura
Draw inner box
#Os comandos abaixo são para escrever os parâmetros referentes aos eixos vertical e horizontal do contorno de f0
One mark left: 0, "no", "yes", "no", "0"
One mark left: 100, "no", "yes", "no", "100"
One mark left: 200, "no", "yes", "no", "200"
One mark left: 300, "no", "yes", "no", "300"
One mark left: 400, "no", "yes", "no", "400"
One mark left: 500, "no", "yes", "no", "500"
Colour: "black"
Text right: "no", "f0 (Hz)"
One mark bottom: 0, "no", "yes", "no", "0.00"
One mark bottom: oscilograma.duracaotot, "no", "yes", "no", "'oscilograma.duracaotot:2'"
Text bottom: "no", "Tempo (s)"
endproc
procedure espectrograma
select audio
.espectrograma_estreito=noprogress To Spectrogram... 0.03 2000 0.002 20 Gaussian
select audio
.espectrograma_largo=noprogress To Spectrogram... 0.005 5000 0.002 20 Gaussian
Select inner viewport: 1, 7.5, 3.7, 5.2
select .espectrograma_estreito
Paint: 0, 0, 0, 2000, 100, "yes", 50, 6, 0, "no"
Draw inner box
One mark left: 0, "no", "yes", "no", "0"
One mark left: 1000, "no", "yes", "no", "1"
One mark left: 2000, "no", "yes", "no", "2"
Text right: "no", "Frequência (kHz)"
One mark bottom: 0, "no", "yes", "no", "0.00"
One mark bottom: oscilograma.duracaotot, "no", "yes", "no", "'oscilograma.duracaotot:2'"
Text bottom: "no", "Tempo (s)"
Select inner viewport: 1, 7.5, 5.5, 7
select .espectrograma_largo
Paint: 0, 0, 0, 5000, 100, "yes", 50, 6, 0, "no"
Draw inner box
One mark left: 0, "no", "yes", "no", "0"
One mark left: 1000, "no", "yes", "no", "1"
One mark left: 2000, "no", "yes", "no", "2"
One mark left: 3000, "no", "yes", "no", "3"
One mark left: 4000, "no", "yes", "no", "4"
One mark left: 5000, "no", "yes", "no", "5"
Text right: "no", "Frequência (kHz)"
One mark bottom: 0, "no", "yes", "no", "0.00"
One mark bottom: oscilograma.duracaotot, "no", "yes", "no", "'oscilograma.duracaotot:2'"
Text bottom: "no", "Tempo (s)"
select .espectrograma_estreito
plus .espectrograma_largo
Remove
endproc
procedure graficocpp
Select inner viewport: 1, 3.5, 7.3, 9
select medidascepstrais.cepstrogramamarginal
Draw: 0, 0, 0, medidascepstrais.maximocepstro, "no"
Colour: "red"
Draw trend line: 0, 0, 0, medidascepstrais.maximocepstro, 0.001, 0.05, "straight", "robust slow"
Draw inner box
One mark left: 0, "no", "yes", "no", "0"
One mark left: medidascepstrais.maximocepstro, "no", "yes", "no", "'medidascepstrais.maximocepstro:2'"
Colour: "black"
Text left: "no", "Amplitude (dB)"
One mark bottom: 0, "no", "yes", "no", "0"
One mark bottom: 0.0512, "no", "yes", "no", "0.0512"
Text bottom: "no", "Quefrency (s)"
endproc
procedure graficoltas
Select inner viewport: 4, 7.5, 7.3, 9
select declinio_tilt_espectral.ltas
Draw: 0, 4000, declinio_tilt_espectral.minespectro, declinio_tilt_espectral.maxespectro, "no", "Curve"
Draw inner box
One mark left: declinio_tilt_espectral.minespectro, "no", "yes", "no", "'declinio_tilt_espectral.minespectro:2'"
One mark left: declinio_tilt_espectral.maxespectro, "no", "yes", "no", "'declinio_tilt_espectral.maxespectro:2'"
Text left: "no", "SPL (dB/Hz)"
One mark bottom: 0, "no", "yes", "no", "0"
One mark bottom: 4000, "no", "yes", "no", "4"
Text bottom: "no", "Frequência (kHz)"
endproc
#procedimento para imprimir as medidas no Praat Picture
procedure imprimirmedidas
#tamanho da fonte
Font size: 8
#selecioando uma área no Praat Picture
Select inner viewport: 1, 7.5, 9.4, 11.1
#selecionando os eixos
Axes: 1, 7.7, 9.4, 0
#comandos abaixo são as medidas que serão impressas no Praat Picture
Text: 1.1, "Left", 1.5, "Half", "f0 CPP: ##'medidascepstrais.f0:2' Hz#"
Text: 1.1, "Left", 2.5, "Half", "Média f0: ##'medidasf0.media:2' Hz#"
Text: 1.1, "Left", 3.5, "Half", "Desvio padrão f0: ##'medidasf0.dp:2' Hz#"
Text: 1.1, "Left", 4.5, "Half", "Coeficiente de variação f0: ##'medidasf0.cv:2'\% #"
Text: 1.1, "Left", 5.5, "Half", "1ª quartil f0: ##'medidasf0.q1:2' Hz#"
Text: 1.1, "Left", 6.5, "Half", "Mediana f0: ##'medidasf0.mediana:2' Hz#"
Text: 1.1, "Left", 7.5, "Half", "3ª quartil f0: ##'medidasf0.q3:2' Hz#"
Text: 1.1, "Left", 8.5, "Half", "Mínimo f0: ##'medidasf0.min:2' Hz#"
Text: 3, "Left", 1.5, "Half", "Máximo f0: ##'medidasf0.max:2' Hz#"
Text: 3, "Left", 2.5, "Half", "Amplitude f0: ##'medidasf0.amplitude:2' Hz#"
Text: 3, "Left", 3.5, "Half", "Jitter (local): ##'medidasjitter.jitter_loc_perc:2'\% #"
Text: 3, "Left", 4.5, "Half", "Jitter (RAP): ##'medidasjitter.jitter_rap_perc:2'\% #"
Text: 3, "Left", 5.5, "Half", "Jitter (PPQ5): ##'medidasjitter.jitter_ppq5_perc:2'\% #"
Text: 3, "Left", 6.5, "Half", "Shimmer (local): ##'medidasshimmer.shimmer_loc_perc:2'\% #"
Text: 3, "Left", 7.5, "Half", "Shimmer (dB): ##'medidasshimmer.shimmer_db:2' dB #"
Text: 3, "Left", 8.5, "Half", "Shimmer (APQ3): ##'medidasshimmer.shimmer_apq3_perc:2'\% #"
Text: 4.5, "Left", 1.5, "Half", "Shimmer (APQ5): ##'medidasshimmer.shimmer_apq5_perc:2'\% #"
Text: 4.5, "Left", 2.5, "Half", "Shimmer (APQ11): ##'medidasshimmer.shimmer_apq11_perc:2'\% #"
Text: 4.5, "Left", 3.5, "Half", "Média HNR: ##'medidashnr.media:2' dB #"
Text: 4.5, "Left", 4.5, "Half", "Desvio padrão HNR: ##'medidashnr.dp:2' dB #"
Text: 4.5, "Left", 5.5, "Half", "Mínimo HNR: ##'medidashnr.min:2' dB #"
Text: 4.5, "Left", 6.5, "Half", "Máximo HNR: ##'medidashnr.max:2' dB #"
Text: 4.5, "Left", 7.5, "Half", "GNE 1 kHz: ##'medidasgne.gne1:2' #"
Text: 4.5, "Left", 8.5, "Half", "GNE 2 kHz: ##'medidasgne.gne2:2' #"
Text: 6.3, "Left", 1.5, "Half", "GNE 3 kHz: ##'medidasgne.gne3:2' #"
Text: 6.3, "Left", 2.5, "Half", "CPP: ##'medidascepstrais.pico_cpp:2' dB #"
Text: 6.3, "Left", 3.5, "Half", "CPPS: ##'medidascepstrais.pico_cpps:2' dB #"
Text: 6.3, "Left", 4.5, "Half", "Quefrency: ##'medidascepstrais.quefrency:5' s #"
Text: 6.3, "Left", 5.5, "Half", "Declínio: ##'declinio_tilt_espectral.declinio:2' dB #"
Text: 6.3, "Left", 6.5, "Half", "Tilt: ##'declinio_tilt_espectral.tilt:2' dB #"
Text: 6.3, "Left", 7.5, "Half", "Intensidade: ##'intensidade:2' dB SPL #"
#selecioando uma área no Praat Picture
Select inner viewport: 1, 7.5, 9.4, 11.1
#desenha uma caixa (retângulo) no contorno da área selecionada
Draw inner box
#selecioando uma área do tamanho de um folha A4 no Praat Picture
Select inner viewport: 0, 8.26, 0, 11.69
#criando variável e retirando a string ".wav"
.nome$=nome_audio$ - ".wav"
#salvar imagem do Praat Picture em PDF
#Save as PDF file: pastasaida$ + .nome$ + ".pdf"
#salvar imagem do Praat Picture em PNG com 600 dpi
#Save as 600-dpi PNG file: pastasaida$ + .nome$ +".png"
#salvar imagem do Praat Picture em PNG com 300 dpi
Save as 300-dpi PNG file: pastasaida$ + .nome$ +".png"
endproc
#procedimento p/ inserir os valores das medidas na tabela
procedure tabmedidasf0
#selecionando tabela
select tabela_medidas
#Comando p/ acrescentar linha
Append row
#variável que recebe o número da linha
.r = Get number of rows
# Comandos p/ preencher tabela com strings e valores das medidas
Set string value: .r,"Indice", nome_audio$-".wav"
Set numeric value: .r, "f0CPP", medidascepstrais.f0
Set numeric value: .r, "Mediaf0", medidasf0.media
Set numeric value: .r, "DPf0", medidasf0.dp
Set numeric value: .r, "CVf0", medidasf0.cv
Set numeric value: .r, "Medianaf0", medidasf0.mediana
Set numeric value: .r, "1ªquartil", medidasf0.q1
Set numeric value: .r, "3ªquartil", medidasf0.q3
Set numeric value: .r, "Maxf0", medidasf0.max
Set numeric value: .r, "Minf0", medidasf0.min
Set numeric value: .r, "Amplitude", medidasf0.amplitude
Set numeric value: .r, "ProporcaoMinMAxf0", medidasf0.propminmax
Set numeric value: .r, "jitter_local", medidasjitter.jitter_loc_perc
Set numeric value: .r, "RAP", medidasjitter.jitter_rap_perc
Set numeric value: .r, "PPQ5", medidasjitter.jitter_ppq5_perc
Set numeric value: .r, "shimmer_local", medidasshimmer.shimmer_loc_perc
Set numeric value: .r, "shimmer_dB", medidasshimmer.shimmer_db
Set numeric value: .r, "APQ3", medidasshimmer.shimmer_apq3_perc
Set numeric value: .r, "APQ5", medidasshimmer.shimmer_apq5_perc
Set numeric value: .r, "APQ11", medidasshimmer.shimmer_apq11_perc
Set numeric value: .r, "MediaHNR", medidashnr.media
Set numeric value: .r, "DP_HNR", medidashnr.dp
Set numeric value: .r, "MinHNR", medidashnr.min
Set numeric value: .r, "MaxHNR", medidashnr.max
Set numeric value: .r, "GNE_1kHz", medidasgne.gne1
Set numeric value: .r, "GNE_2kHz", medidasgne.gne2
Set numeric value: .r, "GNE_3kHz", medidasgne.gne3
Set numeric value: .r, "CPP", medidascepstrais.pico_cpp
Set numeric value: .r, "CPPS", medidascepstrais.pico_cpps
Set numeric value: .r, "Quefrency", medidascepstrais.quefrency
Set numeric value: .r, "Declínio", declinio_tilt_espectral.declinio
Set numeric value: .r, "Tilt", declinio_tilt_espectral.tilt
Set numeric value: .r, "Intensidade", intensidade
endproc
include diretorio.praat
lista_audio=Create Strings as file list: "lista_audio", pastaentrada$+"*.wav"
#seleciona objeto lista_audio
select lista_audio
#Quantidade de strings(audios)
num_audio = Get number of strings
relatorio_voz_tabela_columns$ = "Indice f0_mediana f0_media f0_sd f0_min f0_max jitter_local_perc jitter_rap_perc ppq5_perc
... shimmer_local_perc shimmer_local_db apq3_perc apq5_perc apq11_perc hnr"
relatorio_voz_tabela = Create Table with column names: "relatorio_voz_tabela", 0, relatorio_voz_tabela_columns$
for cont_audio from 1 to num_audio
select lista_audio
#variavel recebe string referente a posição cont_audio
nome_audio$ = Get string: cont_audio
#abrir aquivo de audio
audio = Read from file: pastaentrada$+nome_audio$
piso=75
teto=600
select audio
@medidasRelatorioVoz: piso, teto
@tabmedidasRelatorioVoz
select audio
plus medidasRelatorioVoz.f0lista
plus medidasRelatorioVoz.pontos
Remove
endfor
select relatorio_voz_tabela
Save as comma-separated file: pastasaida$ + "relatoriovoz.csv"
select relatorio_voz_tabela
plus lista_audio
Remove
procedure medidasRelatorioVoz: .piso, .teto
select audio
.f0lista=To Pitch (cc): 0, .piso, 15, "no", 0.03, 0.45, 0.01, 0.35, 0.14, .teto
select audio
plus .f0lista
.pontos=noprogress To PointProcess (cc)
select audio
plus .f0lista
plus .pontos
.relatoriovoz$=Voice report: 0, 0, 75, 600, 1.3, 1.6, 0.03, 0.45
.f0_mediana= extractNumber (.relatoriovoz$, "Median pitch: ")
.f0_media= extractNumber (.relatoriovoz$, "Mean pitch: ")
.f0_sd= extractNumber (.relatoriovoz$, "Standard deviation: ")
.f0_min= extractNumber (.relatoriovoz$, "Minimum pitch: ")
.f0_max= extractNumber (.relatoriovoz$, "Maximum pitch: ")
.jitter_local=extractNumber (.relatoriovoz$, "Jitter (local): ")
.jitter_local_perc=.jitter_local*100
.jitter_rap=extractNumber (.relatoriovoz$, "Jitter (rap): ")
.jitter_rap_perc=.jitter_rap*100
.ppq5=extractNumber (.relatoriovoz$, "Jitter (ppq5): ")
.ppq5_perc=.ppq5*100
.shimmer_local=extractNumber (.relatoriovoz$, "Shimmer (local): ")
.shimmer_local_perc=.shimmer_local*100
.shimmer_local_db=extractNumber (.relatoriovoz$, "Shimmer (local, dB): ")
.apq3=extractNumber (.relatoriovoz$, "Shimmer (apq3): ")
.apq3_perc=.apq3*100
.apq5=extractNumber (.relatoriovoz$, "Shimmer (apq5): ")
.apq5_perc=.apq5*100
.apq11=extractNumber (.relatoriovoz$, "Shimmer (apq11): ")
.apq11_perc=.apq11*100
.hnr=extractNumber (.relatoriovoz$, "Mean harmonics-to-noise ratio: ")
endproc
procedure tabmedidasRelatorioVoz
select relatorio_voz_tabela
Append row
.r = Get number of rows
Set string value: .r,"Indice", nome_audio$
Set numeric value: .r, "f0_mediana", medidasRelatorioVoz.f0_mediana
Set numeric value: .r, "f0_media", medidasRelatorioVoz.f0_media
Set numeric value: .r, "f0_sd", medidasRelatorioVoz.f0_sd
Set numeric value: .r, "f0_min", medidasRelatorioVoz.f0_min
Set numeric value: .r, "f0_max", medidasRelatorioVoz.f0_max
Set numeric value: .r, "jitter_local_perc", medidasRelatorioVoz.jitter_local_perc
Set numeric value: .r, "jitter_rap_perc", medidasRelatorioVoz.jitter_rap_perc
Set numeric value: .r, "ppq5_perc", medidasRelatorioVoz.ppq5_perc
Set numeric value: .r, "shimmer_local_perc", medidasRelatorioVoz.shimmer_local_perc
Set numeric value: .r, "shimmer_local_db", medidasRelatorioVoz.shimmer_local_db
Set numeric value: .r, "apq3_perc", medidasRelatorioVoz.apq3_perc
Set numeric value: .r, "apq5_perc", medidasRelatorioVoz.apq5_perc
Set numeric value: .r, "apq11_perc", medidasRelatorioVoz.apq11_perc
Set numeric value: .r, "hnr", medidasRelatorioVoz.hnr
endproc