2012-03-24 16 views
1

再生したいtmpディレクトリの生のオーディオファイルをプッシュしているシステムを使用しています。私のLinuxディストリビューションには、ユーティリティ(例えば、mplayer、soxなど)でいくつかのオーディオを再生するたびに2秒間休止するバグがあります。これを回避するには、この一時停止をせずにオーディオファイルを連続して再生したいと考えています。bashからrawオーディオファイルのセットをキューに入れる方法

私はシステムをほとんどコントロールしていません。コンピュータの電源が入っていても、ファイルが爆発的に送られるたびにシステムが起動します。システムはファイルを作成し、指定したスクリプトを実行してファイルを削除します。ファイルを移動して変換することもできますが、シンプルでエレガントにしたいと思っています。私は、サウンドカードへのセッションを閉じることなくファイルを再生するキューにファイルをプッシュする方法があると思っているので、その迷惑な遅延はありません。

私はGStreamerやVLCのようなものを考えています。助言がありますか?

更新:この質問を閉じるために投票した場合、その理由を正確に教えてください。これは、bashプログラミング言語のためのプログラミング上の質問です。単純で簡単です。

あなたが http://wiki.videolan.org/Console

のGStreamer自体は、箱から出してプレイリストスタイルアプリには適していませんVLCのコマンドラインインターフェイスを呼び出すシェルスクリプトを使用してファイルをキューに入れることができますので、私はVLCを使用することをお勧めし

+3

「私のLinuxディストリビューションは、いくつかのバグを持っている」[要出典] –

+0

あなたは投稿する必要がありますディストリビューションのトラッカーに関するバグ報告とそれがどのようになっているかを見てください:)。 – Corbin

+0

私はこのバグの修正も検討していますが、上記のbashを使用した回避策がこの特定の投稿の理由です。私はいくつかのドライバやカーネルパッチを必要とせずに数分で適用できる簡単な回避策があると思っています。 – User1

答えて

1

- のためにgstreamerベースのソリューションでは、バックエンドとしてgstreamerを使用するプレーヤーを使用することをお勧めします。しかし、最初にVLCを試してみてください。

よろしく

+0

チップをありがとう。しかし、VLCは何らかの理由でファイルを正しく再生しません。私が 'cvlc testfile.wav'を実行しただけでは、最後の0.5秒程度が切り詰められます。私もmplayerを-idleスイッチで試してみましたが、何らかの長期間使用しないとプロセスが停止します。お勧めできる他のプログラムはありますか? – User1

0

あなたはplaybin2要素とのGStreamerを使って少しPythonアプリケーションを書くことができます。 Playbin2はギャップレスの再生をサポートしています。そこでは、再生中の次のファイルを準備することができます。プレイヤーのコマンド呼び出しを使用してスクリプトから複数のファイルを再生すると、ファイルが実行中のインスタンスにファイルをエンコードしない限り、ギャップが自然に発生します。

1

普通のgst-launchでは可能ではないと思われますが、pythonとpygstでこれを行うことができます。 MESSAGE_EOSを処理し、次のファイルでuriプロパティを更新してください。ここで

は(あなたが欲しいものを行いますが、ファイル間〜0.5秒の遅延を追加します)pygst tutorial例2.3からのコードに変更されます。

#!/usr/bin/env python 

import sys, os 
import glib, gobject 
import pygst 
pygst.require("0.10") 
import gst 

class CLI_Main: 
    def __init__(self): 
    self.player = gst.element_factory_make("playbin2", "player") 
    fakesink = gst.element_factory_make("fakesink", "fakesink") 
    self.player.set_property("video-sink", fakesink) 
    bus = self.player.get_bus() 
    bus.add_signal_watch() 
    bus.connect("message", self.on_message) 

    self.currentFile = 1 
    self.play(self.currentFile) 

    def play(self, n): 
     filePath = "file://" + sys.argv[n] 
     self.player.set_property("uri", filePath) 
     self.player.set_state(gst.STATE_PLAYING) 

    def on_message(self, bus, message): 
    t = message.type 
    if t == gst.MESSAGE_EOS: 
     self.player.set_state(gst.STATE_NULL) 
     self.currentFile += 1 
     if self.currentFile < len(sys.argv): 
     self.play(self.currentFile) 
     else: 
     loop.quit() 

    elif t == gst.MESSAGE_ERROR: 
     self.player.set_state(gst.STATE_NULL) 
     err, debug = message.parse_error() 
     print "Error: %s" % err, debug 
     loop.quit() 

mainclass = CLI_Main() 
gobject.threads_init() 
loop = glib.MainLoop() 
loop.run() 
関連する問題