Thread Band-Pass Filter in Perl
(9 answers)
Opened by Xorg1990 at 2013-05-25 16:41
Ein einfacher sound-server:
Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 #!/usr/bin/perl use strict; use warnings; use utf8; use Glib qw(TRUE FALSE); use GStreamer -init; my $loop = Glib::MainLoop -> new(undef, FALSE); #pipeline erzeugen # audiotestsrc freq=1000 ! audioconvert # ! audiochebband mode=band-pass,lower-frequency=1200,upper-frequency=1900 # ! audioconvert ! audioresample ! vorbisenc ! gdppay ! tcpclientsink port=3172 # my $pipeline = GStreamer::Pipeline->new("my_pipeline"); my( $src, $conv1, $filter, $conv2, $sample, $vorbis, $gdpplay, $sink ) = GStreamer::ElementFactory -> make( # demo in audiotestsrc => "sound_src", # alsa audio src # alsasrc => "sound_src", # filter audioconvert => "sound_conv1", audiochebband => "sound_filter", audioconvert => "sound_conv2", # demo out # alsasink => "sound_sink", # netwetzwerk out # # resample für stream audioresample => "sound_sample", # mp3 enkodieren vorbisenc => "sound_vorbis", # gstreamer netzwerk protokoll gdppay => "sound_encoder", # netzwerk ausgabe tcpserversink => "sound_sink", ); # werte setzen: # Einsetllungen für die Quelle # beim Sounddemo die Fequenz: $src->set(freq => 1000); # wenn es ein alsa source gerät ist: #$src->set(device => 'hw:1'); # Filter werte einstellen $filter->set(mode => 'band-pass'); $filter->set('lower-frequency' => 1200); $filter->set('upper-frequency' => 1900); # IP/Port auf der gesendet wird $sink->set(host => "127.0.0.1"); $sink->set(port => 3172); # Pipeline zusammenfügen $pipeline->add($src, $conv1, $filter, $conv2, $sample, $vorbis, $gdpplay, $sink); # reihenfolge festlegen $src->link($conv1, $filter, $conv2, $sample, $vorbis, $gdpplay, $sink); # einen Überwachungs-loop installieren my $count=70; Glib::Timeout->add (1000, sub{ # überwache den server ... print "running "; print $count--; print "\n"; $loop->quit() unless($count); }); # pipeline starten $pipeline->set_state("playing"); # eventloop starten $loop->run(); # pipeline stoppen $pipeline->set_state("null"); Der Client auch über gestreamer: gst-launch -v tcpclientsrc port=3172 ! gdpdepay ! vorbisdec ! audioconvert ! alsasink sync=false |