Allow reading of audio files via str path

This commit is contained in:
Josh Meyer 2021-08-16 06:22:20 -04:00
parent 4fc60bf5e9
commit 31b9280194

View File

@ -500,7 +500,8 @@ def write_wav(wav_file, pcm_data, audio_format=DEFAULT_FORMAT):
def read_wav(wav_file): def read_wav(wav_file):
wav_file.seek(0) if not type(wav_file) is str:
wav_file.seek(0)
with wave.open(wav_file, "rb") as wav_file_reader: with wave.open(wav_file, "rb") as wav_file_reader:
audio_format = read_audio_format_from_wav_file(wav_file_reader) audio_format = read_audio_format_from_wav_file(wav_file_reader)
pcm_data = wav_file_reader.readframes(wav_file_reader.getnframes()) pcm_data = wav_file_reader.readframes(wav_file_reader.getnframes())
@ -530,7 +531,8 @@ def write_audio(
def read_wav_duration(wav_file): def read_wav_duration(wav_file):
wav_file.seek(0) if not type(wav_file) is str:
wav_file.seek(0)
with wave.open(wav_file, "rb") as wav_file_reader: with wave.open(wav_file, "rb") as wav_file_reader:
return wav_file_reader.getnframes() / wav_file_reader.getframerate() return wav_file_reader.getnframes() / wav_file_reader.getframerate()
@ -542,13 +544,18 @@ def read_opus_duration(opus_file):
def read_ogg_opus_duration(ogg_file): def read_ogg_opus_duration(ogg_file):
error = ctypes.c_int() error = ctypes.c_int()
ogg_file_buffer = ogg_file.getbuffer() if type(ogg_file) is str:
ubyte_array = ctypes.c_ubyte * len(ogg_file_buffer) opusfile = pyogg.opus.op_open_file(
opusfile = pyogg.opus.op_open_memory( bytes(ogg_file, encoding="utf-8"), ctypes.pointer(error)
ubyte_array.from_buffer(ogg_file_buffer), )
len(ogg_file_buffer), else:
ctypes.pointer(error), ogg_file_buffer = ogg_file.getbuffer()
) ubyte_array = ctypes.c_ubyte * len(ogg_file_buffer)
opusfile = pyogg.opus.op_open_memory(
ubyte_array.from_buffer(ogg_file_buffer),
len(ogg_file_buffer),
ctypes.pointer(error),
)
if error.value != 0: if error.value != 0:
raise ValueError( raise ValueError(
@ -575,7 +582,8 @@ def read_duration(audio_type, audio_file):
def read_wav_format(wav_file): def read_wav_format(wav_file):
wav_file.seek(0) if not type(wav_file) is str:
wav_file.seek(0)
with wave.open(wav_file, "rb") as wav_file_reader: with wave.open(wav_file, "rb") as wav_file_reader:
return read_audio_format_from_wav_file(wav_file_reader) return read_audio_format_from_wav_file(wav_file_reader)