2016-11-06 2 views
0

J'ai plusieurs fichiers vocaux et j'ai besoin de couper une partie du fichier son, de 0,21 millisecondes à 0,45 millisecondes. Le script ci-dessous sélectionne le segment sonore de 0,21 milliseconde à 0,45 milliseconde et le sauvegarde. Je veux couper le segment du fichier vocal, puis l'enregistrer sans le fichier. Je devrais probablement ajouter une autre ligne après "Déplacer la fin de la sélection vers le passage à zéro le plus proche" et changer le "Ecrire le son sélectionné ..." mais je ne suis pas sûr de savoir exactement comment.praat - supprimer le segment

form Files 
    sentence InputDir ./ 
endform 

createDirectory ("output") 
Create Strings as file list... list 'inputDir$'*.wav 
numberOfFiles = Get number of strings 

for ifile to numberOfFiles 

    select Strings list 
    fileName$ = Get string... ifile 
    Read from file... 'inputDir$''fileName$' 
    sound_name$ = selected$ ("Sound") 

     select Sound 'sound_name$' 
     Edit 
     editor Sound 'sound_name$' 
     Select... 0.21 0.45 
     Move start of selection to nearest zero crossing 
     Move end of selection to nearest zero crossing 
     Write selected sound to WAV file... ./output/'fileName$' 
     endeditor 

    select all 
    minus Strings list 
    Remove 

endfor 

select all 
Remove 

Répondre

0

Je veux couper le segment du fichier vocal puis enregistrez-le sans elle

On ne sait pas ce que vous voulez faire avec le segment supprimé. Voulez-vous l'éditer (comme dans, raccourcir la durée totale du son?) Ou simplement le réduire au silence (comme dans le cas où les échantillons contenus dans le contenu sont à zéro?).

De toute façon, vous n'avez pas besoin d'ouvrir l'éditeur de son (la fenêtre avec l'onde sonore et le spectrogramme). Ci-dessous, j'ai reproduit votre script avec quelques alternatives (et mis à jour la syntaxe).

form Files 
    sentence Input_dir ./ 
    positive Start 0.21 
    positive End 0.45 
endform 

createDirectory("output") 
list = Create Strings as file list: "list", input_dir$ + "*.wav" 
numberOfFiles = Get number of strings 

for ifile to numberOfFiles 
    selectObject: list 
    fileName$ = Get string: ifile 
    sound = Read from file: input_dir$ + fileName$ 
    sound_name$ = selected$("Sound") 

    # Find zero crossings 
    start = Get nearest zero crossing: 1, start 
    end = Get nearest zero crossing: 1, end 
    sound_end = Get total duration 

    # Cut the selected part out, shortening the sound 
    # by extracting the part before and after and concatenating 
    before = Extract part: 0, start, "rectangular", 1, "no" 
    selectObject: sound 
    after = Extract part: end, sound_end, "rectangular", 1, "no" 
    selectObject: before, after 
    new = Concatenate 
    removeObject: before, after 

    ## Or, if you want to set the selected part to zero 
    ## (since we already have the zero crossings) 
    # new = Set part to zero: start, end, "at exactly these times" 

    ## Or, if what you want is to get only the selected part 
    ## and not the original sound 
    # new = Extract part: start, end, "rectangular", 1, "no" 

    # Either way, the new, modified sound is selected 
    # and its ID is stored in `new` 

    Save as WAV file: "./output/" + fileName$ 

    # I prefer a less shotgunny way to remove unwanted objects 
    removeObject: sound, new 
endfor 

removeObject: list