electron 保存blob音频在磁盘宽度电子[关闭]

mzaanser  于 5个月前  发布在  Electron
关注(0)|答案(1)|浏览(86)

已关闭,此问题需要details or clarity,目前不接受回答。
**想要改进此问题吗?**通过editing this post添加详细信息并澄清问题。

上个月关门了。
Improve this question
电子:在使用离线渲染器录制音频序列并在我的renderer.js中创建blob(audio/wav)之后,如何使用main.js将此blob保存到磁盘?

thigvfpy

thigvfpy1#

解决了!
我在Preload.js中添加了这个:

saveAudio: (channel, ...args) => {
            // whitelist channels
            let validChannels = ["saveAudio"];
            if (validChannels.includes(channel)) {
                ipcRenderer.send(channel,'saveAudio',...args)
            }
        }

字符串

Preload.js:

// preload.js
const { contextBridge, ipcRenderer } = require('electron')
// Toutes les API Node.js sont disponibles dans le processus de préchargement.
// Il a la même sandbox qu'une extension Chrome.
window.addEventListener('DOMContentLoaded', () => {
  const replaceText = (selector, text) => {
    const element = document.getElementById(selector)
    if (element) element.innerText = text
  }

  for (const dependency of ['chrome', 'node', 'electron']) {
    replaceText(`${dependency}-version`, process.versions[dependency])
  }

})
contextBridge.exposeInMainWorld(
"api", {
        send: (channel, data) => {
            // whitelist channels
            let validChannels = ["toMain"];
            if (validChannels.includes(channel)) {
                ipcRenderer.send(channel, data);
            }
        },
        receive: (channel, func) => {
            let validChannels = ["fromMain",'fromparam'];
            if (validChannels.includes(channel)) {
                // Deliberately strip event as it includes `sender` 
                ipcRenderer.on(channel, (event, ...args) => func(...args));
            }
        },
        contextmenu: (channel, data) => {
            // whitelist channels
            let validChannels = ["showmenu"];
            if (validChannels.includes(channel)) {
                ipcRenderer.send(channel,'showmenu')
            }
        },
        saveAudio: (channel, ...args) => {
            // whitelist channels
            let validChannels = ["saveAudio"];
            if (validChannels.includes(channel)) {
                ipcRenderer.send(channel,'saveAudio',...args)
            }
        }
    }
)

Main.js:

function autoFileSave(event,filePath,audioData) {
    const buffer = Buffer.from(audioData)
    fs.writeFile(filePath, buffer, (err) => {
                       if (err) throw err;
            console.log('Saved!')
                    });
}
ipcMain.on ("saveAudio", (event, ...args) => {                                  // Affichage du menu popup
    console.log(`Restore`+ args[1] +` from param`)
    autoFileSave(event,args[1],args[2])
});

Renderer.js:

var reader = new FileReader();
reader.readAsArrayBuffer(rwav);
reader.onloadend = (event) => {
// The contents of the BLOB are in reader.result:
//const view = new Int8Array(reader.result);
            
window.api.saveAudio('saveAudio',(audioDirectory+"exports/"+tableObjet[obj].id+".wav"), reader.result);


文件被正确保存并被audacity识别

相关问题