Skip to content

Commit 5fa6ea3

Browse files
committed
add writable binary stream support
1 parent 1800434 commit 5fa6ea3

File tree

3 files changed

+69
-9
lines changed

3 files changed

+69
-9
lines changed

midi.js

Lines changed: 37 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -19,23 +19,51 @@ midi.createReadStream = function(input) {
1919
var packet = new Buffer(message);
2020

2121
if (!stream.paused) {
22-
var res = stream.emit('data', packet);
22+
stream.emit('data', packet);
2323
} else {
2424
stream.queue.push(packet);
2525
}
26-
27-
if (!res) {
28-
stream.paused = true;
29-
stream.once('drain', function() {
30-
while (stream.queue.length && stream.write(queue.shift())) {}
31-
});
32-
}
3326
});
3427

28+
stream.pause = function() {
29+
stream.paused = true;
30+
};
31+
32+
stream.resume = function() {
33+
stream.paused = false;
34+
while (stream.queue.length && stream.write(queue.shift())) {}
35+
};
36+
3537
return stream;
3638
};
3739

3840

39-
midi.createWriteStream = function() {
41+
midi.createWriteStream = function(output) {
42+
output = output || new midi.output();
43+
var stream = new Stream();
44+
stream.writable = true;
45+
stream.paused = false;
46+
stream.queue = [];
47+
48+
stream.write = function(d) {
4049

50+
if (Buffer.isBuffer(d)) {
51+
d = [d[0], d[1], d[2]];
52+
}
53+
54+
output.sendMessage(d);
55+
56+
return !this.paused;
57+
}
58+
59+
stream.end = function(buf) {
60+
buf && stream.write(buf);
61+
stream.writable = false;
62+
};
63+
64+
stream.destroy = function() {
65+
stream.writable = false;
66+
}
67+
68+
return stream;
4169
};

test/fixture/144-23-81.bin

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
�Q

test/virtual-writeStream-test.js

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
var midi = require("../midi.js");
2+
var virtualInput = new midi.input();
3+
var output = new midi.output();
4+
var assert = require('assert');
5+
var fs = require('fs');
6+
var expect = [144, 23, 81];
7+
var called = false;
8+
var writer = midi.createWriteStream(output);
9+
10+
virtualInput.openVirtualPort("node-midi");
11+
virtualInput.on('message', function(deltaTime, buffer) {
12+
assert.deepEqual(buffer, expect);
13+
called = true;
14+
});
15+
16+
17+
for (var i = 0; i < output.getPortCount(); ++i) {
18+
if (output.getPortName(i) === 'node-midi') {
19+
output.openPort(i);
20+
break;
21+
}
22+
}
23+
24+
fs.createReadStream(__dirname + '/fixture/144-23-81.bin').pipe(writer);
25+
26+
setTimeout(function() {
27+
assert(called);
28+
output.closePort();
29+
virtualInput.closePort();
30+
process.exit(0);
31+
}, 100);

0 commit comments

Comments
 (0)