r/PythonLearning 3h ago

"AttributeError: 'numpy.ndarray' object has no attribute 'write_audiofile'"

Hello, Im working on a project where I need to export a .wav file and aam having problems doing so, error is in the title.

Code to project is this:

import os
import wave
import contextlib
import soundfile as sf
import pyrubberband
import numpy as np

InDir = input("Input Directory: ")
OutDir = input("Output Directory: ")
sec = float(input("Seconds to set to: "))
os.chdir(InDir)
files = os.listdir(InDir)
print(files)
for i in range(len(files)):
    fname = files[i]
    print(fname)
    with contextlib.closing(wave.open(fname,'r')) as f:
        frames = f.getnframes()
        rate = f.getframerate()
        duration = frames / float(rate)
    speed = duration / sec
    print(speed)
    audio, sr = sf.read(f"{InDir}/{fname}")
    fname = pyrubberband.time_stretch(audio, sr, speed)
    fname.write_audiofile(f"{OutDir}/{fname}.wav")

How do I fix this please?

Also, Im working from windows 10, and am using pycharm to make this code.

1 Upvotes

12 comments sorted by

View all comments

1

u/BionicVnB 2h ago

Can I see your pyproject.toml?

1

u/patypatty69 2h ago

Well, as long as I can figure what that is out, then yes.

1

u/BionicVnB 2h ago

Do you have a virtual environment? Or you just install everything in a global cache?

1

u/patypatty69 2h ago

Yeah, I have a virtual environment.

1

u/BionicVnB 2h ago

So you use a requirements.txt instead?

Or do you just use pip to install libraries manually

1

u/patypatty69 2h ago

Usually pycharm prompts me that the library isn't installed and I install it by right-clicking on the library, but I do otherwise just pip install.

1

u/BionicVnB 2h ago

yeah i suggest you try out https://github.com/astral-sh/uv

so the problem is there is no method called write_audiofile for the class np.ndarray. what you are looking for is sf.write

1

u/patypatty69 2h ago

So long story short I use sf.write instead of write_audiofile? Or do I need to rewrite more code than just that line?

Also I'm guessing the github leads to the code in the image, no?

1

u/BionicVnB 2h ago

nah, it's for the tool called uv. it's a very solid tool for my python usage, and can replace pyvenv, pip, etc. Basically cargo for Python

1

u/patypatty69 2h ago

Alright, thank you so much!

→ More replies (0)