RecorderJs no elétron exporta objetos blob e os salva localmente usando o nó

recorderJs usa node para salvar em arquivos locais

Esta postagem do blog fala principalmente sobre como usar recorderJs para gravar em elétron e salvá-lo em um arquivo local usando o nó. Ele pode ser usado principalmente na função de salvar gravação em elétron, etc. Métodos semelhantes de upload de servidores de nó para salvar áudio e vídeo arquivos também podem ser usados ​​para referência. O nó é necessário para operações de leitura e gravação de arquivos.

O front-end usa recorderJs para gravar áudio

Depois de usar recorderJs para gravar áudio no front-end, você pode usar recorder.exportWAV() para exportar o objeto blob e, em seguida, converter o objeto blob no formato de codificação base64, para que possa ser passado do front-end para o nó para processamento .

function createDownloadLink() {
    
    
  recorder && recorder.exportWAV(function(cb) {
    
    
    var a = new FileReader();
    readBlobAsBase64(cb, function (dataurl){
    
    
        audioBuffer = dataurl;
        saveRecording(audioBuffer);
    });
  });
}

// 把blob对象转换为Base64
function readBlobAsBase64(blob, callback) {
    
    
  var a = new FileReader();
  a.onload = function(e) {
    
    callback(e.target.result);};
  a.readAsDataURL(blob);
}

O front-end passa para o nó por meio do aplicativo para salvar a operação.

O front end inicia uma operação de solicitação para o aplicativo e passa a codificação base64 obtida anteriormente como parâmetro para o nó. Como o objeto blob não pode ser passado diretamente aqui, o objeto blob é convertido para o formato de codificação base64 para transmissão.
Código de referência para início de solicitação de front-end:

app.once('setAudioCallback', callback);
app.send('setAudioFile', {
    
    
  data: {
    
    
    "audiofile": audioBuffer,    // base64 编码格式
    "savePath": savePath + '\\', // savePath 为保存的文件夹的绝对路径
    "outfileName": saveName      // saveName 为保存文件的文件名
  },
  callback: 'setAudioCallback'   // 完成保存文件后的回调
});

nó executa uma operação de salvamento

Após o nó obter os parâmetros, ele executa uma operação de salvamento e verifica se os parâmetros recebidos estão vazios antes de realizar a operação de salvamento. Em seguida, converta os parâmetros do formato de codificação base64 em um buffer . Observe que o prefixo do formato de codificação base64 precisa ser removido antes de converter para um buffer . Caso contrário, após a operação de salvamento subsequente, será solicitado que o arquivo não possa ser reproduzido após abertura. Isso pode ocorrer porque o tipo de arquivo não é compatível, a extensão do arquivo está incorreta ou o arquivo está corrompido. . Código de referência do nó:
O Node salva o arquivo de áudio, abre-o e não consegue reproduzi-lo.

// 保存录音临时文件
ipc.on("setAudioFile", (event,data) => {
    
    
	let info = {
    
    
		"flag": false,
		"message": ""
	}

	var audiofile = data.data.audiofile;
	var savePath = data.data.savePath ? data.data.savePath : '';
	var outfileName = data.data.outfileName;
	if ((!audiofile || (!outfileName))){
    
    
		info.message = '参数不正确'
		event.sender.send(data.callback, info)
	}
	
	// base64编码转换为Buffer,需去除base64编码前缀
	var dataBuffer = new Buffer(audiofile.replace(/^data:audio\/\w+;base64,/,""), 'base64');

	// fs.writeFile异步保存文件
	fs.writeFile(savePath + "sdasdaas.wav", dataBuffer, (err) => {
    
    
		if (err) throw err;
			console.log('文件已保存');
			info.message = '文件已保存'
			event.sender.send(data.callback, JSON.stringify(info))
	})
})

fs.writeFile salva o buffer de forma assíncrona ou fs.writeFileSync salva o arquivo de forma síncrona

Aqui, fs.writeFile é usado para salvar arquivos de forma assíncrona ou fs.writeFileSync de forma síncrona . Diferentes métodos precisam ser selecionados em diferentes cenários. Se vários arquivos forem salvos ao mesmo tempo, um retorno de chamada será necessário após o salvamento. É mais conveniente escolher fs.writeFileSync para salvar arquivos de forma síncrona .
fs.writeFile assíncrono

fs.writeFile(savePath + "sdasdaas.wav", dataBuffer, (err) => {
    
    
	if (err) throw err;
		console.log('文件已保存')
		info.message = '文件已保存'
		event.sender.send(data.callback, JSON.stringify(info))
})

Sincronização fs.writeFileSync

fs.writeFileSync(savePath + "sdasdaas.wav", dataBuffer)
console.log('文件已保存')
info.message = '文件已保存'
event.sender.send(data.callback, JSON.stringify(info))
  • Para obter informações sobre a sintaxe fs.writeFile e fs.writeFileSync , consulte aqui .

resumo

Estou pensando sobre esse problema de conversão de formato há vários dias e espero que esta postagem do blog possa ajudar amigos necessitados.

Acho que você gosta

Origin blog.csdn.net/qq_36607860/article/details/84792252
Recomendado
Clasificación