Пакетная обработка двух файлов WAV с разницей в одну букву? - PullRequest
0 голосов
/ 30 января 2019

Как мне выполнить пакетную обработку файлов с одинаковыми именами, за исключением разницы в одну букву (c или t)?

BML201_solohorn_longs_legato_ff_RR1_c_G4.wav
BML201_solohorn_longs_legato_ff_RR1_t_G4.wav
BML201_solohorn_shorts_staccato_ff_RR2_c_C#3.wav
BML201_solohorn_shorts_staccato_ff_RR2_t_C#3.wav

Используя этот код soxуменьшает громкость на одном файле микрофона, а затем объединяет оба в новый файл:

sox -v 0.43 tree.wav -m close.wav output.wav

Мне нужно вывести в подпапку, используя исходные имена файлов, или в худшем случае просто перезаписать исходные файлы c.

Ответы [ 3 ]

0 голосов
/ 30 января 2019

Это моя редакция кода AlexP.Это ничего не делает с файлами (вероятно, моя вина).Правильно ли я использую «объединенный», если я просто хочу поместить все файлы в один и тот же подкаталог хотя бы?

@echo off
  setlocal enableextensions disabledelayedexpansion
  for %%f in (*_c_*.wav) do call :processOneFile "%%~f"
  exit /b

:processOneFile

  setlocal
  echo;- Looking at "%~nx1"
  cd /d "%~dp1"
  set "fileNameC=%~nx1"

  set "fileNameT=%fileNameC:_c_=_t_%"
  echo;  Found "%fileNameT%"

  mkdir mixed >nul 2>&1

  set "fileNameOut=%fileNameC:_c_=_%"
  echo;  Running sox -v 0.43 "%fileNameC%" -m "%fileNameT%" "mixed\%fileNameOut%"
  sox -v 0.43 "%fileNameC%" -m "%fileNameT%" "mixed\%fileNameOut%"
  echo;
  exit /b

Извините за отсутствие ясности в исходном вопросе.Я ответил на первый ответ с некоторыми уточняющими замечаниями.Надеюсь, это поможет.Я рад уточнить больше, если это необходимо.-Sean

0 голосов
/ 30 января 2019

@ AlexP @ Stephan

Работает прекрасно!:)

По какой-то причине он не работал с нестандартным именем файла.В любом случае я не хотел удалять разделитель (длинная история почему), поэтому я просто использовал то же имя файла, и теперь оно работает.Вот код, если кто-то еще может его использовать.

@echo off
  setlocal enableextensions disabledelayedexpansion
  for %%f in (*_c_*.wav) do call :processOneFile "%%~f"
  exit /b

:processOneFile

  setlocal
  echo;- Looking at "%~nx1"
  cd /d "%~dp1"
  set "fileNameC=%~nx1"

  set "fileNameT=%fileNameC:_c_=_t_%"
  echo;  Found "%fileNameT%"

  mkdir mixed >nul 2>&1

  echo;  Running sox -v 0.43 "%fileNameC%" -m "%fileNameT%" "mixed\%fileNameOut%"
  sox -v 0.43 "%fileNameT%" -m "%fileNameC%" "mixed\%fileNameC%"
  echo;
  exit /b

Извините, что это раздражающий вредитель.Я обычно ненавижу, когда люди не помогают себе на другом языке, который я почти знаю.Итак, я понял.Я просто понятия не имел, с чего начать, и чтение Batch убило мой мозг.В любом случае, спасибо за помощь всем и спасибо AlexP за решение!:) -Sean

0 голосов
/ 30 января 2019
    @echo off
    setlocal enableextensions disabledelayedexpansion
    rem
    rem Run this script in the directory where the _c_ and _t_ files reside.
    rem
    for %%f in (*_c_*.wav) do call :processOneFile "%%~f"
    exit /b

:processOneFile

    setlocal
    echo;- Looking at "%~nx1"
    cd /d "%~dp1"
    set "fileNameC=%~nx1"
    rem
    rem Now %fileNameC% is the name of the file with _c_. Calculate the name
    rem of the corresponding file with _t_ and check that it actually exists.
    rem
    set "fileNameT=%fileNameC:_c_=_t_%"
    if not exist "%fileNameT%" (
      echo;  Cannot find "%fileNameT%"
      echo;
      exit /b
    )
    echo;  Found "%fileNameT%"
    rem
    rem Calculate the name of the output file and the name of the subdirectory.
    rem This example code makes the name of the output file by replacing
    rem _c_ with _ in the name of %fileNameC%, and makes the name of the
    rem subdirectory by deleting the extension .wav from the name of the output
    rem file. Adjust to suit your needs.
    rem
    set "fileNameOut=%fileNameC:_c_=_%"
    for %%d in ("%fileNameOut%") do set "subDirName=%%~nd"
    rem
    rem Create the subdirectory %subDirName% if it does not exist. If the
    rem subdirectory already contains a file named %fileNameOut% delete it.
    rem
    mkdir "%subDirName%" >nul 2>nul
    del "%subDirName%\%fileNameOut%" >nul 2>&1
    rem
    rem Do something with "%fileNameC%" and "%fileNameT%" producing an output
    rem file %subDirName%\%fileNameOut%.
    rem I don't know what you want to do with them, maybe
    rem sox -v 0.43 "%fileNameC%" -m "%fileNameT%" "%subDirName%\%fileNameOut%"
    rem
    rem Insert your command here.
    rem
    echo;
    rem
    rem All done with these two files, return to the main loop to process the
    rem next two.
    rem
    exit /b
...