Permission error in Python, when working with audiosegment in Windows 10
Question:
I wrote a short text to play the audio file.
But when running, the program gives error permission.
I noticed that every time I run the program, the name of the file that has the permission error is different
This file is in the temp path
I checked this path and there was no file with that name
Program text:
from pydub import AudioSegment
from pydub.playback import play
try:
song=AudioSegment.from_wav("myfile.wav")
except IOError:
print("can not open file")
try:
play(song)
except IOError:
print("can not play file")
The output of the program was as follows:
My Project Python/my project python/play wav.py"
can not play file
When I try the program without the block Try: , the output is as follows:
Traceback (most recent call last):
File "d:My Project Pythonmy project pythonplay wav.py", line 7, in <module>
play(song)
File "C:UsersH&MAppDataLocalProgramsPythonPython310libsite-packagespydubplayback.py", line 71, in play _play_with_ffplay(audio_segment)
File "C:UsersH&MAppDataLocalProgramsPythonPython310libsite-packagespydubplayback.py", line 15, in _play_with_ffplay
seg.export(f.name, "wav")
File "C:UsersH&MAppDataLocalProgramsPythonPython310libsite-packagespydubaudio_segment.py", line 867, in export
out_f, _ = _fd_or_path_or_tempfile(out_f, 'wb+')
File "C:UsersH&MAppDataLocalProgramsPythonPython310libsite-packagespydubutils.py", line 60, in _fd_or_path_or_tempfile
fd = open(fd, mode=mode)
PermissionError: [Errno 13] Permission denied: 'C:\Users\H&M\AppData\Local\Temp\tmp7t2o2ta1.wav'
Answers:
I found an answer for this question, but it is not an optimized answer
def _play_with_ffplay(seg):
PLAYER = get_player_name()
with NamedTemporaryFile("w+b", suffix=".wav") as f:
fileName = f.name
seg.export(fileName, "wav")
subprocess.call([PLAYER, "-nodisp", "-autoexit", "-hide_banner", fileName])
os.remove(fileName)
I made these changes in the playback.py file and got the answer . link
This also works:
def _play_with_ffplay(seg):
PLAYER = get_player_name()
with NamedTemporaryFile("w+b", suffix=".wav") as f:
f.close()
seg.export(f.name, "wav")
subprocess.call([PLAYER, "-nodisp", "-autoexit", "-hide_banner", f.name])
Just close the file with the f.close() command
I wrote a short text to play the audio file.
But when running, the program gives error permission.
I noticed that every time I run the program, the name of the file that has the permission error is different
This file is in the temp path
I checked this path and there was no file with that name
Program text:
from pydub import AudioSegment
from pydub.playback import play
try:
song=AudioSegment.from_wav("myfile.wav")
except IOError:
print("can not open file")
try:
play(song)
except IOError:
print("can not play file")
The output of the program was as follows:
My Project Python/my project python/play wav.py"
can not play file
When I try the program without the block Try: , the output is as follows:
Traceback (most recent call last):
File "d:My Project Pythonmy project pythonplay wav.py", line 7, in <module>
play(song)
File "C:UsersH&MAppDataLocalProgramsPythonPython310libsite-packagespydubplayback.py", line 71, in play _play_with_ffplay(audio_segment)
File "C:UsersH&MAppDataLocalProgramsPythonPython310libsite-packagespydubplayback.py", line 15, in _play_with_ffplay
seg.export(f.name, "wav")
File "C:UsersH&MAppDataLocalProgramsPythonPython310libsite-packagespydubaudio_segment.py", line 867, in export
out_f, _ = _fd_or_path_or_tempfile(out_f, 'wb+')
File "C:UsersH&MAppDataLocalProgramsPythonPython310libsite-packagespydubutils.py", line 60, in _fd_or_path_or_tempfile
fd = open(fd, mode=mode)
PermissionError: [Errno 13] Permission denied: 'C:\Users\H&M\AppData\Local\Temp\tmp7t2o2ta1.wav'
I found an answer for this question, but it is not an optimized answer
def _play_with_ffplay(seg):
PLAYER = get_player_name()
with NamedTemporaryFile("w+b", suffix=".wav") as f:
fileName = f.name
seg.export(fileName, "wav")
subprocess.call([PLAYER, "-nodisp", "-autoexit", "-hide_banner", fileName])
os.remove(fileName)
I made these changes in the playback.py file and got the answer . link
This also works:
def _play_with_ffplay(seg):
PLAYER = get_player_name()
with NamedTemporaryFile("w+b", suffix=".wav") as f:
f.close()
seg.export(f.name, "wav")
subprocess.call([PLAYER, "-nodisp", "-autoexit", "-hide_banner", f.name])
Just close the file with the f.close() command