Search code examples
pythontensorflowmachine-learningkerassox

Errno2 no such file or directory


i've been trying to run sox in a python script but it can't the output file and gives me [errno2]

def AudioToSpectrogram(self, files, pixel_per_sec, height, width):

file_name = ("tmp_{}.png").format(random.randint(0, 100000))

command  = "sox -V0 {} -n remix 1 rate 10k spectrogram -y {} -x {} -X {} -m -r -o {}".format(files, height, width, pixel_per_sex, file_name)
p = Popen(command, shell=True, stdin=PIPE, stdout=PIPE, stderr=STDOUT, close_fds=True)

Output, errors = p.communicate()
If errors:
   Print(errors)

Image = Image.open(file_name)
Os.remove(file_name)

Return np.array(image)

This is the error it gives

Exception: [errno2] No such file or Directory: 'tmp_47483.png' 

I hope you could give me some pointers since i am still new in this field, thanks in advance!


Solution

  • Assuming tmp_47483.png is in fact being created, the problem is likely that the command is placing the file in a different folder and Python can't find it inside the current working directory. The

    # manually set the full path (make sure the backslashes are escaped by putting two each)
    file_name = f"C:\\Full\\Path\\To\\File\\tmp_{random.randint(0, 100000}.png"
    
    # use the os module to join the path
    base_dir = "C:\\Full\\Path\\To\\File"
    file_name = os.path.join(base_dir, f"tmp_{random.randint(0, 100000}.png")
    
    # if you want it to appear in the same folder as your script:
    CWD = os.path.dirname(os.path.realpath(__file__))    # mostly fool-proof way of getting a script's Current Working Directory
    file_name = os.path.join(CWD, f"tmp_{random.randint(0, 100000}.png")
    

    Try these and see if they help. If not, make sure that command is actually working and outputting a file somewhere.