Search code examples
google-cloud-platformspeech-recognitionspeech-to-textgoogle-speech-apigoogle-cloud-speech

Google cloud speech to text long audio response


I am trying to convert audio to text, but getting result as,

LongRunningRecognizeResponse { results: [] }

Here is my function,

    const audio = {
    uri: `gs://${BUCKET}/${fileName}`,
};

const request = {
    config: {
        encoding: 'LINEAR16',
        sampleRateHertz: 16000,
        languageCode: 'en-US',
    },
    audio: audio,
};

client.longRunningRecognize(request)
    .then(responses => {
        const [operation, initialApiResponse] = responses;

        operation.on('complete', (result, metadata, finalApiResponse) => {
            console.log('complete', result) // LongRunningRecognizeResponse { results: [] }
        });

        operation.on('progress', (metadata, apiResponse) => {
            console.log('progress', apiResponse)
        });

        operation.on('error', err => {
            throw (err);
        });
    })

Solution

  • const transcribeLong = async (url, channels) => {
        const nameExtract = url.split('/');
        const fileName = nameExtract[nameExtract.length - 1];
        let localfile;
        try {
            localfile = await download(url);
            fs.writeFileSync(fileName, localfile);
            await storage.bucket(BUCKET).upload(fileName);
            const audio = {
                uri: `gs://${BUCKET}/${fileName}`,
            };
            const request = {
                config: {
                    languageCode: `en-US`,
                    alternativeLanguageCodes: [`es-MX`, `en-US`],
                    encoding: 'LINEAR16',
                    sampleRateHertz: 8000,
                    audioChannelCount: channels || 2, //changed from 2
                    enableSeparateRecognitionPerChannel: true,
                },
                audio,
            };
            const [operation] = await client.longRunningRecognize(request);
            const [response] = await operation.promise();
            return response
        } catch (error) {
            console.error(error.toString());
        }
    };
    

    Issues was with wrong channels as argument in request.