2014-11-11 3 views
0

저는 Sox (사운드 교환) 라이브러리를 사용하여 .wav 파일을 .flac로 변환하고 있습니다.txt 파일의 줄만큼 exec() 명령을 실행하십시오.

$Brus:~ pum$ sox outputFolder/file/file.000.wav flac/file.000.flac 

및 파일 file.000.flac 바르게 FLAC 폴더로 변환되었다 내가 터미널을 사용하는 경우 , 그것은 잘 작동합니다. 내 스크립트 내부 또한

, 내가 실행하는 경우 :

  exec('sox/sox outputFolder/file/file.000.wav flac/file.000.flac'); 

변환이 잘 작동합니다.

내 문제는 지금 파일 배치를 변환해야한다는 것입니다. 변환 할 수있는 파일 목록 .wav (listWav.txt)가있는 txt 파일을 만들고 "exec()"명령을 "listWav.txt"에 파일 이름이있는 줄이있는만큼 실행하고 싶습니다. "파일.

file.000.flac 
file.001.flac 

이것은 내가 실행하려고 쓴 코드 "간부를()"명령 등은 다음과 같습니다

outputFiles/file/file.000.wav 
outputFiles/file/file.001.wav 

이것은 listFlac.txt 파일은 다음과 같습니다

은 listWav.txt 파일입니다 설명 :

//read all txt files content 
$file2 = fopen("listFlac.txt","r"); 
$file3 = fopen("listWav.txt", "r"); 
//loop the file and read it line by line 
while(! feof($file2) && ! feof($file3)){ 
    $tt = fgets($file2); 
    $tt2 = fgets($file3); 
    //run sox conversion 
    exec('sox/sox' . ' ' . $tt2 . ' ' . 'flac/' . $tt); 
} 
fclose($file2); 
fclose($file3); 

난 print_r의 경우 ('삭스/삭스' '' 'FLAC/"$ 고작.'$의 TT2... '.); 그래서

sox/sox outputFiles/file/file.000.wav flac/file.000.flac sox/sox outputFiles/file/file.001.wav flac/file.001.flac 

의 루프 "간부()"명령 "파일"listWav.txt "의 선으로 여러 번 실행했지만, 그것은 단지 때문에 제대로 작동하지 않습니다 :이 결과입니다 file.001.flac "이 생성되었으므로 while 루프는"exec() "가"listWav.txt "파일의 끝 행만 가져 와서 실행하도록 허용합니다.

누구든지 내 스크립트에서 "exec()"를 실행하여 목록에있는 모든 파일의 횟수를 편집해야한다는 것을 알고 있습니까?

EDIT : 나는이 방법으로 해결했다. 나는 2 개로 나누어서 중첩하면서 2 개의 동등한 "exec()"명령을 호출했다. 코드는 우아하지 않을 수 있지만 내 목적을 위해 작동합니다.

while(! feof($file2)){ 
    $tt = fgets($file2); 
    while (!feof($file3)) { 
     $tt2 = fgets($file3); 
     exec('sox/sox' . ' ' . $tt2 . ' ' . 'flac/' . $tt); 
    } 
     exec('sox/sox' . ' ' . $tt2 . ' ' . 'flac/' . $tt); 
} 

답변

1

대신 file 함수를 사용하고 루프에 카운터를 추가하십시오.

$flacArray = file("listFlac.txt"); 
$wawArray = file("listWav.txt"); 
$i=0; 
foreach ($flacArray as $flac) { 
    $wavInfo = pathinfo($wawArray[$i]); 
    exec('sox/sox' . ' ' . $flac . ' ' . 'flac/' . $wavInfo["basename"] . str_pad($i, 3, "0", STR_PAD_LEFT) .".wav"); 
    $i++; 
} 

참고 : 이것은 단지 999 파일을 사용할 수 있습니다.

+0

답장을 보내 주셔서 감사합니다. 내 프로젝트의 다른 부분에서 코드를 사용하겠습니다. 내 질문에 대해, 나 혼자서 해결하고 솔루션을 게시했습니다. – Bebbolin

관련 문제