electron 在“我的应用”中播放本地音频文件,而不使用输入类型文件

acruukt9  于 2023-09-28  发布在  Electron
关注(0)|答案(3)|浏览(270)

我正在创建一个电子应用程序,并希望播放本地音频文件(从计算机而不是我的项目目录),而不使用输入类型文件。
我尝试了传统的方法来创建一个新的Audio示例,并为它提供mp3文件的绝对路径
在createAudio()中

const player = new Audio('/Absolute/path/to/music.mp3');
player.play();

我希望它播放音频文件,但无论出于何种原因,它抛出“Uncaught(in promise)DOMException”

trnvg8h3

trnvg8h31#

在JavaScript或HTML中,以/开头的路径是指向URL模式、主机名和端口的绝对路径,例如http://localhosthttp://localhost:8080
因此,在localhost上运行的/Absolute/path/to/music.mp3的URL现在将变为http://localhost/Absolute/path/to/music.mp3,虽然这对您来说可能不是问题,但在访问文件系统时应始终使用绝对文件系统路径。例如const player = new Audio('file:///Absolute/path/to/music.mp3');,这将指向本地文件。
但是,如果您需要在使用的浏览器上禁用CORS,则可能会遇到CORS问题,在这种情况下,您需要在Electron (chromium) disable web security上找到答案
如果这不起作用,我们需要看到未捕获的异常,
player.play().catch(e => console.error("audio play failed with: "+e))(如果显示了控制台输出)或player.play().catch(e => alert("audio play failed with: "+e))

5jvtdoz2

5jvtdoz22#

您需要更改自动播放策略。在电子的主进程中添加下一行并尝试。

app.commandLine.appendSwitch('autoplay-policy', 'no-user-gesture-required');
vxbzzdmp

vxbzzdmp3#

对于渲染过程,您可以使用带有base64数据的html5音频,而不是声音文件url:

import soundBase64Data from '../path/to/sound.wav'

new Audio(soundBase64Data).play()

相关问题