Javascript 将音频保存到本地存储以便播放
我正在尝试创建一个函数,从中提取mp3文件Javascript 将音频保存到本地存储以便播放,javascript,html,audio,local-storage,Javascript,Html,Audio,Local Storage,我正在尝试创建一个函数,从中提取mp3文件 <input type="file" id="sound" accept="audio/*"/> 我对web开发还是新手,所以任何指针都会很好 注意:这不是的副本。我试图从我的HDD中取出一个预先存在的mp3文件,并将其存储到localStorage中,以便可以播放。这不是localStorage的用途。localStorage只能存储字符串,并且只能容纳少量日期 如果你真的决心这么做,你需要: 将mp3文件加载到 将Base64编码
<input type="file" id="sound" accept="audio/*"/>
我对web开发还是新手,所以任何指针都会很好
注意:这不是的副本。我试图从我的HDD中取出一个预先存在的mp3文件,并将其存储到localStorage中,以便可以播放。这不是localStorage的用途。localStorage只能存储字符串,并且只能容纳少量日期 如果你真的决心这么做,你需要:
- 将mp3文件加载到
- 将Base64编码字符串存储在localStorage中
- 从localStorage检索Base64编码的字符串
- 将Base64字符串解码为ArrayBuffer
- 将ArrayBuffer加载到音频对象中
- 将音频对象分配给
,但通常,通过以较低的比特率对mp3文件进行编码,使其保持较小的大小,尽可能使用单声道而不是立体声频道,如果音频只是语音而不是音乐,则降低采样率。
不用于存储此类数据。相反,您应该使用用于存储此类数据的。 Mozilla的lib提供了类似于localStorage的语法,从而大大简化了对indexedDB的处理 因为StackSnippets®不允许访问indexedDB或localStoragelocalStorage
但要根据localStorage API的需要将文件(或Blob)转换为字符串,可以使用及其方法,该方法将提供可由MediaElements直接播放的f.onchange=e=>{ 如果(f.files[0]。键入.indexOf('audio/')!==0){ console.warn('不是音频文件'); 返回; } const reader=new FileReader(); reader.onload=函数(){ var str=this.result; //这是一个字符串,所以您可以将其存储在localStorage中,即使这不是一个好主意 console.log(str); const aud=新音频(str); aud.play(); }; reader.readAsDataURL(f.files[0]); }
到目前为止您尝试过的内容可能重复?请显示您的工作。目前我只提供一个mp3文件,用户可以选择从分类。到目前为止,我尝试使用getElementById从“文件”中获取路径,然后在新音频中使用该路径,但这并不正确。我甚至还没有尝试过保存到本地存储。将来,至少在开始之前尝试一下。这不是一个咨询论坛,这是一个具体的问答论坛。在求助于这里之前,我已经搜索了几个小时。我更喜欢在来这里被骂之前先想一个过程。这就是我要找的。非常感谢。哇,不要通过阵列缓冲,也不要自己做b64转换。。。您可以简单地使用文件阅读器及其
方法。您也不需要将dataURI传递给arrayBuffer来播放它,只需将b64 dataURI传递给Audio元素即可。如果音频对象不是readAsDataURL
@kaido,那么你必须解释音频对象是什么。如果你有更好的方法,请写另一个答案并给出完整的解释,或者添加你对我说的内容作为编辑,因为你有足够的代表。我希望我可以使用它,但遗憾的是,每当我在脚本源代码中添加localfounder时,我得到了这个错误:“拒绝加载脚本,因为它违反了以下内容安全策略指令:“scriptsrc'self”。“@RockGuitarist1,你也在尝试从rawgit加载脚本吗?您的CSP似乎被配置为只允许来自与您的页面和twitter相同来源的脚本。因此,如果您在服务器上下载脚本,并从服务器上加载,它应该可以工作。实际上,我下载了localfower并将其导入到项目中。然后我使用:AudioElement
localfough.getItem('something',myCallback)代码>,它仍然抛出错误。我实际上正在开发一个开源的Chrome扩展。那么我想你必须把它包括在扩展清单中,但我对扩展的了解非常有限。请注意,可能还有一个更好的API用于保存扩展名中的文件,您可以访问比我们这些糟糕的web开发人员功能强大得多的API。但这将完全改变你的问题。听起来这是我必须要做的事情。我已经得到了以前的方法,以我想要的方式工作,但这个方法会更好,因为我可以操纵音频音量水平。
var audio = new Audio('audioFile'); audio.play();