gpt4 book ai didi

python - 使用 librosa 下载并打开文件,无需写入文件系统

转载 作者:行者123 更新时间:2023-12-01 06:41:45 24 4
gpt4 key购买 nike

据我所知,Heroku dynos 是短暂的,文件无法在请求之间存储。我有一个 Flask 应用程序,它应该从 Spotify 获取 MP3,将其传递给 LibROSA 进行分析,然后返回可视化结果。

我有一个在本地运行的脚本,用于使用 urllib.urlopen 下载文件,将其保存到文件中,然后使用 librosa.load 加载该文件。但是,我似乎无法从 Heroku 上的文件系统加载文件。当我无法控制文件系统时,如何加载下载的文件?

song_url = "https://p.scdn.co/mp3-preview/8e29d103eba74b5cef8600722fff3c491e37fc9a.mp3"
sample_30s = urlopen(song_url)
mp3_path = os.path.join(os.path.dirname(__file__), 'static/data/temp.mp3')

output = open(mp3_path, 'wb')
output.write(sample_30s.read())

y, sr = librosa.load(mp3_filepath)

最佳答案

librosa.load可以拍file-like对象,作为文件路径的替代。对象返回 urlopen是类似文件的。可以直接传递给librosa。

from urllib.request import urlopen
import librosa

with urlopen(song_url) as response:
y, sr = librosa.load(response)

但是,librosa 仅支持从文件系统加载 MP3 文件。您可以使用 soundfile.available_formats() 查看类文件对象支持哪些格式。 。获取不同格式的文件,或使用诸如 pydub 之类的库将其转换为 WAV。

import io
from urllib.request import urlopen
import librosa
import pydub

wav = io.BytesIO()

with urlopen(mp3_url) as r:
r.seek = lambda *args: None # allow pydub to call seek(0)
pydub.AudioSegment.from_file(r).export(wav, "wav")

wav.seek(0)
y, sr = librosa.load(wav)

关于python - 使用 librosa 下载并打开文件,无需写入文件系统,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59426275/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com