i'm using Sox (Sound eXchange) library to convert .wav file into .flac. If i use the terminal, it works good:
$Brus:~ pum$ sox outputFolder/file/file.000.wav flac/file.000.flac
and the file file.000.flac was converted into the flac folder rightly.
Also inside my script, if i run:
exec('sox/sox outputFolder/file/file.000.wav flac/file.000.flac');
the conversion works good.
My problem now, is that i need to convert a batch of file. I create a txt file with the list of files .wav (listWav.txt) to be converted, and i want to run the "exec()" command as many time as there are lines with the file name in the "listWav.txt" file.
This is the listWav.txt file:
outputFiles/file/file.000.wav
outputFiles/file/file.001.wav
This is the listFlac.txt file:
file.000.flac
file.001.flac
This is the code i wrote trying to run "exec()" command as described:
//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);
If i print_r('sox/sox' . ' ' . $tt2 . ' ' . 'flac/' . $tt); this is the result:
sox/sox outputFiles/file/file.000.wav flac/file.000.flac sox/sox outputFiles/file/file.001.wav flac/file.001.flac
so the loop of the "exec()" command was executed as many times as the lines of the file "listWav.txt", but it doesn't work properly because only "file.001.flac" was generated, so i understand that the while loop allow "exec()" to take only the end line of the "listWav.txt" file, and run it.
Does anybody know what i have to edit in my script to run "exec()" the number of times for all the files in the list?
EDIT: I solved in this way, i splitted the while in two while nested and called two equivalent "exec()" command. The code could be not elegant but it works for my purpose.
while(! feof($file2)){
$tt = fgets($file2);
while (!feof($file3)) {
$tt2 = fgets($file3);
exec('sox/sox' . ' ' . $tt2 . ' ' . 'flac/' . $tt);
}
exec('sox/sox' . ' ' . $tt2 . ' ' . 'flac/' . $tt);
}
use
file
function instead, and add a counter to your loop.NOTE: This is works only for 999 file.