こんにちは、node.jsのstreamについてご質問させてください。下記コードのようにpipeの処理を幾つか繋げている場合に、後続する処理を中断する事は可能でしょうか?もし、ご存知でしたらご教授お願いいたします。
具体的には、.pipe( decoder )で処理を中断して、.pipe(speaker)の処理を行わないように したいと考えております。以下コードはmp3ファイルをbufferから再生する処理です。
javascript
1 2var stream = require("stream"); 3var lame = require('lame') 4var Speaker = require('speaker'); 5 6bufferStream = new stream.PassThrough(); 7var decoder = new lame.Decoder() 8var speaker = new Speaker(); 9 10//任意のバッファ (例:mp3 base64) 11var buffer = new Buffer("foo"); 12 13//音声再生 14bufferStream.end( buffer ); 15bufferStream.pipe( decoder ).pipe(speaker); //下記コードでイベントハンドリングを追加 16 17
上記コードにイベントハンドリングも追加してみました。
希望としては.pipe( decoder )のendイベントをキャッチしたときに、後続する.pipe(speaker)を行わない方法を探しております。
javascript
1bufferStream.pipe( decoder ) 2 .on("error", function(){console.log("[decoder]error");} ) 3 .on("close", function(){console.log("[decoder]close");} ) 4 .on("unpipe", function(){console.log("[decoder]unpipe");} ) 5 .on("end", function(){ 6 console.log("[decoder]end"); 7 //希望としてはendイベントをキャッチしたときに、後続する.pipe(speaker)を行わない方法を探しております。 8 }) 9 .pipe(speaker) 10 .on("error", function(){console.log("[speaker]error");} ) 11 .on("close", function(){console.log("[speaker]close");} ) 12 .on("unpipe", function(){console.log("[speaker]unpipe");} ) 13 .on("end", function(){console.log("[speaker]end");} ) 14 .on("finish", function(){ 15 console.log("[speaker]finish"); 16 })
(経緯)
.pipe(speaker)の処理で以下ようなエラーが発生するのですが、errorイベントをハンドリングする方法が良くわかりませんでした。本来ならばerrorハンドリングしたい所ですが、別の方法として .pipe( decoder )のendイベントで、.pipe(speaker)を回避できないか考えている所です。
text
1libc++abi.dylib: Pure virtual function called!
以上となりますが、何卒よろしくお願いいたします。
あなたの回答
tips
プレビュー