質問するログイン新規登録

Q&A

0回答

3781閲覧

node.js stream のpipe処理を途中で終了したい

TEA

総合スコア65

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

4クリップ

投稿2015/09/22 08:52

編集2015/09/22 08:56

0

4

こんにちは、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!

以上となりますが、何卒よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.29%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問