2017-09-09 6 views
0

arecordからデータを読み取る簡単な方法を見つけるのに苦労しています。そして、処理の後、Juliaを使ってaplayに送信します。しかしジュリア:データを:: Cmdに書き込む標準的な方法

data = read(`arecord -d 3`) 

aplaydataを出力する簡単な作業:私もデータを取得する方法を考え出した

run(pipeline(`arecord -d 3`, `aplay`)) # Same as: arecord -d 3 | aplay 

:私は直接経由でデータを送信するためにパイプラインを使用する方法を考え出しました私は、一般的に、いくつかのデータをdとし、それをいくつかの::Cmdに投げ込んで(あるいは少なくとも::Cmd::IOStreamに変換する)Juliaの変数をどのように投げかけていくのか考えていました。また、1つのオフストリーム(上記のようにオーディオデータを読み込むようなもの)と連続的なストリーム(これは終了するように指示された後でのみ終了する)の間の違いは何か。

ご協力いただきありがとうございます。


EDIT:arecordaplayは、標準のLinux端末は音声を録音し、再生するためのコマンドです。 arecord -d 3は8ビット値の単純なベクトルを生成し、8kHzでサンプリングします。

は明確にするために、私が求めている:

(例えば、決して終わることのないファイルからの読み取り)ベクターに連続データストリームとして ::Cmdからデータを読み取るための標準的な方法は何
  • ::Cmdにデータのベクトルを1つのオフインスタンスまたは連続したデータストリームとして書き込む標準的な方法は何ですか?(たとえば、ファイルへの書き込みは連続して追加します)。ただpipelineまたはwrite機能(あるいは、少なくとも私はどちらかを使用して、それをいくつかのデータを渡すためにしようとしたときaplayに書き込み、上記のパイプラインの例で動作し、標準::Cmd変数は、動作しないため
  • これはませファイル固有のものですそうしてもうまくいっていない)。
+1

もう少し説明できますか?ここで 'arecord'と' aplay'とは何ですか?あなたが欠けているものと一緒に入力として与えられるもの。 –

+0

@RahulLakhanpalさんから質問にお答えしました。 – user3303504

答えて

1

dataを読み込んで処理した後。お試しください

open(`aplay`,"w",STDOUT) do stdin 
    write(stdin, data) 
end 
+0

ありがとう、オーディオは期待どおりに動作します。私は 'stdin = open( 'aplay'、" w "、STDOUT)'とそれに続く 'write(stdin、data)'(必要に応じてバックティックとスワップする)とは対照的に、なぜループとして動作するのか不明です。将来私が混乱しないように助けてくれる理由がありますか? – user3303504

+0

@ user3303504これを書いている他の方法( 'do'構文なし)については、うまくいくはずです。しかし、私のchrooted Julia環境では動作しないので、 'aplay'でテストしていません。 –

+1

残念ながら、これはケースではありません(私の混乱の多くにつながる)。この資料では、この資料ではあまりにも偉大なものではありません=(私はあなたがどのようなサンプリング周波数とデータの種類を使用することを再度試みるときにXを(と8bit以外のタイプであれば、1つのデータをすべて読み込むことが難しくなります(見つけられるファイルサイズの関数はありません)。 – user3303504

関連する問題