簡體   English   中英

在praat中串聯多個wav文件

[英]concatenating multiple wav files in praat

我有一個包含從1到20的wav文件的文件夾,例如1.wav,2.wav .....,20.wav等。我想串行連接它,但不是串行連接。 請提出一些幫助

我正在使用此代碼:

    form Concatenate sound files
    comment Directory of input sound files
    text Sound_directory C:\temp\
    sentence Sound_file_extension .wav
    comment Save the final file as
    text Save_as C:\temp\temp.wav
endform

# Here, you make a listing of all the sound files in the specified directory.

Create Strings as file list... list 'sound_directory$'*'sound_file_extension$'
numberOfFiles = Get number of strings

for ifile to numberOfFiles
    select Strings list
    filename$ = Get string... ifile

    # A sound file is opened from the listing:

    Read from file... 'sound_directory$''filename$'
endfor

# Now, concatenate all files into a single file

select all
minus Strings list
Concatenate

# And save the resulting file

Write to WAV file... 'save_as$'

select all
Remove

也許有些令人費解,但是您也可以對Table使用Sort命令來模擬Strings的一種通用排序。 我已經用幾個測試用例進行了嘗試,它看起來做得很好(對於黑客來說)。

我添加了對多個Strings支持以及不區分大小寫的排序選項。 選項的默認值是需要最少工作量的選項。 這是腳本:

form Generic sort...
  boolean Numeric_first yes
  boolean Case_sensitive yes
endform

n = numberOfSelected("Strings")
for i to n
  strings[i] = selected("Strings", i)
endfor

for i to n
  # stopwatch

  selectObject(strings[i])
  nstrings = Get number of strings

  # Create an empty table
  cols$ = "num str"
  if !case_sensitive
    cols$ = cols$ + " lc"
  endif
  table = Create Table with column names: "nums", nstrings, cols$

  # Populate the table with the strings or their number versions where possible
  for row to nstrings
    selectObject(strings[i])
    s$ = Get string: row
    s = number(s$)

    selectObject(table)
    Set string value: row, "str", s$
    if !case_sensitive
      Set string value: row, "lc", replace_regex$(s$, "(.*)", "\L\1", 0)
    endif
    Set numeric value: row, "num", number(s$)
  endfor

  sort$ = "num " + if case_sensitive then "str" else "lc" fi
  Sort rows: sort$

  # Invert order for non-numeric strings first
  if !numeric_first
    selectObject(table)
    nantable = nowarn Extract rows where column (text):
      ..."num", "is equal to", "--undefined--"
    selectObject(table)
    numtable = nowarn Extract rows where column (text):
      ..."num", "is not equal to", "--undefined--"
    removeObject(table)
    selectObject(nantable, numtable)
    table = Append
    removeObject(nantable, numtable)
  endif

  # Replace the original strings with the sorted list
  selectObject(table)
  for row to nstrings
    selectObject(table)
    s$ = Get value: row, "str"
    selectObject(strings[i])
    Set string: row, s$
  endfor

  # Clean-up
  removeObject(table)

  # selectObject(strings[i])
  # name$ = selected$("Strings")
  # time = stopwatch
  # appendInfoLine("Sorted ", name$ , " in ", time)
endfor

# Restore selection
if n >= 1
  selectObject(strings[1])
  for i from 2 to n
    plusObject(strings[i])
  endfor
endif

編輯

該腳本的改進版本已包含在strutils CPrAN插件中。

我已經找到解決方案,當我創建字符串列表時,請創建字符串作為文件列表...

它按字母順序創建一個列表

所以您得到1.wav,10.wav,11.wav,... 2.wav,20.wav ...等,如果我將文件重命名為01.wav; 02.wav,以上代碼可以正常運行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM