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

问题描述 投票:0回答:1

我了解Heroku测功机是短暂的,不能在请求之间存储文件。我有一个Flask应用程序,应该从Spotify获得MP3,将其传递给LibROSA进行分析,然后返回可视化效果。

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

spotify_id = "secret"
song_url = https://p.scdn.co/mp3-preview/8e29d103eba74b5cef8600722fff3c491e37fc9a.mp3

sample_30s = urlopen(song_url)

mp3_filepath = os.path.join(os.path.dirname(__file__), f'static/data/{spotify_id}.mp3')

output = open(f'{mp3_filepath}', 'wb')
output.write(sample_30s.read())

y, sr = librosa.load(mp3_filepath)
python heroku flask librosa
1个回答
0
投票

librosa.load可以采用类似文件的对象,以替代文件路径。 urlopen返回的对象类似于文件。它可以直接传递给librosa。

from io import BytesIO
from urllib.request import urlopen

with urlopen(song_url) as response:
    y, sr = librosa.load(response)
© www.soinside.com 2019 - 2024. All rights reserved.