0

I have several speech files and I need to cut a certain part of the sound file, from 0.21 milliseconds to 0.45 milliseconds. The script below will select the sound segment from 0.21 milliseconds to 0.45 milliseconds and save it. I want to cut the segment from the speech file and then save it without it. I should probably add another line after "Move end of selection to nearest zero crossing" and change the "Write selected sound..." but I am not sure how exactly.

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 
fedorqui
  • 275,237
  • 103
  • 548
  • 598

1 Answers1

0

I want to cut the segment from the speech file and then save it without it

It's not clear what you want to do with the deleted segment. Do you want to edit it out (as in, shorten the total duration of the sound?) or simply silence it (as in set the samples contained within to zero?).

Either way, you don't need to open the sound editor (the window with the sound wave and the spectrogram). Below I reproduced your script with some alternatives (and updated the syntax).

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
jja
  • 2,058
  • 14
  • 27