Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/90.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将音频保存到本地存储以便播放_Javascript_Html_Audio_Local Storage - Fatal编程技术网

Javascript 将音频保存到本地存储以便播放

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编码

我正在尝试创建一个函数,从中提取mp3文件

<input type="file" id="sound" accept="audio/*"/>
我对web开发还是新手,所以任何指针都会很好


注意:这不是的副本。我试图从我的HDD中取出一个预先存在的mp3文件,并将其存储到localStorage中,以便可以播放。

这不是localStorage的用途。localStorage只能存储字符串,并且只能容纳少量日期

如果你真的决心这么做,你需要:

  • 将mp3文件加载到
  • 将Base64编码字符串存储在localStorage中
请注意,Base64编码通常会将源材料的大小增加约33%。这是因为它可以获取任何类型的数据,包括二进制数据,并将其转换为由64个字符集组成的字符串,该字符串与标准ASCII字符串兼容

要播放它,您需要反向播放

  • 从localStorage检索Base64编码的字符串
  • 将Base64字符串解码为ArrayBuffer
  • 将ArrayBuffer加载到音频对象中
  • 将音频对象分配给
    ,但通常,通过以较低的比特率对mp3文件进行编码,使其保持较小的大小,尽可能使用单声道而不是立体声频道,如果音频只是语音而不是音乐,则降低采样率。

    localStorage
    不用于存储此类数据。相反,您应该使用用于存储此类数据的。 Mozilla的lib提供了类似于localStorage的语法,从而大大简化了对indexedDB的处理

    因为StackSnippets®不允许访问indexedDB或localStorage


    但要根据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转换。。。您可以简单地使用文件阅读器及其
    readAsDataURL
    方法。您也不需要将dataURI传递给arrayBuffer来播放它,只需将b64 dataURI传递给Audio元素即可。如果音频对象不是
    AudioElement
    @kaido,那么你必须解释音频对象是什么。如果你有更好的方法,请写另一个答案并给出完整的解释,或者添加你对我说的内容作为编辑,因为你有足够的代表。我希望我可以使用它,但遗憾的是,每当我在脚本源代码中添加localfounder时,我得到了这个错误:“拒绝加载脚本,因为它违反了以下内容安全策略指令:“scriptsrc'self”。“@RockGuitarist1,你也在尝试从rawgit加载脚本吗?您的CSP似乎被配置为只允许来自与您的页面和twitter相同来源的脚本。因此,如果您在服务器上下载脚本,并从服务器上加载,它应该可以工作。实际上,我下载了localfower并将其导入到项目中。然后我使用:
    localfough.getItem('something',myCallback),它仍然抛出错误。我实际上正在开发一个开源的Chrome扩展。那么我想你必须把它包括在扩展清单中,但我对扩展的了解非常有限。请注意,可能还有一个更好的API用于保存扩展名中的文件,您可以访问比我们这些糟糕的web开发人员功能强大得多的API。但这将完全改变你的问题。听起来这是我必须要做的事情。我已经得到了以前的方法,以我想要的方式工作,但这个方法会更好,因为我可以操纵音频音量水平。
    
    var audio = new Audio('audioFile');
    audio.play();