I'm getting audiofiles from Google Text-to-Speech and then I want to write the files to Firebase Storage. I copied the Text-to-Speech code from this documentation and the Firebase Storage code from here . Here's my Google Cloud Function:
exports.Google_T2S = functions.firestore.document('Users/{userID}/Spanish/T2S_Request').onUpdate((change, context) => {
if (change.after.data().word != undefined) {
// Performs the Text-to-Speech request
async function test() {
try {
const word = change.after.data().word; // the text
const longLanguage = 'Spanish';
const audioFormat = '.mp3';
const fs = require('fs');
const util = require('util');
const textToSpeech = require('@google-cloud/text-to-speech'); // Imports the Google Cloud client library
const client = new textToSpeech.TextToSpeechClient(); // Creates a client
let myWordFile = word.replace(/ /g,"_"); // replace spaces with underscores in the file name
myWordFile = myWordFile.toLowerCase(); // convert the file name to lower case
myWordFile = myWordFile + audioFormat; // append .mp3 to the file name;
// boilerplate copied from https://cloud.google.com/blog/products/gcp/use-google-cloud-client-libraries-to-store-files-save-entities-and-log-data
const {Storage} = require('@google-cloud/storage');
const storage = new Storage();
const bucket = storage.bucket('myProject-cd99d.appspot.com');
const file = bucket.file('Audio/' + longLanguage + '/' + myWordFile);
const request = { // Construct the request
input: {text: word},
// Select the language and SSML Voice Gender (optional)
voice: {languageCode: 'es-ES', ssmlGender: 'FEMALE'},
// Select the type of audio encoding
audioConfig: {audioEncoding: 'MP3'},
};
const [response] = await client.synthesizeSpeech(request);
// Write the binary audio content to a local file
const writeFile = util.promisify(fs.writeFile);
await writeFile(file, response.audioContent, 'binary');
}
catch (error) {
console.error(error);
}
}
test();
} // close if
return 0;
});
The problem is here:
const file = bucket.file('Audio/' + longLanguage + '/' + myWordFile);
const writeFile = util.promisify(fs.writeFile);
await writeFile(file, response.audioContent, 'binary');
fs.writeFile expects file
to be a string
, Buffer
, URL
, or integer
. It doesn't like that I put in a Google Cloud Storage function. What should I put there?
Node's fs
module is only for writing the local filesystem, so you can't use it to write to Cloud Storage. If you want to write to Cloud Storage, you're going to have to use the Cloud Storage SDK (or the Admin SDK , which wraps the Cloud Storage SDK).
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.