Как записать японский голос SpeechSynthesis в Electron

Я создаю приложение с помощью Electron. Поэтому я хочу вывести голос SpeechSynthesis в файл wav.

Это только японская озвучка. (Поэтому я не могу использовать библиотеку, такую ​​​​как meSpeak.)

И я хочу использовать голос, установленный на локальном ПК. (например, 唄詠, Softalk и т. д., ...)

Он не мог нормально выводиться, если это был следующий код.

Хотя вы можете вывести сам файл, его содержимое не предназначено.

Тестируемая среда — macOS 10.13.1.

как мне это сделать?

Основной процесс:

// This code is a part.
// Actually there are many different properties,
// This code shows only the minimum necessary part.
let obj = {
    speech: "コンニチワ", // it was converted from sentence to reading katakana
    cast: {
        voice: {
            pitch: 100,
            speed: 100,
            volume: 50.0,
            name: ""
        }
    }
}
// mainWindow is BrowserWindow
mainWindow.webContents.send('record-speech', obj, "example.wav")

Процесс визуализации:

ipcRenderer.on('record-speech', (event, obj, path) => {
    // Setup utterance
    let voice = null
    speechSynthesis.onvoiceschanged = () => {
        voice = speechSynthesis.getVoices().find(({
            name: _name
        }) => _name === obj.cast.voice.name)
    }
    let utter = new SpeechSynthesisUtterance()

    utter.lang = "ja-JP"
    utter.text = obj.speech
    utter.pitch = obj.cast.voice.pitch / 100
    utter.rate = obj.cast.voice.speed / 20
    utter.voice = voice
    utter.volume = obj.cast.voice.volume / 100

    let audioContext = new AudioContext()
    navigator.getUserMedia({audio: true}, (stream) => {
        let audioInput = audioContext.createMediaStreamSource(stream)

        // Using 'wave-recorder' package of npm
        let recorder = WaveRecorder(audioContext, {
            channels: 2,
            bitDepth: 32,
            silenceDuration: 0.1
        })

        audioInput.connect(recorder.input)
        let fileStream = fs.createWriteStream(path)
        recorder.pipe(fileStream)

        recorder.on('header', (header) => {
            let headerStream = fs.createWriteStream(path, {
                start: 0,
                flags: 'w'
            })

            headerStream.write(header)
            headerStream.end()
        })

        utter.onend = ((event) => {
            console.log("Speak ended");
        })
        speechSynthesis.speak(utter)
    }, (e) => { console.log(e); })
})

person Mikuro Xina    schedule 07.12.2017    source источник
comment
Возможный дубликат Записать HTML5 SpeechSynthesisUtterance сгенерированную речь в файл   -  person M.R.Safari    schedule 24.12.2017
comment
Это отличается от этого вопроса. Как я уже упоминал в тексте, я не могу использовать другую библиотеку, например mespeak.   -  person Mikuro Xina    schedule 01.01.2018