Next.js 从 url 为客户端的 wavesurfer 加载音频
Next.js load audio from url for wavesurfer on the client side
我希望能够使用 wavesurfer.js 收听和渲染音频峰值,但是当我从外部源加载 url 时,波形加载为一条扁平线。我通过下载相同的音频文件并将其保存在我的 public/static 资产文件夹中进行了测试,所以我知道 wavesurfer 能够渲染峰值,无论是对于这个文件还是在我的应用程序中,只要 url 正在利用 next.js 静态资产服务。
我认为这可能是一个 xhr 问题,但即使仔细研究了 wavesurfer 和 nextjs 文档,我仍然感到很迷茫。
我认为这可能是 xhr 问题的原因是我在使用外部 url 时无法渲染任何音频,除非我在 wavesurfer 中指定 MediaElement 的后端初始化选项。
从 public/assets 文件夹中获取的文件渲染波形的选项:
waveform.current = WaveSurfer.create({
container: "#waveform",
waveColor: "#8D86C9",
progressColor: "#242038",
normalize: true,
hideScrollbar: true,
});
when it works
以及我必须添加的内容才能从外部加载扁平线 url
waveform.current = WaveSurfer.create({
container: "#waveform",
backend: 'MediaElement',
waveColor: "#8D86C9",
progressColor: "#242038",
normalize: true,
hideScrollbar: true,
});
那看起来像什么……:/
enter image description here
Wavesurfer.js 是一个客户端库,因此要使其正常工作,next/dynamic.
会动态加载波形组件
const Waveform = dynamic(() => import('./Waveform'), {ssr: false})
我的目标是从外部 url 渲染波形,我从外部 api 获得,因此将文件下载到 public 文件夹不是真的不是一个选择。
编辑---
只是想补充一点,基本的 html 元素能够从 url 加载和播放来自
的 cors 阻止 wavesurfer 的音频
--
谢谢@juliomalves,提供 mwe/reprex
的建议
stack blitz here thts broken i guess...codeSandbox
https://codesandbox.io/s/holy-firefly-i6pyzw?file=/src/components/Songs.tsx
或者,如果您更喜欢在本地复制,git 在这里回购 -
https://github.com/heresy0-0y/wavesurfer-nextjs/tree/main/client
我最终使用 cors-anywhere 来代理 wavesurfers 请求
我希望能够使用 wavesurfer.js 收听和渲染音频峰值,但是当我从外部源加载 url 时,波形加载为一条扁平线。我通过下载相同的音频文件并将其保存在我的 public/static 资产文件夹中进行了测试,所以我知道 wavesurfer 能够渲染峰值,无论是对于这个文件还是在我的应用程序中,只要 url 正在利用 next.js 静态资产服务。
我认为这可能是一个 xhr 问题,但即使仔细研究了 wavesurfer 和 nextjs 文档,我仍然感到很迷茫。
我认为这可能是 xhr 问题的原因是我在使用外部 url 时无法渲染任何音频,除非我在 wavesurfer 中指定 MediaElement 的后端初始化选项。
从 public/assets 文件夹中获取的文件渲染波形的选项:
waveform.current = WaveSurfer.create({
container: "#waveform",
waveColor: "#8D86C9",
progressColor: "#242038",
normalize: true,
hideScrollbar: true,
});
when it works
以及我必须添加的内容才能从外部加载扁平线 url
waveform.current = WaveSurfer.create({
container: "#waveform",
backend: 'MediaElement',
waveColor: "#8D86C9",
progressColor: "#242038",
normalize: true,
hideScrollbar: true,
});
那看起来像什么……:/ enter image description here
Wavesurfer.js 是一个客户端库,因此要使其正常工作,next/dynamic.
会动态加载波形组件const Waveform = dynamic(() => import('./Waveform'), {ssr: false})
我的目标是从外部 url 渲染波形,我从外部 api 获得,因此将文件下载到 public 文件夹不是真的不是一个选择。
编辑---
只是想补充一点,基本的 html 元素能够从 url 加载和播放来自
的 cors 阻止 wavesurfer 的音频-- 谢谢@juliomalves,提供 mwe/reprex
的建议stack blitz here thts broken i guess...codeSandbox
https://codesandbox.io/s/holy-firefly-i6pyzw?file=/src/components/Songs.tsx
或者,如果您更喜欢在本地复制,git 在这里回购 -
https://github.com/heresy0-0y/wavesurfer-nextjs/tree/main/client
我最终使用 cors-anywhere 来代理 wavesurfers 请求