2016-04-24 6 views
2

Der Kern des Problems besteht darin, dass mit IBM Watson Speech to Text nur FLAC-, WAV- und OGG-Dateiformate hochgeladen und mit der API verwendet werden können.IBM Watson-Sprach-zu-Text-Audiokonvertierung in der Node.js-Webanwendung

Meine Lösung wäre, dass, wenn der Benutzer eine MP3-Datei hochlädt, BEVOR die Datei an Watson gesendet wird, eine Datenkonvertierung stattfinden würde. Im Wesentlichen lädt der Benutzer ein mp3 hoch, dann wird mit ffmpeg oder sox das Audio in ein OGG umgewandelt, wonach das Audio dann zu Watson hochgeladen wird.

Worüber ich mich nicht sicher bin: Was genau muss ich im Node.js Watson-Code ändern, damit die Audio-Konvertierung stattfinden kann? Unten verlinkt ist das Watson Repo, mit dem ich gerade arbeite. Ich bin mir sicher, dass die Datei, die geändert werden muss, fileupload.js ist, die ich verlinkt habe, aber wo die Änderungen hingehen ist, worüber ich unsicher bin?

Ich habe sowohl SO als auch developerWorks durchgesehen, die IBM SO für Antworten zu diesem Thema, aber ich habe keine gesehen, weshalb ich hier posten werde. Ich würde gerne meine Frage klären, wenn das notwendig ist.

Watson Speech to Text Repo

Antwort

2

Die Speech to Text Beispielanwendung Sie konvertieren versuchen, zu verwenden MP3-Dateien nicht zu OGG. Der Ordner src (mit fileupload.js) ist nur Javascript, das auf der Clientseite verwendet wird (dank Browserify).

Die Anwendung kommuniziert grundsätzlich den Browser mit der API unter Verwendung CORS, so dass das Audio vom Browser auf die Watson-API geht.


Wenn der Ton mit ffmpeg oder sox konvertieren möchten Sie müssen die Abhängigkeiten mit einem benutzerdefinierten buildpack installieren, da diese Module binäre Abhängigkeiten (C++ Code in ihnen) haben James Thomas eine buildpack mit SOx auf es: https://github.com/jthomas/nodejs-buildpack. Sie benötigen manifest.yml zu sein, etwas wie zu aktualisieren:

memory: 256M 
buildpack: https://github.com/jthomas/nodejs-buildpack.git 
command: npm start 

Knoten:

var sox = require('sox'); 

var job = sox.transcode('audio.mp3', 'audio.ogg', { 
    sampleRate: 16000, 
    format: 'ogg', 
    channelCount: 2, 
    bitRate: 192 * 1024, 
    compressionQuality: -1 
}); 
+0

Folgen Sie Fragen zu diesem, ich derzeit ffmpeg bin für Dateikonvertierung verwenden. Diese Audio-Konvertierungsbibliothek lädt jedoch die gesamte Audiodatei im Speicher, anstatt sie in Blöcken zu speichern. Was wäre eine gute Lösung für dieses Problem? – YAL