Closed nfriedly closed 9 years ago
Actually, I poked around a bit more and realized that was a package.json thing. But now I have the next issue:
-
> node-opus@0.1.2 install /home/pi/nodeplayer/node_modules/node-opus
> node-gyp rebuild
make: Entering directory '/home/pi/nodeplayer/node_modules/node-opus/build'
make: *** No rule to make target 'Release/obj.target/libopus/deps/opus/src/opus.o', needed by 'Release/obj.target/deps/opus.a'. Stop.
make: Leaving directory '/home/pi/nodeplayer/node_modules/node-opus/build'
gyp ERR! build error
gyp ERR! stack Error: `make` failed with exit code: 2
gyp ERR! stack at ChildProcess.onExit (/usr/local/lib/node_modules/npm/node_modules/node-gyp/lib/build.js:269:23)
gyp ERR! stack at ChildProcess.emit (events.js:110:17)
gyp ERR! stack at Process.ChildProcess._handle.onexit (child_process.js:1074:12)
gyp ERR! System Linux 3.18.12+
gyp ERR! command "node" "/usr/local/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js" "rebuild"
gyp ERR! cwd /home/pi/nodeplayer/node_modules/node-opus
gyp ERR! node -v v0.12.2
gyp ERR! node-gyp -v v1.0.3
gyp ERR! not ok
npm ERR! Linux 3.18.12+
npm ERR! argv "/usr/local/bin/node" "/usr/local/bin/npm" "install" "https://github.com/nfriedly/node-opus"
npm ERR! node v0.12.2
npm ERR! npm v2.7.4
npm ERR! code ELIFECYCLE
npm ERR! node-opus@0.1.2 install: `node-gyp rebuild`
npm ERR! Exit status 1
Any ideas there? (Sorry, I'm a complete noob at this stuff.)
Hm. No idea what would cause that (although I'm a bit unfamiliar with all the intricacies of gyp as well).
Can you try the following?
node-opus/deps
node-gyp rebuild
I'm guessing this doesn't actually help you, I just want to confirm that it's that binding.gyp that is causing the problem.
On my system (Linux x64) the output is along the lines of:
wace@jubjub:~/projects/node-opus/deps$ node-gyp rebuild
gyp info it worked if it ends with ok
gyp info using node-gyp@1.0.3
gyp info using node@0.12.2 | linux | x64
gyp info spawn python
gyp info spawn args [ '/home/wace/.nvm/versions/node/v0.12.2/lib/node_modules/node-gyp/gyp/gyp_main.py',
gyp info spawn args 'binding.gyp',
gyp info spawn args '-f',
gyp info spawn args 'make',
gyp info spawn args '-I',
gyp info spawn args '/home/wace/projects/node-opus/deps/build/config.gypi',
gyp info spawn args '-I',
gyp info spawn args '/home/wace/.nvm/versions/node/v0.12.2/lib/node_modules/node-gyp/addon.gypi',
gyp info spawn args '-I',
gyp info spawn args '/home/wace/.node-gyp/0.12.2/common.gypi',
gyp info spawn args '-Dlibrary=shared_library',
gyp info spawn args '-Dvisibility=default',
gyp info spawn args '-Dnode_root_dir=/home/wace/.node-gyp/0.12.2',
gyp info spawn args '-Dmodule_root_dir=/home/wace/projects/node-opus/deps',
gyp info spawn args '--depth=.',
gyp info spawn args '--no-parallel',
gyp info spawn args '--generator-output',
gyp info spawn args 'build',
gyp info spawn args '-Goutput_dir=.' ]
gyp info spawn make
gyp info spawn args [ 'BUILDTYPE=Release', '-C', 'build' ]
make: Entering directory `/home/wace/projects/node-opus/deps/build'
CC(target) Release/obj.target/libopus/opus/src/opus.o
CC(target) Release/obj.target/libopus/opus/src/opus_decoder.o
CC(target) Release/obj.target/libopus/opus/src/opus_encoder.o
CC(target) Release/obj.target/libopus/opus/src/opus_multistream.o
...
I'll see if I can reproduce this on my Pi if I can figure out where I've put it and whether it has an OS installed.
Yep, just as you suspected:
pi@raspberrypi ~/node-opus/deps $ node-gyp rebuild
gyp info it worked if it ends with ok
gyp info using node-gyp@1.0.3
gyp info using node@0.12.2 | linux | arm
gyp info spawn python
gyp info spawn args [ '/usr/local/lib/node_modules/node-gyp/gyp/gyp_main.py',
gyp info spawn args 'binding.gyp',
gyp info spawn args '-f',
gyp info spawn args 'make',
gyp info spawn args '-I',
gyp info spawn args '/home/pi/node-opus/deps/build/config.gypi',
gyp info spawn args '-I',
gyp info spawn args '/usr/local/lib/node_modules/node-gyp/addon.gypi',
gyp info spawn args '-I',
gyp info spawn args '/home/pi/.node-gyp/0.12.2/common.gypi',
gyp info spawn args '-Dlibrary=shared_library',
gyp info spawn args '-Dvisibility=default',
gyp info spawn args '-Dnode_root_dir=/home/pi/.node-gyp/0.12.2',
gyp info spawn args '-Dmodule_root_dir=/home/pi/node-opus/deps',
gyp info spawn args '--depth=.',
gyp info spawn args '--no-parallel',
gyp info spawn args '--generator-output',
gyp info spawn args 'build',
gyp info spawn args '-Goutput_dir=.' ]
gyp info spawn make
gyp info spawn args [ 'BUILDTYPE=Release', '-C', 'build' ]
make: Entering directory '/home/pi/node-opus/deps/build'
make: *** No rule to make target 'Release/obj.target/libopus/opus/src/opus.o', needed by 'Release/obj.target/opus.a'. Stop.
make: Leaving directory '/home/pi/node-opus/deps/build'
gyp ERR! build error
gyp ERR! stack Error: `make` failed with exit code: 2
gyp ERR! stack at ChildProcess.onExit (/usr/local/lib/node_modules/node-gyp/lib/build.js:269:23)
gyp ERR! stack at ChildProcess.emit (events.js:110:17)
gyp ERR! stack at Process.ChildProcess._handle.onexit (child_process.js:1074:12)
gyp ERR! System Linux 3.18.12+
gyp ERR! command "node" "/usr/local/bin/node-gyp" "rebuild"
gyp ERR! cwd /home/pi/node-opus/deps
gyp ERR! node -v v0.12.2
gyp ERR! node-gyp -v v1.0.3
gyp ERR! not ok
I'm on a 256mb Pi 1 running the 2015-02-16 release of Raspbian (https://www.raspberrypi.org/downloads/) and running node.js binaries from http://conoroneill.net/node-v0122-for-arm-v6v7-including-raspberry-pi-raspberry-pi-2-and-odroid-c1
I'm specifically trying to get this chunk of code to work (only with the accept header switched to opus):
var fs = require('fs');
var watson = require('watson-developer-cloud');
var Speaker = require('speaker');
var wav = require('wav');
var reader = new wav.Reader();;
var text_to_speech = watson.text_to_speech({
username: '0eaef628-d28e-4365-b0db-069046f37fef',
password: 'Mm1DWPHFC7sq',
version: 'v1'
});
var params = {
text: 'Hello from IBM Watson',
accept: 'audio/wav' // or audio/ogg; codec=opus
};
var stream = text_to_speech.synthesize(params)
reader.on('format', function(format) {
console.log('format', format);
reader.pipe(new Speaker(format)).on('error', function(err) {console.error(err.stack);});
});
stream.pipe(reader);
In wav mode, it plays, but it's super choppy (probably because I'm on a crappy slow DSL connection out in the countryside...). So, I'm thinking that opus will help, at least if I can get it to compile.
After that, I'll see if I can make a nice Stream implementation to make it easy to pipe a http response into node-opus
and then from there into speaker
(and wav
if we need it). I'll send you another PR once I have that working well.
Just for kicks, I did the same steps on my macbook and it looks like the issue crops up there as well:
Nathans-MBP:player nfriedly$ npm install https://github.com/nfriedly/node-opus
-
> node-opus@0.1.2 install /Users/nfriedly/player/node_modules/node-opus
> node-gyp rebuild
make: *** No rule to make target `Release/obj.target/libopus/deps/opus/src/opus.o', needed by `Release/opus.a'. Stop.
gyp ERR! build error
gyp ERR! stack Error: `make` failed with exit code: 2
gyp ERR! stack at ChildProcess.onExit (/usr/local/lib/node_modules/npm/node_modules/node-gyp/lib/build.js:269:23)
gyp ERR! stack at ChildProcess.emit (events.js:110:17)
gyp ERR! stack at Process.ChildProcess._handle.onexit (child_process.js:1074:12)
gyp ERR! System Darwin 14.3.0
gyp ERR! command "node" "/usr/local/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js" "rebuild"
gyp ERR! cwd /Users/nfriedly/player/node_modules/node-opus
gyp ERR! node -v v0.12.2
gyp ERR! node-gyp -v v1.0.3
gyp ERR! not ok
npm ERR! Darwin 14.3.0
npm ERR! argv "/usr/local/bin/node" "/usr/local/bin/npm" "install" "https://github.com/nfriedly/node-opus"
npm ERR! node v0.12.2
npm ERR! npm v2.7.4
npm ERR! code ELIFECYCLE
npm ERR! node-opus@0.1.2 install: `node-gyp rebuild`
npm ERR! Exit status 1
Found my Rasp. Trying to set it up but might go until tomorrow.
However for your use case you also need to look at: https://github.com/TooTallNate/node-ogg
node-opus is pure opus implementation, what you are dealing with is opus stream in an ogg container (which is the usual case).
I believe node-ogg already has some streaming functionality in it though (although I never got the whole library working. I believe I had some issues getting that one to compile). If you're planning on making node-opus streaming, take a look at how node-ogg and node-vorbis work together, both of them are by TooTallNate and I believe he has some generic interface all of his codecs use to talk with their containers.
facepalm
npm doesn't support git submodules, which the opus source directory is.
.. so npm install node-opus results in completely empty deps/opus >.>
oops..
Didn't bother trying a clear install on my end as I know some other people on Linux x64 who've been working on this so I figured it must be working in the general case.
Sorry!
Fixed. At least I was able to install it from npm now.
Hah, I didn't even think of that. I'll try out the new version and also check out node-ogg
Beautiful, I can now install it on my Pi (so, presumably it will work). However, while the pi was compiling, I tested it on my mac as well, and it's choking when looking for the config.h file. Does it need an OS variable at https://github.com/Rantanen/node-opus/blob/master/deps/binding.gyp#L3 ?
Nathans-MBP:player nfriedly$ npm install https://github.com/nfriedly/node-opus
\
> node-opus@0.1.3 install /Users/nfriedly/player/node_modules/node-opus
> node-gyp rebuild
CC(target) Release/obj.target/libopus/deps/opus/src/opus.o
../deps/opus/src/opus.c:29:10: fatal error: 'config.h' file not found
#include "config.h"
^
1 error generated.
make: *** [Release/obj.target/libopus/deps/opus/src/opus.o] Error 1
gyp ERR! build error
gyp ERR! stack Error: `make` failed with exit code: 2
gyp ERR! stack at ChildProcess.onExit (/usr/local/lib/node_modules/npm/node_modules/node-gyp/lib/build.js:269:23)
gyp ERR! stack at ChildProcess.emit (events.js:110:17)
gyp ERR! stack at Process.ChildProcess._handle.onexit (child_process.js:1074:12)
gyp ERR! System Darwin 14.3.0
gyp ERR! command "node" "/usr/local/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js" "rebuild"
gyp ERR! cwd /Users/nfriedly/player/node_modules/node-opus
gyp ERR! node -v v0.12.2
gyp ERR! node-gyp -v v1.0.3
gyp ERR! not ok
npm ERR! Darwin 14.3.0
npm ERR! argv "/usr/local/bin/node" "/usr/local/bin/npm" "install" "https://github.com/nfriedly/node-opus"
npm ERR! node v0.12.2
npm ERR! npm v2.7.4
npm ERR! code ELIFECYCLE
npm ERR! node-opus@0.1.3 install: `node-gyp rebuild`
npm ERR! Exit status 1
There's no config.h for macs so you'll need to generate it just like you did for the Pi. I don't have mac myself so can't do it - but I'll welcome a pull request. Someone did this for the node-celt
project of mine so you can see that for an example:
https://github.com/Rantanen/node-celt/tree/master/deps/config/celt-0.7.1 Rantanen/node-celt@2c9edd14cd5de05178fc51789ac6c810eb3c3886
(And no, I got no idea why there are both darwin
and mac
directories. I just merged the PR) :)
Right, I did generate it: https://github.com/nfriedly/node-opus/blob/master/deps/config/opus/darwin/x64/config.h
Although I only used the darwin dir... let me try copying it to a mac dir.
Unfortunately node-ogg has issues with Node 0.12: TooTallNate/node-ogg#7
Hopefully that PR gets merged in at some point. Until then you could try running your project with Node v0.10 which seems to support all of the following:
.. at least I was able to npm install
all of those, although for speaker
I had to use the npm_config_mpg123_backend=dummy
option as my server doesn't have speakers configured.
Oh, thanks.
I figured out the mac/darwin thing: the package.json listing must be "darwin" but the config folder must be named "mac". So, PR incoming with that and my RPi config ;)
Hey I put together a stream wrapper for this lib and tried to use it with the ogg
and speaker
libraries. With node 0.10, I get audio out of my speakers that's about the right length, but utterly incomprehensible. (And, as you mentioned, it doesn't work at all on 0.12.)
It sounds the same whether I play from disk or stream, so I don't think bandwidth is the issue this time.
So, sorry to hijack a closed issue, but if you get a minute, I'd appreciate any thoughts you could offer: https://gist.github.com/nfriedly/c4549e76440d7e703d43
Hey, I followed the instructions in the readme to build the config.h file for my raspberry pi (and fleshed it out a bit): https://github.com/nfriedly/node-opus/commit/0ad226a74801f12e8f7b9b59686158c4866dde26
But, when I try to install from my repo, I get the following:
Presumably one of the .gyp files needs to be updated, but I'm not sure which / how. Can you give me any pointers there?