Mopidy: рдПрдХ gstreamer рдлреАрдлреЛ рд╕рд┐рдВрдХ рдЬреЛрдбрд╝рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 8 рдЬреБрд▓ре░ 2014  ┬╖  73рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: mopidy/mopidy

рдпрд╣ рд╕рд╛рдордиреЗ рдЖрддрд╛ рд░рд╣рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд▓реЛрдЧ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ ncmpcpp рдХреЗ рд╡рд┐рдЬрд╝реБрдЕрд▓рд╛рдЗрдЬрд╝рд░ рдХреЛ рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВ

рдПрдХ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдлреАрдлреЛ рд╕рд┐рдВрдХ рдмрдирд╛рдиреЗ рдХреА рдЯреНрд░рд┐рдХ рджреБрдЧрдиреА рд╣реИред рдЖрдкрдХреЛ рдЧреИрд░-рдЕрд╡рд░реБрджреНрдз рд▓реЗрдЦрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдЬрдм рддрдХ рдХреЛрдИ рдкрд╛рдардХ рди рд╣реЛ, рддрдм рддрдХ рд▓реЗрдЦрди рд╕реЙрдХреЗрдЯ рдЦреЛрд▓рдирд╛ рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рдПрдЧрд╛, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рдПрдХ рдкрд╛рдардХ рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рджреВрд╕рд░реЗ, рдпрджрд┐ рдмрдлрд░ рднрд░ рдЬрд╛рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдмрд╛рд╣рд░реА рдкрд╛рдардХ рдкреАрдЫреЗ рд░рд╣ рдЬрд╛рддрд╛ рд╣реИ рдпрд╛ рдХреЛрдИ рдирд╣реАрдВ рд╣реИ, рддреЛ рдЖрдкрдХреЗ рдЖрдВрддрд░рд┐рдХ рдкрд╛рдардХ рдХреЛ рдмрдлрд░ рдХреЛ рд╕рд╛рдлрд╝ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдЗрд╕рдХреЗ рдореВрд▓ рд╕рд╛рд░ рдХреЛ рдкрдХрдбрд╝ рд▓реЗрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрднреА рднреА рддреНрд░реБрдЯрд┐ рдкреНрд░рдмрдВрдзрди рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рдХреБрдЫ рдФрд░ рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

import errno
import os
import stat

LINUX_FIFO_BUFFER_SIZE = 65536


class FifoStreamer(object):                                                     
    def __init__(self, location):                                               
        self.location = location                                                
        self.reader = None                                                      
        self.writer = None                                                      

    def create(self):                                                           
        try:                                                                    
            mode = os.stat(self.location).st_mode                               
            if not stat.S_ISFIFO(mode):                                         
                raise Exception('File exists but is not a FIFO')                
        except OSError as e:                                                    
            if e.errno == errno.ENOENT:                                         
                os.mkfifo(self.location)                                        
            else:                                                               
                raise                                                           

        # TODO: wrap in could not open reader / writer?
        self.reader = os.open(self.location, os.O_NONBLOCK | os.O_RDONLY)       
        self.writer = os.open(self.location, os.O_NONBLOCK | os.O_WRONLY)       

    def close(self):                                                            
        # TODO: make closing robust
        os.close(self.writer)                                                   
        os.close(self.reader)                                                   

    def write(self, data):                                                      
        while data:                                                             
            try:                                                                
                written = os.write(self.writer, data)                           
                data = data[written:]                                           
            except OSError as e:                                                
                if e.errno == errno.EINTR:                                      
                    continue                                                    
                elif e.errno in (errno.EAGAIN, errno.EWOULDBLOCK):              
                    self.flush()                                                
                else:                                                           
                    raise                                                       

    def flush(self):                                                            
        while True:                                                             
            try:                                                                    
                if not os.read(self.reader, LINUX_FIFO_BUFFER_SIZE):                             
                    break                                                       
            except OSError as e:                                                
                if e.errno in (errno.EAGAIN, errno.EWOULDBLOCK):                
                    break                                                       
                elif e.errno == errno.EINTR:                                    
                    continue                                                    
                else:                                                           
                    raise 

рдЙрдкрд░реЛрдХреНрдд рдХреЛрдб рдХреЛ рдЕрдм GStreamer рдХреЗ рд╕рд╛рде рдПрдХреАрдХреГрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред 0.10 рдорд╛рдирддреЗ рд╣реБрдП рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдореБрдЭреЗ рд╕рдВрдХреЛрдЪ рд╣реИ рдХрд┐ рд╣рдо 1.x рдХреА рдУрд░ рдмрдврд╝рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рдЧреАрд░ рдмрд╛рдзреНрдпрдХрд╛рд░реА рдЕрдЬрдЧрд░ рдореЗрдВ рддрддреНрд╡ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рдирд╣реАрдВ рд╣реИрдВред 1.x рдореЗрдВ рдЗрд╕ рдХреЛрдб рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рд╕рдорд╕реНрдпрд╛ рдЙрд╕ рдкреИрдб рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЛ рдмрдирд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реЛрдиреЗ рдХреЗ рдХрд╛рд░рдг рдЙрдмрд▓рддреА рд╣реИ рдЬрд┐рд╕реЗ рдмреЗрд╕рд╕рд┐рдВрдХ рдвреВрдВрдврдиреЗ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реИред рдЗрд╕реЗ рдПрдХ рд╕рд╛рджреЗ рддрддреНрд╡ рдХреЗ рд░реВрдк рдореЗрдВ рдмрдирд╛рдирд╛ рд╕рдВрднрд╡ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ рдмреЗрд╕рд╕рд┐рдВрдХ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЖрдк рд╕рд╣реА рд╣реЛ рдЬрд╛рдПрдВред

import gobject                                                                  

import pygst                                                                    
pygst.require('0.10')                                                           
import gst                                                             


class FifoSink(gst.BaseSink):                                                   
    __gstdetails__ = (                                                          
        'FifoSink',                                                             
        'Sink',                                                                 
        'Sink designed to handle FIFO output.',                        
        'Mopidy')                                                               

    __gsttemplates__ = (gst.PadTemplate('sink', gst.PAD_SINK, gst.PAD_ALWAYS,   
                                        gst.caps_new_any()),)                   

    # TODO: don't allow changing location in flight, i.e. create getter/setter
    location = gobject.property(type=str)                                       

    def __init__(self):                                                         
        gst.BaseSink.__init__(self)                                             
        self.streamer = None                                                    

    def do_start(self):                                                                                               
        self.streamer = FifoStreamer(self.location)                             
        self.streamer.create()                                                  
        return True                                                             

    def do_stop(self):                                                          
        self.streamer.close()                                                   
        return True                                                             

    def do_render(self, buf):                                                   
        try:                                                                    
            self.streamer.write(bytes(buf))                                     
            return gst.FLOW_OK                                                  
        except OSError as e:                                                    
            self.error("Failed: %s", e)                                         
            return gst.FLOW_ERROR                                               


gobject.type_register(FifoSink)                                                 
gst.element_register(                                                           
    FifoSink, 'fifosink', gst.RANK_MARGINAL)                                    

if __name__ == '__main__':                                                      
    import gobject                                                              
    gobject.threads_init()                                                      

    output = """                                                                
capsfilter caps="audio/x-raw-int,width=16,rate=44100,channels=1" ! 
tee name=t 
t. ! queue ! alsasink                                                           
t. ! queue ! fifosink location=/tmp/test2.fifo                                  
"""                                                                             

    sink = gst.parse_bin_from_description(                                      
        output, ghost_unconnected_pads=True)                                    

    playbin = gst.element_factory_make('playbin2')                              
    playbin.set_property('audio_sink', sink) 

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдПрдХ рд╕рдорд╕реНрдпрд╛ рдЬрд┐рд╕рдХрд╛ рдореИрдВрдиреЗ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдерд╛, рд╡рд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ ncmpcpp рджреНрд╡рд╛рд░рд╛ рдЕрдкреЗрдХреНрд╖рд┐рдд рдСрдбрд┐рдпреЛ рдкреНрд░рд╛рд░реВрдк рд╕реЗ рдореЗрд▓ рдЦрд╛рдирд╛ рднреВрд▓ рд░рд╣реА рдереА, рдЗрд╕рд▓рд┐рдП рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдореЛрдиреЛ/рд╕реНрдЯреАрд░рд┐рдпреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдореЗрд▓ рдЦрд╛рддреЗ рд╣реИрдВред

C-enhancement A-audio

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

FYI рдХрд░реЗрдВ рдореИрдВрдиреЗ gstreamer рдХреЗ udpsink рд▓рд┐рдП ncmpcpp рдореЗрдВ рд╕рдорд░реНрдерди рдЬреЛрдбрд╝рд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЕрдм рдЗрд╕реЗ рд╕реАрдзреЗ рдлреАрдлреЛ рд╣реИрдХреНрд╕ рдХреЗ рдмрд┐рдирд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП https://github.com/ncmpcpp/ncmpcpp/commit/fb886f687014e22b2fe1477da855be5201063ea8 рджреЗрдЦреЗрдВред

рдПрдХ рдЯреАрдЬрд╝рд░ рдХреЗ рдиреАрдЪреЗред рдпрд╣ mopidy + mopidy-spotify + mopidy-mpd + ncmpcpp рд╣реИред

https://user-images.githubusercontent.com/387658/102549720-e41bf980-40bc-11eb-8127-70889011e52f.mp4

рд╕рднреА 73 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдпрд╣ рдХрд╣рд╛рдБ рдЧрдпрд╛? рдХреНрдпрд╛ рдЗрд╕реЗ рдореБрдЦреНрдп рдкреИрдХреЗрдЬ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдПрдЧрд╛?

рдЗрд╕ рдкрд░ рдХрд╛рдо рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╣рдореЗрдВ рдЗрд╕реЗ GStreamer 1.0 рдореЗрдВ рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рдФрд░ рдЗрд╕рдХреЗ рд╕рд╛рде рдореЗрд░реЗ рд╕рднреА рдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рдЕрдм рддрдХ рдкрд╛рдЗрдерди рдореЗрдВ рдХрд╕реНрдЯрдо рддрддреНрд╡ рдХрд░рддреЗ рд╕рдордп рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рдЦреБрд▓рд╛рд╕рд╛ рд╣реБрдЖ рд╣реИред рд╢рд╛рдпрдж рдпрд╣ рд╕рдм рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рдЕрдиреНрдп рддрд░реАрдХреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдРрд╕рд╛ рдХреБрдЫ рдирд╣реАрдВ рд╣реИ рдЬрд┐рд╕ рдкрд░ рдореЗрд░реЗ рдкрд╛рд╕ рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рд╣реЛред

рдореИрдВ рдлреАрдлреЛ рд╕рдорд░реНрдерди рдЬреЛрдбрд╝рд╛ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдБ :)

рдореИрдВрдиреЗ рдЗрд╕реЗ рдЕрднреА-рдЕрднреА ncmpcpp рдХреЗ рдореНрдпреВрдЬрд╝рд┐рдХ рд╡рд┐рдЬрд╝реБрдЕрд▓рд╛рдЗрдЬрд╝рд░ рдХреЛ mopidy рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рдЦреЛрдЬрд╛ рд╣реИред рдореИрдВ рдкрдХреНрд╖ рдореЗрдВ рд╣реВрдВред

рд╣рд╛рдВ, рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдореБрдЭреЗ рдпрд╣ рдорд┐рд▓рд╛ред рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛
рд╕реНрдЯреНрд░реАрдо рдХрд┐рдП рдЧрдП рд╕рдВрдЧреАрдд рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛ,

2014-11-06 2:19 рдЬреАрдПрдордЯреА-05:00 рдмреНрд▓реЗрдХ рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @

рдореИрдВрдиреЗ рдЗрд╕реЗ рдПрдирд╕реАрдПрдордкреАрд╕реАрдкреАрдкреА рдХреЗ рд╕рдВрдЧреАрдд рд╡рд┐рдЬрд╝реБрдЕрд▓рд╛рдЗрдЬрд╝рд░ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рдЦреЛрдЬ рд▓рд┐рдпрд╛ рд╣реИ
рдореЛрдкрд┐рдбреА рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдВред рдореИрдВ рдкрдХреНрд╖ рдореЗрдВ рд╣реВрдВред

-
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ рдпрд╛ рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/mopidy/mopidy/issues/775#issuecomment -61936376ред

рдЬреАрд╕реНрдЯреНрд░реАрдорд░ рд╡рд┐рдЬрд╝реБрдЕрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдкреНрд▓рдЧрдЗрдиреНрд╕ рд╣реИрдВ, рдХреНрдпрд╛ рдЖрдк рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?
6 рдирд╡рдВрдмрд░ 2014 08:35 рдХреЛ, "рдбрд┐рдПрдЧреЛ рдмреЗрд░реЛрдХрд▓" рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com рдиреЗ рд▓рд┐рдЦрд╛:

рд╣рд╛рдВ, рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдореБрдЭреЗ рдпрд╣ рдорд┐рд▓рд╛ред рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛
рд╕реНрдЯреНрд░реАрдо рдХрд┐рдП рдЧрдП рд╕рдВрдЧреАрдд рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛ,

2014-11-06 2:19 рдЬреАрдПрдордЯреА-05:00 рдмреНрд▓реЗрдХ рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @

рдореИрдВрдиреЗ рдЕрднреА рдЗрд╕реЗ ncmpcpp рдХреЗ рд╕рдВрдЧреАрдд рд╡рд┐рдЬрд╝реБрдЕрд▓рд╛рдЗрдЬрд╝рд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рдЦреЛрдЬрд╛ рд╣реИ
рдкреНрд░рддрд┐
рдореЛрдкрд┐рдбреА рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдВред рдореИрдВ рдкрдХреНрд╖ рдореЗрдВ рд╣реВрдВред

-
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ рдпрд╛ рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/mopidy/mopidy/issues/775#issuecomment -61936376ред

-
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ рдпрд╛ рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/mopidy/mopidy/issues/775#issuecomment -62007426ред

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд╡реЗ рдЕрдЧрд▓реА рд░рд┐рд▓реАрдЬрд╝ рдореЗрдВ рдЕрдкрдиреЗ рд░рд╛рд╕реНрддреЗ рдкрд░ рд╣реИрдВред

рдХреНрдпрд╛ рдХреЛрдИ рдЗрд╕ рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ? mopidy рдХреЗ рд╕рд╛рде ncmpcpp рд╡рд┐рдЬрд╝реБрдЕрд▓рд╛рдЗрдЬрд╝рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред

рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдореБрдЭреЗ рдкрддрд╛ рд╣реИ, рдФрд░ рд╣рдо рдЗрд╕реЗ GStreamer рддрддреНрд╡ рдХреЗ рд░реВрдк рдореЗрдВ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╣рдорд╛рд░реЗ рдорд╛рдЗрдЧреНрд░реЗрд╢рди рдХреЛ GStreamer 1.x рдкрд░ рд░реЛрдХ рджреЗрдЧрд╛ред

рдЖрдЙрдЯрдкреБрдЯ рдХреЗ рд▓рд┐рдП рдЙрдЪрд┐рдд рд╕рдорд░реНрдерди рд╡рд╛рдкрд╕ рдЬреЛрдбрд╝рдиреЗ рдкрд░ рдпрд╣ рдЖрдИрдПрдордУ рднреА рдЕрд╡рд░реБрджреНрдз рд╣реИред

рдмрд╕ рдпрд╣ рдЬреЛрдбрд╝рддреЗ рд╣реБрдП рдХрд┐ Mopidy/ncmpcpp рдореЗрдВ рд╡рд┐рдЬрд╝реБрдЕрд▓рд╛рдЗрдЬрд╝рд░ рд╕рдорд░реНрдерди рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╕рдордп рдореИрдВ рднреА рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдЖрдпрд╛ рдерд╛ред рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЗрд╕реЗ рд░рдЦрдирд╛ рдЕрдЪреНрдЫрд╛ рд▓рдЧреЗрдЧрд╛, рднрд▓реЗ рд╣реА рдЗрд╕ рдкрд░ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдХрд╛рдо рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реЛред рдореИрдВ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рднреА рдЕрдкрдирд╛ рдЕрддреНрдпрдВрдд рд╕рдореНрдорд╛рди рджреЗрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдЬреЛ рдУрдкрди рд╕реЛрд░реНрд╕ рдкреНрд░реЛрдЬреЗрдХреНрдЯреНрд╕ рдореЗрдВ рдЕрдкрдирд╛ рд╕рдордп рджреЗрддреЗ рд╣реИрдВред :рдореБрд╕реНрдХреБрд░рд╛рдУ:

рдЖрджрд░реНрд╢ рд░реВрдк рд╕реЗ рдпрд╣ рджреВрд░ рд╕реЗ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред Mopidy рдХреА рд╢рдХреНрддрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рд╕рдорд╛рдзрд╛рди рд╣реЛрдиреЗ рдореЗрдВ рдирд┐рд╣рд┐рдд рд╣реИ рдЬреЛ рдЖрдкрдХреЗ рдирд┐рдЬреА рдХреНрд▓рд╛рдЙрдб рдореЗрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдлреАрдлреЛ рдЗрдВрдЯрд░рдкреНрд░реЛрд╕реЗрд╕ рд╕рдВрдЪрд╛рд░ рдХрд╛ рдПрдХ рдмрд╣реБрдд рдкреЛрд░реНрдЯреЗрдмрд▓ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ рдФрд░ рдЗрд╕реЗ рдЖрдИрдПрдордУ рд╕реЗ рдмрдЪрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЙрдирдХреЗ рдХреБрдЫ рдмреБрд░реЗ рджреБрд╖реНрдкреНрд░рднрд╛рд╡ рднреА рд╣реИрдВ, рдЬрд┐рдирдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдЗрд╕ рд╕реВрддреНрд░ рдореЗрдВ рдкрд╣рд▓реЗ рд╣реА рдХрд┐рдпрд╛ рдЬрд╛ рдЪреБрдХрд╛ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдпреВрдбреАрдкреА рд╕рд┐рдВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдкрдиреЗ рдкреИрдХреЗрдЯ рдХреЛ рдбрдВрдк рдХрд░рдиреЗ рд╕реЗ рдмреЗрд╣рддрд░ рд╣реИрдВ .... рдпреВрдбреАрдкреА рдкреЛрд░реНрдЯ рд╕реЗ рдбреЗрдЯрд╛ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд╢реЗрд▓ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреА рд▓рд╛рдЗрди (рдиреЗрдЯрдХреИрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ) рдФрд░ рдЗрд╕реЗ рдлреАрдлреЛ рдХреЛ рд▓рд┐рдЦреЗрдВред

рдпрд╣ рдЕрдЪреНрдЫрд╛ рд░рд╣реЗрдЧрд╛ред рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЧреНрд░рд╛рд╣рдХ рдЭреВрда рдмреЛрд▓реЗрдВ ncmpcpp рднреА рдЗрд╕реЗ рдЗрдирдкреБрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред

рдПрдХ рдЕрдиреНрдп рд╡рд┐рдЪрд╛рд░ рдкрд▓реНрд╕рдСрдбрд┐рдпреЛ рдХрд╛ рд╕реАрдзреЗ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдХреЗ рд▓рд┐рдП рдореЛрдкрд┐рдбреА рдХреА рдУрд░ рд╕реЗ рдХрд┐рд╕реА рдЕрддрд┐рд░рд┐рдХреНрдд рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрдЧреАред рдореИрдВрдиреЗ рдЬреЛ рдбреЙрдХрд░ рдХрдВрдЯреЗрдирд░ рдмрдирд╛рдпрд╛ рд╣реИ рд╡рд╣ рдиреЗрдЯрд╡рд░реНрдХ рдкрд░ рдкрд▓реНрд╕рдСрдбрд┐рдпреЛ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдЯреАрд╕реАрдкреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред ncmpcpp рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕рдХрд╛ рд╕реАрдзреЗ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рдореИрдВрдиреЗ рдЬреЛ рдкрдврд╝рд╛ рд╣реИ, рдЙрд╕рд╕реЗ рд╡рд┐рдЬрд╝реБрдЕрд▓рд╛рдЗрдЬрд╝рд░ рд╕рд┐рд░реНрдл рдирдореВрдиреЗ рдХреЗ рдмреНрд▓реЙрдХ рдкрд░ рдПрдХ рдПрдлрдПрдлрдЯреА рдЪрд▓рд╛ рд░рд╣рд╛ рд╣реИ рдЬрд┐рд╕реЗ рдлреАрдлреЛ рдлрд╝рд╛рдЗрд▓ рд╕реЗ рдкрдврд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред рдореИрдВ рдЬреЛ рдмрд┐рдВрджреБ рдмрдирд╛ рд░рд╣рд╛ рд╣реВрдВ рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐ рдЖрдк mkfifo рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдореЛрдкрд┐рдбреА рдХреЗ рдмрд╛рд╣рд░ рдПрдХ рдлреАрдлреЛ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдлрд┐рд░ netcat рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдореЛрдкрд┐рдбреА рд╕реЗ рдпреВрдбреАрдкреА рдбреЗрдЯрд╛ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЖрдЙрдЯрдкреБрдЯ рдХреЛ netcat рд╕реЗ рд░реАрдбрд╛рдпрд░реЗрдХреНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдлреАрдлреЛ рдлрд╝рд╛рдЗрд▓ред рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдЬрд╣рд╛рдВ рддрдХ ncmpcpp рдХрд╛ рд╕рдВрдмрдВрдз рд╣реИ, рдХреБрдЫ рднреА рдмрджрд▓рдиреЗ рдХреА рдЬрд░реВрд░рдд рдирд╣реАрдВ рд╣реИ, рдпрд╣ рд╕рд┐рд░реНрдл рдлреАрдлреЛ рдлрд╛рдЗрд▓ рдХреЛ рдкрдврд╝рддрд╛ рд╣реИред

Mopidy рдкрд░ рдЖрдк рдЬреЛ рд▓рдХреНрд╖реНрдп рдмрдирд╛ рд░рд╣реЗ рд╣реИрдВ рдЙрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкреНрд░рдпрд╛рд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЖрдк рдСрдбрд┐рдпреЛ рдЖрдЙрдЯрдкреБрдЯ рдкреНрд░реЙрдкрд░реНрдЯреА рдХреЛ udpsink GStreamer рддрддреНрд╡ рдореЗрдВ рдЖрдЙрдЯрдкреБрдЯ рдореЗрдВ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВред рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рдЖрдк рдЗрд╕реЗ "рдЯреА" рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗ рдЬреЛ рдЖрдкрдХреЗ рдПрдПрд▓рдПрд╕рдП/рдкрд▓реНрд╕ рд╕рд┐рдВрдХ рдФрд░ udpsink рджреЛрдиреЛрдВ рдХреЛ рдЖрдЙрдЯрдкреБрдЯ рдХрд░рддрд╛ рд╣реИред

рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП .... рдкрд░реАрдХреНрд╖рдг рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдЗрд╕рд▓рд┐рдП рдХреБрдЫ рдЯреНрд╡реАрдХрд┐рдВрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИред

Mopidy рдСрдбрд┐рдпреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ:

output = tee name=t ! queue ! autoaudiosink t. ! queue ! udpsink port=5555

рдЕрдкрдиреЗ рд▓рд┐рдирдХреНрд╕ рд╣реЛрд╕реНрдЯ рдкрд░, рдкреЛрд░реНрдЯ 5555 рдкрд░ рдпреВрдбреАрдкреА рдбреЗрдЯрд╛ рдХреЗ рд▓рд┐рдП рд▓реЛрдХрд▓рд╣реЛрд╕реНрдЯ рдкрд░ рд╕реБрдирдиреЗ рдХреЗ рд▓рд┐рдП рдиреЗрдЯрдХреИрдЯ рд▓реЙрдиреНрдЪ рдХрд░реЗрдВ рдФрд░ рдирдореВрдиреЗ рдХреЛ рдлреАрдлреЛ рдореЗрдВ рдЖрдЙрдЯрдкреБрдЯ рдХрд░реЗрдВ:

mkfifo /tmp/mopidy.fifo
nc -u -l 127.0.0.1 5555 > /tmp/mopidy.fifo &

рдЖрдкрдХреЗ mpd.conf рдореЗрдВ:

audio_output {
    type                    "fifo"
    name                    "my_fifo"
    path                    "/tmp/mopidy.fifo"
    format                  "44100:16:2"
}

рдиреЛрдЯ: рдпрджрд┐ рдЖрдк рдкрд▓реНрд╕рдСрдбрд┐рдпреЛ рдЖрдЙрдЯрдкреБрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдЗрд╕рдХреЗ рдЯреАрд╕реАрдкреА рджрд┐рд╢рд╛ рдХрдиреЗрдХреНрд╢рди рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╕рд╛рде рдХреБрдЫ рдРрд╕рд╛ рд╣реА рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЖрдкрдХреЛ рдЯреАрд╕реАрдкреА рдХрдиреЗрдХреНрд╢рди рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рдЪрд▓рдиреЗ рд╡рд╛рд▓реЗ рдХрд┐рд╕реА рднреА рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЛ рдЗрдВрдЬреАрдирд┐рдпрд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрд╕реЗ рдХрдЪреНрдЪреЗ рд╕рд┐рдВрдХ рдХреЗ рд░реВрдк рдореЗрдВ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдзрдиреНрдпрд╡рд╛рдж @ liamw9534 рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рд╕рдордЭрдиреЗ рдореЗрдВ рдореБрдЭреЗ рдХреБрдЫ рд╕рдордп рд▓рдЧреЗрдЧрд╛ рдпрд╛ рдпрд╣ рднреА рдкрддрд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдореИрдВ рдХрд░ рд╕рдХрддрд╛ рдерд╛ред рдореИрдВ рдЗрд╕реЗ рдбреЙрдХрд░ рдХрдВрдЯреЗрдирд░ рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдлреАрдлреЛ рдХреЛ рдЦрд╛рд▓реА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдирд╣реАрдВ рд╣реИ рддреЛ рдпрд╣ рдореБрджреНрджреЛрдВ рдореЗрдВ рдЪрд▓ рд╕рдХрддрд╛ рд╣реИред рдЪреВрдВрдХрд┐ рдиреЗрдЯрдХреИрдЯ рдХрд░реНрдиреЗрд▓ рдмрдлрд░ рднрд░ рджреЗрдЧрд╛ рдФрд░ рдлрд┐рд░ рдЕрд╕рдлрд▓ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред рдФрд░ рдЗрд╕ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреЗ рд╣реБрдП рдХрд┐ FIFO рдХреИрд╕реЗ рдЦреЛрд▓рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЖрдк рднреА рдореБрджреНрджреЛрдВ рдореЗрдВ рднрд╛рдЧ рд╕рдХрддреЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ FIFO рдХреЛ рдПрдХ рдкрд╛рдардХ рдХреЛ рд▓рд┐рдЦрдиреЗ рдпреЛрдЧреНрдп рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрд╕реНрдерд┐рдд рд╣реЛрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ: /

рд▓реЗрдХрд┐рди рдЖрдк рдпреВрдбреАрдкреА рдбреЗрдЯрд╛ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореЗрд░реЗ рдлреАрдлреЛрд╕реНрдЯреНрд░реАрдорд░ рдХреЛрдб рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдЖрдкрдХреЗ рд▓рд┐рдП рд╕рдВрднрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЕрдзрд┐рдХрд╛рдВрд╢ рддреНрд░реБрдЯрд┐ рдорд╛рдорд▓реЛрдВ рдХреЛ рдЖрдк рд╡рд╣рд╛рдВ рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВред

@adamcik рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рдХрд╛рдордХрд╛рдЬреА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╣реИ рддреЛ рдореБрдЭреЗ рд▓реЛрдЧреЛрдВ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ docker-ncmpcpp рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдореЗрдВ рдЦреБрд╢реА рд╣реЛрдЧреАред рдореИрдВ рдЙрдкрд░реЛрдХреНрдд рдЖрдЙрдЯрдкреБрдЯ рдЯреНрд░рд┐рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ UDP рдкрд░ рдкреНрд░рд╕рд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП docker-mopidy рдХреЛ рднреА

рдореИрдВрдиреЗ рдХрдорд╛рдВрдб-рд▓рд╛рдЗрди рдкрд░ рдХреБрдЫ рдмреБрдирд┐рдпрд╛рджреА рдкреНрд░рдпреЛрдЧ рдХрд┐рдП рдФрд░ рдпрд╣ рд╕рдм рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдмрд╢рд░реНрддреЗ рдЖрдк рдХрдиреЗрдХреНрд╢рди рдЯрд╛рдЗрдордЖрдЙрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, рдЬреИрд╕реЗ nc -kluw 1 127.0.0.1 5555 > /tmp/mopidy.fifo ред рдпрд╣ рдиреЗрдЯрдХреИрдЯ рдХреЛ рдЕрдВрддрд┐рдо рдХрдиреЗрдХреНрд╢рди рдбреНрд░реЙрдк (1s рдЯрд╛рдЗрдордЖрдЙрдЯ) рдХреЗ рдмрд╛рдж рд╣рдореЗрд╢рд╛ рдПрдХ рдирдпрд╛ рд╕реНрд░реЛрдд рдкреЛрд░реНрдЯ рдХрдиреЗрдХреНрд╢рди рд╕реБрдирдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░рддрд╛ рд╣реИред

рдЙрдкрд░реЛрдХреНрдд рдХрдорд╛рдВрдб рдлреАрдлреЛ рдлрд╛рдЗрд▓ рд╕реЗ рдХреБрдЫ рднреА рдкрдврд╝ рд░рд╣рд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВ, рдЗрд╕ рдкрд░ рдзреНрдпрд╛рди рджрд┐рдП рдмрд┐рдирд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдФрд░ рдпрд╣ рднреА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЕрдЧрд░ рдлреАрдлреЛ рдлрд╛рдЗрд▓ рд╕реЗ рдкрдврд╝рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд░реБрдХ рдЬрд╛рддреА рд╣реИ рдФрд░ рдлрд╛рдЗрд▓ рдХреЛ рдмрдВрдж рдХрд░ рджреЗрддреА рд╣реИред

@wernight рдЗрд╕ рдмрдЧ рдХрд╛ рд╡рд┐рд╡рд░рдг рджреЗрдЦреЗрдВ, рдореЗрд░реЗ рдкрд╛рд╕ рдмрд╕ рдЗрддрдирд╛ рд╣реА рдХреЛрдб рд╣реИред

рдФрд░ рд╕рд┐рд░реНрдл рдмреЗрд▓реНрдЯ рдФрд░ рдмреНрд░реЗрд╕рд┐рдЬрд╝ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдереЛрдбрд╝реА рджреЗрд░ рдХреЗ рд▓реВрдк рдореЗрдВ рдХрдорд╛рдВрдб рдЪрд┐рдкрдХрд╛ рджреВрдВрдЧрд╛, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, while :; do nc -kluw 1 127.0.0.1 5555> /tmp/mopidy.fifo; sleep 1; done - рдЕрдЧрд░ рдпрд╣ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рддрд╛ рд╣реИ, рддреЛ рдпрд╣ 1 рд╕реЗрдХрдВрдб рдХреА рджреЗрд░реА рдХреЗ рдмрд╛рдж рдлрд┐рд░ рд╕реЗ рд▓реЙрдиреНрдЪ рд╣реЛрдЧрд╛ред

@ liamw9534 рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ mpd.conf рд╣реИред рдореИрдВ рдЗрд╕рд╕реЗ рднреНрд░рдорд┐рдд рд╣реВрдВред рдЖрдк mopidy-mpd рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдПрдХ рд╕реНрдЯреИрдВрдбрдЕрд▓реЛрди MPD рд╕рд░реНрд╡рд░ рдЪрд▓рд╛ рд░рд╣реЗ рд╣реИрдВ?

@lrvick рд╣рд╛рдБ рдореЗрд░реА рдЧрд▓рддреА, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЙрд╕ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪ рд░рд╣реА рдереА рдЬрд┐рд╕реЗ ~/.ncmpcpp/config рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ

.config/mopidy/mopidy.conf

...

[audio]
output = tee name=t ! queue ! autoaudiosink t. ! queue ! udpsink port=5555
$ mkfifo /tmp/mopidy.fifo
$ while :; do nc -kluw 1 127.0.0.1 -p 5555> /tmp/mopidy.fifo; sleep 1; done

(рдпрд╣рд╛рдВ -p рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛)ред

~/.ncmpcpp/config

audio_output {
    type                    "fifo"
    name                    "my_fifo"
    path                    "/tmp/mopidy.fifo"
    format                  "44100:16:2"
}

( wernight/docker-mopidy рдФрд░ wernight/docker-ncmpcpp рдореЗрдВ рднреА рдХрд┐рдпрд╛ рдЧрдпрд╛ )

рд╣рд╛рд▓рд╛рдБрдХрд┐ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ 5555 рд╕реЗ рдХрдиреЗрдХреНрдЯ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рднрд▓реЗ рд╣реА Mopidy рдХрд╛ рд▓реЙрдЧ рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ output рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рдХреЛ рд╕рдордЭрддрд╛ рд╣реИред netstat 5555 рдкрд░ рдХреЛрдИ рдЦреБрд▓рд╛ рдпреВрдбреАрдкреА рднреА рдирд╣реАрдВ рджрд┐рдЦрд╛рддрд╛ рд╣реИред рдореИрдВ output рд▓рд╛рдЗрди рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдирд╣реАрдВ рд╕рдордЭрддрд╛: tee рдПрдХ рдмреИрд╢ рдХрдорд╛рдВрдб рд╣реИ, рдмрд╛рдХреА рдореЛрдкрд┐рдбреА рд╕рд╛рдорд╛рди рдХреА рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИред

рд╣рд╛рд▓рд╛рдБрдХрд┐ рдореБрдЭреЗ рд╕рдВрдЧреАрдд рдмрдЬрд╛рддреЗ рд╕рдордп udp6 [::]:51307 ред

output рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ GstBin рддрддреНрд╡ рдХреЗ рд░реВрдк рдореЗрдВ рдХреА рдЬрд╛рддреА рд╣реИ рдЬреЛ Mopidy рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВ playbin2 рддрдХ рдкрд╣реБрдВрдЪ рдЬрд╛рддрд╛ рд╣реИ - рд╣реБрдб рдХреЗ рддрд╣рдд рдпрд╣ рд╕рд┐рд░реНрдл рдПрдХ Gstreamer рдкрд╛рдЗрдкрд▓рд╛рдЗрди рд╣реИ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреБрдЫ рдЦрд╛рд╕ рдирд╣реАрдВ рд╣реИред tee рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ Gstreamer рддрддреНрд╡ рд╣реИред рдЗрд╕рдХрд╛ рд╢реЗрд▓ рдХрдорд╛рдВрдб tee ред

рддреЛ рдЖрдк рдЕрдиреБрдорд╛рди рд▓рдЧрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХрдорд╛рдВрдб-рд▓рд╛рдЗрди рдкрд░ Mopidy рдХреЗ рдЕрдВрджрд░ рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИ, рдХреБрдЫ рдРрд╕рд╛ рдХрд░ рд░рд╣рд╛ рд╣реИ:

gst-launch audiotestsrc ! tee name=t ! queue ! autoaudiosink t. ! queue ! udpsink port=5555 &

рдпрд╣ рдПрдХ рд╕рд╛рдЗрдирд╕реЙрдЗрдбрд▓ рдЯреЛрди рдмрдЬрд╛рдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрдЧрд╛ред рдлрд┐рд░ рдирд┐рдореНрди рдЖрджреЗрд╢ рдЪрд▓рд╛рдПрдБ:

nc -kluw 1 127.0.0.1 5555

рдлрд┐рд░ рдореИрдВ рдЕрдкрдиреЗ рдбрд┐рд╕реНрдкреНрд▓реЗ рдкрд░ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдЕрдЬреАрдм рдЕрдХреНрд╖рд░ рджреЗрдЦрдирд╛ рд╢реБрд░реВ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ .... рдпрд╣ рдкрд░реАрдХреНрд╖рдг рдСрдбрд┐рдпреЛ рд╕реНрдЯреНрд░реАрдо рд╣реИ рдЬреЛ nc рд╕реЗ stdout рдЖрдЙрдЯрдкреБрдЯ рдХрд░ рд░рд╣рд╛ рд╣реИред рдпрд╣ рдкреНрд░рднрд╛рд╡реА рдврдВрдЧ рд╕реЗ рд╕рд╛рдмрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдХреНрдпрд╛ рдЖрдк рдкреБрд╖реНрдЯрд┐ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЖрдк рдЙрд╕реА рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рджреЛрд╣рд░рд╛ рд╕рдХрддреЗ рд╣реИрдВ?

рдлрд┐рд░ рдЖрдк рджреВрд╕рд░реЗ рдЪрд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдлреАрдлреЛ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдкреБрд╖реНрдЯрд┐ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЖрдк cat рдлреАрдлреЛ рдХреЛ рд╕реНрдЯрдбрдЖрдЙрдЯ рдХрд░рдиреЗ рдФрд░ рдЙрдиреНрд╣реАрдВ рдЕрдЬреАрдм рдкрд╛рддреНрд░реЛрдВ рдХреЛ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдореИрдВ ncmpcpp рджреНрд╡рд╛рд░рд╛ рдЖрд╡рд╢реНрдпрдХ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдкреНрд░рд╛рд░реВрдк рдХреЛ рднреА рджреЛрдмрд╛рд░рд╛ рдЬрд╛рдВрдЪреВрдВрдЧрд╛ред рдореИрдВрдиреЗ https://wiki.archlinux.org/index.php/Ncmpcpp#Enabling_visualization рдкрд░ рдПрдХ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдирдЬрд╝рд░

visualizer_fifo_path = "/tmp/mpd.fifo"
visualizer_output_name = "my_fifo"
visualizer_sync_interval = "30" 
visualizer_in_stereo = "yes"
visualizer_type = "spectrum" (spectrum/wave)

рдореИрдВ ncmpcpp рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛, рдЗрд╕рд▓рд┐рдП рд╕рдорд╕реНрдпрд╛ рдпрд╣рд╛рдВ рднреА рд╣реЛ рд╕рдХрддреА рд╣реИ...

$ apt-get install gstreamer-tools
$ gst-launch audiotestsrc ! tee name=t ! queue ! autoaudiosink t. ! queue ! udpsink port=5555 &
Setting pipeline to PAUSED ...
Pipeline is PREROLLING ...
Pipeline is PREROLLED ...
Setting pipeline to PLAYING ...
New clock: GstPulseSinkClock
$ nc -kluw 1 127.0.0.1 -p 5555
no connection : Connection timed out

( nc ... -p рдореБрдЭреЗ рдПрдХ рддреНрд░реБрдЯрд┐ рдорд┐рд▓рддреА рд╣реИ)

рдореИрдВ рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╕реНрд╡рд░ рдмрдЬрд╛рддрд╛ рд╕реБрдирддрд╛ рд╣реВрдБред

рдЖрдк рдХрд┐рд╕ рдбрд┐рд╕реНрдЯреНрд░реЛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ? рд╕рд╛рде рд╣реА рдЬрдм рдЖрдк nc -h рдЯрд╛рдЗрдк рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдЖрдЙрдЯрдкреБрдЯ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ?

$ nc -h
OpenBSD netcat (Debian patchlevel 1.89-4ubuntu1)
This is nc from the netcat-openbsd package. An alternative nc is available
in the netcat-traditional package.
usage: nc [-46DdhklnrStUuvzC] [-i interval] [-P proxy_username] [-p source_port]
      [-s source_ip_address] [-T ToS] [-w timeout] [-X proxy_protocol]
      [-x proxy_address[:port]] [hostname] [port[s]]
    Command Summary:
        -4      Use IPv4
        -6      Use IPv6
        -D      Enable the debug socket option
        -d      Detach from stdin
        -h      This help text
        -i secs     Delay interval for lines sent, ports scanned
        -k      Keep inbound sockets open for multiple connects
        -l      Listen mode, for inbound connects
        -n      Suppress name/port resolutions
        -P proxyuser    Username for proxy authentication
        -p port     Specify local port for remote connects
        -q secs     quit after EOF on stdin and delay of secs
        -r      Randomize remote ports
        -S      Enable the TCP MD5 signature option
        -s addr     Local source address
        -T ToS      Set IP Type of Service
        -C      Send CRLF as line-ending
        -t      Answer TELNET negotiation
        -U      Use UNIX domain socket
        -u      UDP mode
        -Z      DCCP mode
        -v      Verbose
        -w secs     Timeout for connects and final net reads
        -X proto    Proxy protocol: "4", "5" (SOCKS) or "connect"
        -x addr[:port]  Specify proxy address and port
        -z      Zero-I/O mode [used for scanning]
    Port numbers can be individual or ranges: lo-hi [inclusive]

-p рд╡рд┐рдХрд▓реНрдк рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ nc рдореИрдВ рдЙрдмрдВрдЯреВ рдкрд░ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдореИрди рдкреЗрдЬ рдХрд╛ рддрд╛рддреНрдкрд░реНрдп рдпрд╣ рднреА рд╣реИ рдХрд┐ -p рдХреЗ рд╕рд╛рде рд╕рдВрдпреЛрдЬрди рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдореЗрдВ рддреНрд░реБрдЯрд┐ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП -l :

     -l      Used to specify that nc should listen for an incoming connection
             rather than initiate a connection to a remote host.  It is an error
             to use this option in conjunction with the -p, -s, or -z options.
             Additionally, any timeouts specified with the -w option are ignored.

рдбреЗрдмрд┐рдпрди рд╡реНрд╣реАрдЬреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ред

рдбреЙрдХрд░ рдХреЛ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдЙрдмрдВрдЯреВ рдХреЗ рд▓рд┐рдП рдкреВрд░реНрдг рдЪрд░рдг рдпрд╣рд╛рдВ рджрд┐рдП рдЧрдП рд╣реИрдВ:

  1. рдбреЙрдХрд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ :

$ wget -qO- https://get.docker.com/ | sh $ sudo gpasswd -a ${USER} docker

  1. рд░рд┐рдореЛрдЯ рдкрд▓реНрд╕рдСрдбрд┐рдпреЛ рд╕рдХреНрд╖рдо рдХрд░реЗрдВ
  2. рдбреЗрдмрд┐рдпрди рдкрд░ рдЪрд▓рд╛рдПрдБ:

$ docker run --rm -it \ -e PULSE_SERVER=tcp:$(hostname -i):4713 \ -e PULSE_COOKIE_DATA=$(pax11publish -d | grep --color=never -Po '(?<=^Cookie: ).*') \ debian:wheezy $ apt-get update && apt-get install -y netcat $ nc -h [v1.10-40] connect to somewhere: nc [-options] hostname port[s] [ports] ... listen for inbound: nc -l -p port [-options] [hostname] [port] options: -c shell commands as `-e'; use /bin/sh to exec [dangerous!!] -e filename program to exec after connect [dangerous!!] -b allow broadcasts -g gateway source-routing hop point[s], up to 8 -G num source-routing pointer: 4, 8, 12, ... -h this cruft -i secs delay interval for lines sent, ports scanned -k set keepalive option on socket -l listen mode, for inbound connects -n numeric-only IP addresses, no DNS -o file hex dump of traffic -p port local port number -r randomize local and remote ports -q secs quit after EOF on stdin and delay of secs -s addr local source address -T tos set Type Of Service -t answer TELNET negotiation -u UDP mode -v verbose [use twice to be more verbose] -w secs timeout for connects and final net reads -z zero-I/O mode [used for scanning] port numbers can be individual or ranges: lo-hi [inclusive]; hyphens in port names must be backslash escaped (e.g. 'ftp\-data'). $ nc -kluw 1 127.0.0.1 5555 UDP listen needs -p arg $ apt-get install -y net-tools gstreamer-tools gstreamer0.10-plugins-good $ echo -ne $(echo $PULSE_COOKIE_DATA | sed -e 's/../\\x&/g') >$HOME/pulse.cookie $ export PULSE_COOKIE=$HOME/pulse.cookie $ gst-launch audiotestsrc ! tee name=t ! queue ! autoaudiosink t. ! queue ! udpsink port=5555 & $ nc -kluw 1 127.0.0.1 -p 5555 no connection : Connection timed out

netcat-openbsd рдкреИрдХреЗрдЬ рдХреЗ рд╕рд╛рде рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ рдЬреЛ рджреЗрддрд╛ рд╣реИ:

$ nc -h
OpenBSD netcat (Debian patchlevel 1.105-7)
...

рдЕрдм nc рд╕реНрд╡рд░ рдмрдЬрдиреЗ рдХреЗ рджреМрд░рд╛рди рдХреБрдЫ рднреА рдирд╣реАрдВ рджрд┐рдЦрд╛рддрд╛ рд╣реИ (рдЬреЛ рдХреБрдЫ рд╣рдж рддрдХ рдмреЗрд╣рддрд░ рд▓рдЧрддрд╛ рд╣реИ):

$ nc -kluw 1 127.0.0.1 5555
(nothing here)

рдареАрдХ рд╣реИ, рджреЛ рдЯрд░реНрдорд┐рдирд▓ рдЦреЛрд▓реЗрдВ рдФрд░ рдкрд╣рд▓реЗ рдЯрд░реНрдорд┐рдирд▓ рд░рди рдореЗрдВ:

nc -kluw 1 127.0.0.1 5555

рдлрд┐рд░ рджреВрд╕рд░реЗ рдЯрд░реНрдорд┐рдирд▓ рд░рди рдореЗрдВ:

nc -u 127.0.0.1 5555

рджреВрд╕рд░реЗ рдЯрд░реНрдорд┐рдирд▓ рдореЗрдВ рд╕реНрдЯрдб рдкрд░ рдХреБрдЫ рдЕрдХреНрд╖рд░ рджрд░реНрдЬ рдХрд░реЗрдВ рдФрд░ ENTER рджрдмрд╛рдПрдБред рдХреНрдпрд╛ рдЖрдк рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рд╡рд╣реА рдЕрдХреНрд╖рд░ stdout рдкрд░ рдкрд╣рд▓реЗ рдЯрд░реНрдорд┐рдирд▓ рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрддреЗ рд╣реИрдВ?

рд╣рд╛рдБ рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдпрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдХрд┐ рдЗрд╕реЗ рдХреНрд░реЙрд╕ рдбреЙрдХрд░реНрд╕ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ:

$ docker run --rm --name nc1 -it my-debian-with-nc nc -kluw 1 0.0.0.0 5555
Hello

$ docker run --rm --link nc1:nc1 -it my-debian-with-nc nc -u nc1 5555
Hello

рддреЛ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХреНрдпреЛрдВ nc рдиреЗ gst-launch рд╕рд╛рде рдХреБрдЫ рднреА рдирд╣реАрдВ рджрд┐рдЦрд╛рдпрд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореБрдЭреЗ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдХрдВрдЯреЗрдирд░реЛрдВ рдореЗрдВ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореБрдЭреЗ host=SOMETHING рд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рдпрд╣ рд╕рдорд╕реНрдпрд╛рдЧреНрд░рд╕реНрдд рд╣реЛрдЧрд╛ред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдкреНрд░рд╕рд╛рд░рд┐рдд рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ред рд▓реЗрдХрд┐рди рдХрдо рд╕реЗ рдХрдо рдПрдХ рдХрдВрдЯреЗрдирд░ рдкрд░ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдореИрдВ рдЗрд╕реЗ рд╣рд▓ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред

рдЖрд╣! рдЕрдЧрд░ рдореИрдВ host=0.0.0.0 рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реВрдВ рддреЛ рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ!

рдХреНрдпрд╛ рдЖрдкрдХреЛ рдиреЗрдЯрд╡рд░реНрдХ рдкрд░ рдбреЗрдЯрд╛ рднреЗрдЬрдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИ? рдореИрдВрдиреЗ рдорд╛рди рд▓рд┐рдпрд╛ рдерд╛ рдХрд┐ рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рд╕реНрдерд╛рдиреАрдп рдорд╢реАрди рдкрд░ рдкреИрдХреЗрдЯ рдХреА рдЬрд░реВрд░рдд рд╣реИред udpsink host=0.0.0.0 port=5555 рд╕реЗ рдкреИрдХреЗрдЯ рдЖрдкрдХреЗ рдиреЗрдЯрд╡рд░реНрдХ рдкрд░ рд╣рд░ рдЬрдЧрд╣ рдкреНрд░рд╕рд╛рд░рд┐рдд рд╣реЛрдВрдЧреЗред рд╢рд╛рдпрдж рд╡реЛ рдирд╣реАрдВ рдЬреЛ рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВ...

рдкреИрдХреЗрдЯ рдХреЛ рд╕реНрдерд╛рдиреАрдп рд▓реВрдкрдмреИрдХ рдореЗрдВ рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдЖрдкрдХреЛ host=127.0.0.1 рдХрд╣рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдореБрдЭреЗ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдореБрджреНрджрд╛ рдЗрд╕рд▓рд┐рдП рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдЯрд┐рдВрдЧ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рд▓рд┐рдП рдиреАрдЪреЗ рд╣реИред рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдЖрдкрдХреЗ рд╕рд┐рд╕реНрдЯрдо рдкрд░, рдЖрдЙрдЯрдЧреЛрдЗрдВрдЧ рдкреИрдХреЗрдЯреНрд╕ рдХреЛ рдПрдХ рдЕрд▓рдЧ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкрд░ рдкреНрд░рд╕рд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╕рдВрднрд╡рддрдГ gstreamer рддрддреНрд╡ рдХреЗ рднрд┐рдиреНрди рд╕рдВрд╕реНрдХрд░рдг рдпрд╛ ip рд░реВрдЯрд┐рдВрдЧ рд╕реЗрдЯрдЕрдк рдореЗрдВ рдЕрдВрддрд░ред

рдХрдВрдЯреЗрдирд░ рд╕реЗ рдореБрдЭреЗ рдорд╢реАрди рдХреЗ 0.0.0.0 рдпрд╛ рд╕рдВрднрд╡ рдЖрдИрдкреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдерд╛ред рдПрдХ рдорд╢реАрди/рдХрдВрдЯреЗрдирд░ рдкрд░ рднреА рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╕реЗрдЯрд┐рдВрдЧ рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣реА рдереАред

рд▓реЗрдХрд┐рди рд╣рд╛рдБ рдореБрдЭреЗ рдЕрдм рдиреЗрдЯрд╡рд░реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ ncmpcpp рдФрд░ mopidy рдХреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдбреЙрдХрд░ рдХрдВрдЯреЗрдирд░реЛрдВ рдореЗрдВ рд░рдЦрдирд╛ рдЕрдЪреНрдЫрд╛ рдЕрднреНрдпрд╛рд╕ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рд╡реЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдиреЗрдЯрд╡рд░реНрдХ рдкрд░ рд╣реИрдВред рдпрд╣ рд╕реБрд░рдХреНрд╖рд╛ рдФрд░ рдЕрд▓рдЧрд╛рд╡ рдХреЗ рд▓рд┐рдП рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдЪреНрдЫрд╛ рд╣реИ рдФрд░ рдЗрд╕ рддрд░рд╣, рд▓реЗрдХрд┐рди рдпрд╣ рдереЛрдбрд╝реА рдкрд░реЗрд╢рд╛рдиреА рдкреИрджрд╛ рдХрд░рддрд╛ рд╣реИ:

ncmpcpp рдХреНрд▓рд╛рдЗрдВрдЯ рд╕рдВрдЧреАрдд рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдкреВрдЫрдиреЗ рдХреЗ рд▓рд┐рдП MPD рд╕рд░реНрд╡рд░ рд╕реЗ рдЬреБрдбрд╝рддрд╛ рд╣реИ, рдФрд░ рдЙрд╕рдХреЗ рдмрд╛рдж рд╣реА ncmpcpp рдХрд╛ IP рдЬреНрдЮрд╛рдд рд╣реЛрддрд╛ рд╣реИ рдФрд░ UDP рдкреИрдХреЗрдЯ рдХреЛ рдЙрд╕рдХреЗ IP рдкрд░ рдкреНрд░рд╕рд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП; рд▓реЗрдХрд┐рди рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЖрдИрдкреА рдХреЛ Mopidy рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рд╣рд╛рд░реНрдбрдХреЛрдб рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдореЗрд░реЗ рдкрд╛рд╕ рдЕрднреА рдХреЛрдИ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рд╣реИред рдореИрдВ рд╕рдорд╛рдзрд╛рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪ рд░рд╣рд╛ рд╣реВрдБ:

  • Mopidy рдореЗрдВ FIFO рдмрдирд╛рдирд╛ рдФрд░ ncmpcpp рдХреЗ рд╕рд╛рде рд╕рд╛рдЭрд╛ рдХрд░рдирд╛, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдбрд░ рд╣реИ рдХрд┐ рдХреБрдЫ рднреА FIFO рдХреЛ рд╕рд╛рдлрд╝ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ рдФрд░ рдпрд╣ рдмрдбрд╝реА рдкрд░реЗрд╢рд╛рдиреА рд╣реИред рд╕рд╛рде рд╣реА рдлрд╛рдЗрд▓ рд╢реЗрдпрд░ рдХрд░рдирд╛ рдиреЗрдЯрд╡рд░реНрдХ рд╕реЙрдХреЗрдЯ рдХреА рддрд░рд╣ рд╕рд╛рдл рдирд╣реАрдВ рд╣реИред
  • рд╕реНрдерд╛рдиреАрдп рдбреЗрдореЙрди рдореЙрдирд┐рдЯрд░рд┐рдВрдЧ рдХрдиреЗрдХреНрд╢рди рдФрд░ рдпреВрдбреАрдкреА рдЯреНрд░реИрдлрд┐рдХ рдХреЛ рдХреНрд▓рд╛рдЗрдВрдЯ рдЖрдИрдкреА рдХреЛ рдЕрдЧреНрд░реЗрд╖рд┐рдд рдХрд░рдирд╛; рд╣реИрдХред
  • рдпреВрдбреАрдкреА рдПрд╕рдПрд╕рдПрдЪ рд╕реБрд░рдВрдЧ , рд▓реЗрдХрд┐рди рдпрд╣ рдЬрдЯрд┐рд▓ рд╣реИ, рдмреЗрдХрд╛рд░ рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдЬреЛрдбрд╝рддрд╛ рд╣реИ, рдПрдХ рдФрд░ рдбреЗрдореЙрди рдЬреЛрдбрд╝рддрд╛ рд╣реИ ... рдЦрд░рд╛рдм!
  • рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рдХреНрдпрд╛ udpsink рд╣реЛрд╕реНрдЯ рдХреЛ рдкрд╣рд▓реЗ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ IP рдореЗрдВ рдбрд┐рдлреЙрд▓реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдпрд╛ рд╕рднреА рдХрдиреЗрдХреНрдЯреЗрдб рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ IP рд╕реЗ рднреА рдмреЗрд╣рддрд░
  • рдбреЙрдХрд░ рдХреЛ --net=container:NAME_or_ID рдорд╛рдзреНрдпрдо рд╕реЗ рд╣реЛрд╕реНрдЯ рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣реЗрдВ рдЬреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЯрд╛рдЗрдк рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдФрд░ рдкреИрд░рд╛рдореАрдЯрд░ рдЬреЛрдбрд╝рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдмрд╣реБрдд рд╕рд░рд▓ рдХрд░реЗрдЧрд╛!

рдЗрд╕ рдкрд░рд┐рдкрддреНрд░ рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рд╕рдорд╛рдзрд╛рди рд╣реИрдВред рдЕрднреА рднреА рдПрдХ рднрдпрд╛рдирдХ рд╣реИрдХ рдХреА рддрд░рд╣ рд▓рдЧ рд░рд╣рд╛ рд╣реИ рд▓реЗрдХрд┐рди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЕрдВрдд рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдХрд╛рдлреА рдЖрд╕рд╛рди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ nc рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде рдорджрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж liamw9534, рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рдореИрдВ рд╡рд┐рджреЗрд╢реА рдерд╛ред

FIFO рдЙрд╕ There is no output named "my_fifo"! рдХреЛ рдЫреЛрдбрд╝рдХрд░ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдирд╛рдо рдХреЛ mdp.conf рдореЗрдВ рд╕реЗ рдПрдХ рд╕реЗ рдореЗрд▓ рдЦрд╛рдирд╛ рд╣реИ:

 audio_output {
        type            "fifo"
        name            "my_fifo"
        path            "/tmp/mpd.fifo"
        format           "44100:16:2"
}

рдореИрдВ рдлреАрдлреЛ рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдпрджрд┐ рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдСрдбрд┐рдпреЛ рдЖрдЙрдЯрдкреБрдЯ рдХреЛ Mopidy рдореЗрдВ рдХреИрд╕реЗ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдПред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдорддрд▓реА (рдПрдХ рд╕рд╛рдзрд╛рд░рдг рд╡рд┐рдЬрд╝реБрдЕрд▓рд╛рдЗрдЬрд╝рд░-рдУрдиреА) рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛рдПрдВ рд╕рдорд╛рди рд╣реИрдВред

рдореБрдЭреЗ visualizer_output_name рдХрд╛ рдпрд╣

  • рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдХреМрди рд╕рд╛ рдЖрдЙрдЯрдкреБрдЯ рд╡рд┐рдЬрд╝реБрдЕрд▓рд╛рдЗрдЬрд╝рд░ рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╡рд┐рдЬрд╝реБрдЕрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдФрд░ рдзреНрд╡рдирд┐ рдХреЗ рдмреАрдЪ рд╕рдордиреНрд╡рдпрди рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП ncmpcpp рдХреЗ рд▓рд┐рдП рдиреАрдЪреЗ рдкреИрд░рд╛рдореАрдЯрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЗрд╕рдХреЗ рд╕рд╛рде рдХреБрдЫ рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реИрдВред
  • рдлреАрдлреЛ рдЖрдЙрдЯрдкреБрдЯ, рдЬрд┐рд╕рдХрд╛ рдкреНрд░рд╛рд░реВрдк рдкреИрд░рд╛рдореАрдЯрд░ рдореЛрдиреЛ рд╡рд┐рдЬрд╝реБрдЕрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдХреЗ рд▓рд┐рдП 44100:16:1 рдпрд╛ рд╕реНрдЯреАрд░рд┐рдпреЛ рд╡рд┐рдЬрд╝реБрдЕрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдХреЗ рд▓рд┐рдП 44100:16:2 рдкрд░ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рд╣реИ

рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ "рд╡рд┐рднрд┐рдиреНрди рдиреЗрдЯрд╡рд░реНрдХ рдкрд░" рдХрд╣рдХрд░ рдЖрдкрдХрд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИред рдпрджрд┐ рдЖрдк рдСрдбрд┐рдпреЛ рдЯреНрд░реИрдлрд╝рд┐рдХ рдХреЛ рд╕реНрдерд╛рдиреАрдп рдорд╢реАрди рд╕реЗ рдЕрд▓рдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддреЛ рдЖрдкрдХреЛ 127.0.0.1 рд▓рд┐рдП udpsink рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрджрд┐ рдЖрдк 0.0.0.0 рдЪреБрдирддреЗ рд╣реИрдВ рддреЛ рдпрд╣ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рд░реНрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреИрдХреЗрдЯ рдХреЛ рдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд░реЗрдЧрд╛ рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдиреЗрдЯрд╡рд░реНрдХ рдкрд░ рдпреВрдбреАрдкреА рдкреИрдХреЗрдЯ рднреЗрдЬрдирд╛ .... рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдореИрдВ рдХрд╣реВрдВрдЧрд╛ рдХрд┐ рдпрд╣ рдПрдХ рдмреБрд░рд╛ рд╡рд┐рдЪрд╛рд░ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдиреЗрдЯрд╡рд░реНрдХ рдпрд╛рддрд╛рдпрд╛рдд рдПрдХ рдХрд╛ рдЙрдкрднреЛрдЧ рдХрд░реЗрдЧрд╛ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдмреИрдВрдбрд╡рд┐рдбреНрде рдпрд╛рдиреА 2 x 16 x 44100 = 1.41 рдПрдордмреАрдкреАрдПрд╕ред

рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, nc рдХреЛ 0.0.0.0 рд╕рд╛рде рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рднрд▓реЗ рд╣реА udpsink рджреНрд╡рд╛рд░рд╛ рдХрд┐рд╕ рдиреЗрдЯрд╡рд░реНрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реЛред рдпрд╣ рд╕рднреА рдиреЗрдЯрд╡рд░реНрдХ рдЗрдВрдЯрд░рдлреЗрд╕ рдкрд░ рд╕реБрдиреЗрдЧрд╛ред рдпрд╣ рддрдм рддрдХ рдареАрдХ рд╣реИ рдЬрдм рддрдХ рдЖрдк рдЕрд▓рдЧ-рдЕрд▓рдЧ рдиреЗрдЯрд╡рд░реНрдХ рдЗрдВрдЯрд░рдлреЗрд╕ рдкрд░ рдЕрдиреНрдп рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рдЖрдИрдкреА рдкреЛрд░реНрдЯ рдирдВрдмрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред

рдореИрдВрдиреЗ рдЕрдкрдиреЗ рдкрд┐рдЫрд▓реЗ рд╕реБрдЭрд╛рд╡ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдФрд░ рджреЛрдиреЛрдВ рдХреЛ рдПрдХ рд╣реА рдиреЗрдЯрд╡рд░реНрдХ рдкрд░ рд░рдЦрд╛ред рд╡реИрд╕реЗ рднреА рд╡реЗ рдиреЗрдЯрд╡рд░реНрдХ рд╕реНрдерд╛рдиреАрдп рд╣реИрдВ, рдпрд╣ рд╕рд┐рд░реНрдл рдПрдХ рддрд╛рд░реНрдХрд┐рдХ рдЕрд▓рдЧрд╛рд╡ рд╣реИред рдпрд╣ рдлреАрдлреЛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдмрд╕ ncmpcpp рдЗрд╕реЗ рдирд╣реАрдВ рдЪрд╛рд╣рддрд╛ рд╣реИ (рдореЗрд░реА рдкрд┐рдЫрд▓реА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рджреЗрдЦреЗрдВ, рдКрдкрд░ 2)ред

рдЙрд╕ рдЪреИрдирд▓ рдХреЗ рдирд╛рдо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреЛрдИ рд╡рд┐рдЪрд╛рд░? рдпрд╛ рдЕрдЧрд░ рдлреАрдлреЛ рдХреЗ рд▓рд┐рдП mpd.conf рдЬреИрд╕рд╛ рдХреЛрдИ рдФрд░ рддрд░реАрдХрд╛ рд╣реИ? рдмрд┐рдирд╛ рдХрд╛рдо рдмрд┐рд▓реНрдХреБрд▓ рдирд╣реАрдВ рд▓рдЧрддрд╛ред

рдореИрдВрдиреЗ рд╕реЛрдЪрд╛ рдерд╛ рдХрд┐ mpd.conf рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреЗрд╡рд▓ рдПрдордкреАрдбреА рдбреЗрдореЙрди рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рдмреЗрдорд╛рдиреА рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдХреНрдпреЛрдВрдХрд┐ mopidy MPD рдбреЗрдореЙрди рд╣реИ рдФрд░ рдЖрдкрдХрд╛ рдбреЙрдХрдЯрд░ FIFO рдлрд╛рдЗрд▓ рдмрдирд╛ рд░рд╣рд╛ рд╣реИред рдХрд┐рд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдХреЗрд╡рд▓ рдПрдХ рдЪреАрдЬ рдЬреЛ рдЖрд╡рд╢реНрдпрдХ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП рд╡рд╣ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рд╣реИ рдХрд┐ рдЧреНрд░рд╛рд╣рдХ рдХреЗ рд▓рд┐рдП .ncmpcpp/config рдХрд╛ рдорд┐рд▓рд╛рди рд╣реЛ рд░рд╣рд╛ рд╣реИ, рд╣реИ рдирд╛?

рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ред рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрдпрд╛ рдХрд░ рд░рд╣рд╛ рд╣реИ рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ред рд▓реЗрдХрд┐рди рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ visualizer_output_name = "my_fifo" рдХреЛ audio_output { name "my_fifo" } рдореЗрд▓ рдЦрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рд╡рд░реНрддрдорд╛рди рдореЗрдВ ncmpcpp There is no output named "my_fifo" рджрд┐рдЦрд╛рддрд╛ рд╣реИред visualizer_output_name рдХрд╛ рд╡рд┐рд╡рд░рдг рдКрдкрд░ рд╕рд┐рд░реНрдл 5 рдкреЛрд╕реНрдЯ рд╣реИред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрд┐рд╕реА рддрд░рд╣ рд╕реАрдзреЗ рдЖрдЙрдЯрдкреБрдЯ рд╕реЗ рд╕рд┐рдВрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдиреЗрдХреНрдЯ рд╣реЛ рд░рд╣рд╛ рд╣реИред

рдореИрдВ рдЗрдирдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ visualizer_output_name рдЖрдкрдХреЗ рдПрдордкреАрдбреА (рдкреНрд░реЛрдЯреЛрдХреЙрд▓, рдкреНрд░реЛрдЧреНрд░рд╛рдо рдирд╣реАрдВ) рдЖрдЙрдЯрдкреБрдЯ рдореЗрдВ рд╕реЗ рдПрдХ рд╕реЗ рдореЗрд▓ рдЦрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП (рдпрд╛рдиреА mpc outputs )ред Mopidy рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдЖрдЙрдЯрдкреБрдЯ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ рдФрд░ рдХреЗрд╡рд▓ рдПрдХ MPD рдЖрдЙрдЯрдкреБрдЯ рд╣реИ: "рдореНрдпреВрдЯ"ред

рдпрджрд┐ рд╕рдВрднрд╡ рд╣реЛ рддреЛ рдЖрдк рд╢рд╛рдпрдж visualizer_output_name рдХреЛ рдЕрдирд╕реЗрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗред

рдЗрд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдирд╣реАрдВ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ред рдЕрднреА рднреА рдХреЛрдИ рд╡рд┐рдЬрд╝реБрдЕрд▓рд╛рдЗрдЬрд╝рд░ рджрд┐рдЦрд╛рдИ рдирд╣реАрдВ рджреЗ рд░рд╣рд╛ рд╣реИред рдореИрдВ udpsink рдХреЗ рдЖрдЙрдЯрдкреБрдЯ рд╕реНрд╡рд░реВрдк рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрддрд╛ рд╣реВрдВ: рд╡рд┐рдЬрд╝реБрдЕрд▓рд╛рдЗрдЬрд╝рд░ рдХреЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП 44100:16:2 рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП ( ncmpcpp рдпрд╛ nausea )ред

Mute рдХреЛрд╢рд┐рд╢ рдХреА, рдмрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдПрдХ рдмрд╣реБрдд рд╣реА рдордЬреЗрджрд╛рд░ рдЕрдиреБрднрд╡ рдорд┐рд▓рд╛: рдпрд╣ рд╕рд┐рд░реНрдл рдзреНрд╡рдирд┐ рдХреЛ рдореНрдпреВрдЯ рдХрд░ рджреЗрддрд╛ рд╣реИ, рдмрд┐рдирд╛ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рджрд┐рдЦрд╛рдП, рд▓реЗрдХрд┐рди рд╡рд┐рдЬрд╝реБрдЕрд▓рд╛рдЗрдЬрд╝рд░ рджрд┐рдЦрд╛рдП рдмрд┐рдирд╛ рднреАред рдпрд╛ рдЕрдзрд┐рдХ рд╕рдЯреАрдХ рд░реВрдк рд╕реЗ рдЗрд╕рдиреЗ Mute рдЖрдЙрдЯрдкреБрдЯ рдХреЛ рдЕрдХреНрд╖рдо рдХрд░ рджрд┐рдпрд╛ред

рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реИ рдХрд┐ рд╡рд┐рдЬрд╝реБрдЕрд▓рд╛рдЗрдЬрд╝рд░ рдХреЗ рд▓рд┐рдП FFT рдлрд╝рдВрдХреНрд╢рди рдХрд╣рд╛рдБ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдХреНрдпрд╛ рдпрд╣ рдлреАрдлреЛ рдХреЗ рдЖрдЙрдЯрдкреБрдЯ рдкрд░ рдпрд╛ рдлреАрдлреЛ рдХреЗ рдЗрдирдкреБрдЯ рдкрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ? рдЖрдк
рдПрдордкреАрдбреА рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛрдб рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдпрд╣ рдлреАрдлреЛ рдбреЗрдЯрд╛ рдХреЛ рдХреИрд╕реЗ рд╕рдВрднрд╛рд▓рддрд╛ рд╣реИред

рдХреНрдпрд╛ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдпрд╛ рддреЛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рд╣реИ, рднрд▓реЗ рд╣реА рдпрд╣ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдПрдХ рд░рд╛рдХреНрд╖рд╕реА рд░реВрдк рд╕реЗ рдмрдбрд╝реА рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдпреЗред

рдЖрдкрдХреЛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдЖрдкрдХреЛ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдПрдлрдПрдлрдЯреА рдХрд╣рд╛рдВ рд╣реИ
рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдлрд┐рд░ рд╕рд╣реА рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЪреБрдиреЗрдВред рдЕрдЧрд░ рдПрдлрдПрдлрдЯреА рд╣реИ
рд╡рд┐рдЬрд╝реБрдЕрд▓рд╛рдЗрдЬрд╝рд░ рдореЗрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рддреЛ рдпрд╣ рдХреЗрд╡рд▓ рдкреНрд░рдпрд╛рд╕ рдХреА рдкреВрд░реА рдмрд░реНрдмрд╛рджреА рд╣реЛрдЧреА
рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рд▓рд╛рдЧреВ рдХрд░реЗрдВред

13 рдордИ 2015 рдХреЛ 15:09 рдмрдЬреЗ, рд╡рд░реНрдирд░ рдмреЗрд░реМрдХреНрд╕ рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com рдиреЗ рд▓рд┐рдЦрд╛:

рдХреНрдпрд╛ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдпрд╛ рддреЛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рд╣реИ, рднрд▓реЗ рд╣реА рд╡рд╣ рд╣реЛрдЧрд╛
рдЖрдо рддреМрд░ рдкрд░ рдПрдХ рд░рд╛рдХреНрд╖рд╕реА рд░реВрдк рд╕реЗ рдмрдбрд╝реА рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдБред

-
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ рдпрд╛ рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/mopidy/mopidy/issues/775#issuecomment -101676033ред

FFT рд╡рд┐рдЬрд╝реБрдЕрд▓рд╛рдЗрдЬрд╝рд░ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП FIFO рдореЗрдВ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдСрдбрд┐рдпреЛ рдкреНрд░рд╛рд░реВрдк рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рд╕рдВрджрд░реНрдн: http://git.2f30.org/nausea/about/

рдЕрдЪреНрдЫрд╛ - рддреЛ рдЙрд╕рдХреЗ рдХрд╛рдо рди рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдХрд╛рд░рдг рдирд╣реАрдВ рд╣реИ! рдХреНрдпрд╛ рдЖрдкрдиреЗ рдХрд┐рдпрд╛ рд╣реИ
рдПрдХ рдорд╛рдирдХ MPD рдбреЗрдореЙрди рдЪрд▓рд╛рдиреЗ рд╡рд╛рд▓реЗ рд╕рд┐рд╕реНрдЯрдо рдХреА рд╕рд╛рде-рд╕рд╛рде рддреБрд▓рдирд╛ a . рдХреЗ рд╕рд╛рде
рд╕реНрдерд╛рдиреАрдп рдПрдирд╕реАрдПрдордкреАрд╕реАрдкреАрдкреА рдХреНрд▓рд╛рдЗрдВрдЯ? рдпрджрд┐ рдЖрдк рджреЛрдиреЛрдВ рдореЗрдВ FIFO рдлрд╝рд╛рдЗрд▓ рдирд╛рдо рдХрд╛ рдирд╛рдо рдмрджрд▓рддреЗ рд╣реИрдВ рддреЛ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ
рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓реЗрдВ? рдХреНрдпрд╛ рдпрд╣ рдЕрднреА рднреА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ? рдмрд╕ рдпрд╣ рджреЗрдЦрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ a
рд╣рд╛рд░реНрдбрдХреЛрдбреЗрдб рдкрде рдХрд╣реАрдВ рдореМрдЬреВрдж рд╣реИ ...

13 рдордИ 2015 рдХреЛ 15:57 рдмрдЬреЗ, рд╡рд░реНрдирд░ рдмреЗрд░реМрдХреНрд╕ рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com рдиреЗ рд▓рд┐рдЦрд╛:

FFT рд╡рд┐рдЬрд╝реБрдЕрд▓рд╛рдЗрдЬрд╝рд░ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢рд┐рд╖реНрдЯ рдСрдбрд┐рдпреЛ рдкреНрд░рд╛рд░реВрдк рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ
рдЙрд╕рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдлреАрдлреЛ рдореЗрдВред рд╕рдВрджрд░реНрдн: http://git.2f30.org/nausea/about/

-
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ рдпрд╛ рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/mopidy/mopidy/issues/775#issuecomment -101702624ред

рдореЗрд░реА рдЯрд┐рдкреНрдкрдгреА ncmpcpp рд╕реНрд░реЛрдд рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдереАред

Mopidy рдХрд╛ рдореНрдпреВрдЯ рдЖрдЙрдЯрдкреБрдЯ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЕрдХреНрд╖рдо рд╣реИ рдЕрд░реНрдерд╛рдд рдСрдбрд┐рдпреЛ рдореНрдпреВрдЯ рдирд╣реАрдВ рд╣реИред Ncmpcpp рд╡рд┐рдЬрд╝реБрдЕрд▓рд╛рдЗрдЬрд╝рд░ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рджрд┐рдП рдЧрдП рдЖрдЙрдЯрдкреБрдЯ рдХреЛ рд▓реЗ рд▓реЗрдЧрд╛, рдЗрд╕реЗ рдЕрдХреНрд╖рдо рдХрд░ рджреЗрдЧрд╛ (рдХреЛрдИ рдкреНрд░рднрд╛рд╡ рдирд╣реАрдВ) рдФрд░ рдлрд┐рд░ рдЗрд╕реЗ рд╕рдХреНрд╖рдо рдХрд░реЗрдЧрд╛, рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдСрдбрд┐рдпреЛ рдХреЛ рдореНрдпреВрдЯ рдХрд░ рджреЗрдЧрд╛ред рдпрдХреАрдирди рдЙрдиреНрд╣реЗрдВ рдЗрд╕реЗ рд╕рд┐рд░реНрдл рджреЛ рдмрд╛рд░ рдЯреЙрдЧрд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдСрдбрд┐рдпреЛ рдХреЗ рдЧрд▓рдд рдлреЙрд░реНрдореЗрдЯ рдореЗрдВ рд╣реЛрдиреЗ рдХреА рдПрдХ рдЕрдЪреНрдЫреА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИред рдЖрдкрдХреЗ рдкрд╛рд╕ рдЕрдкрдиреЗ gstreamer рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдореЗрдВ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ @adamcik рдХреЗ рдКрдкрд░ рдЙрд╕рдХреЗ рдХреЛрдб рдХреЗ рд╡рд┐рдкрд░реАрдд рд╕рд╣реА рд╣реИред

рдпрд╣ рджреЗрдЦрдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ рдХрд┐ рдкреНрд░рд╛рд░реВрдк рдПрдХ рд╕рдорд╕реНрдпрд╛ рдХреИрд╕реЗ рд╣реЛ рд╕рдХрддреА рд╣реИ .... рдпрд╣ 16-рдмрд┐рдЯ рд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рд╣реИ
рдкреВрд░реНрдгрд╛рдВрдХред рд╕рдмрд╕реЗ рдмреБрд░рд╛ рдпрд╣ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдПрд▓/рдЖрд░ рдЪреИрдирд▓реЛрдВ рдХреА рдЕрджрд▓рд╛-рдмрджрд▓реА рдХрд░реЗрдВ?

13 рдордИ 2015 рдХреЛ 16:33 рдмрдЬреЗ, рдирд┐рдХ рд╕реНрдЯреАрд▓ рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com рдиреЗ рд▓рд┐рдЦрд╛:

рдореЗрд░реА рдЯрд┐рдкреНрдкрдгреА ncmpcpp рд╕реНрд░реЛрдд рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдереА
http://git.musicpd.org/cgit/mirror/ncmpcpp.git/tree/src/visualizer.cppред

Mopidy рдХрд╛ рдореНрдпреВрдЯ рдЖрдЙрдЯрдкреБрдЯ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЕрдХреНрд╖рдо рд╣реИ рдЕрд░реНрдерд╛рдд рдСрдбрд┐рдпреЛ рдореНрдпреВрдЯ рдирд╣реАрдВ рд╣реИред
Ncmpcpp рд╡рд┐рдЬрд╝реБрдЕрд▓рд╛рдЗрдЬрд╝рд░ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рдЖрдЙрдЯрдкреБрдЯ рд▓реЗрдЧрд╛, рдЗрд╕реЗ рдЕрдХреНрд╖рдо рдХрд░реЗрдВ (рдирд╣реАрдВ
рдкреНрд░рднрд╛рд╡) рдФрд░ рдлрд┐рд░ рдЗрд╕реЗ рд╕рдХреНрд╖рдо рдХрд░реЗрдВ, рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдСрдбрд┐рдпреЛ рдХреЛ рдореНрдпреВрдЯ рдХрд░ рджреЗрдВред рдпрдХреАрдирди рдЙрдиреНрд╣реЗрдВ рдЪрд╛рд╣рд┐рдП
рдмрд╕ рдЗрд╕реЗ рджреЛ рдмрд╛рд░ рдЯреЙрдЧрд▓ рдХрд░реЗрдВред

рдСрдбрд┐рдпреЛ рдХреЗ рдЧрд▓рдд рдлреЙрд░реНрдореЗрдЯ рдореЗрдВ рд╣реЛрдиреЗ рдХреА рдПрдХ рдЕрдЪреНрдЫреА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИред рдЖрдкрдХреЗ рдкрд╛рд╕
рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдпрд╣ @adamcik . рдХреЗ рд╡рд┐рдкрд░реАрдд рд╕рд╣реА рд╣реИ, рдЖрдкрдХреЗ gstreamer рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдореЗрдВ рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реИ
https://github.com/adamcik рдХреЗ рдКрдкрд░ рдЙрдирдХреЗ рдХреЛрдб рдореЗрдВ рдерд╛ред

-
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ рдпрд╛ рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/mopidy/mopidy/issues/775#issuecomment -101716947ред

рдФрд░ рднрд▓реЗ рд╣реА рдмрд╛рдЗрдЯ рдСрд░реНрдбрд░рд┐рдВрдЧ рдЧрд▓рдд рд╣реЛ, рдлрд┐рд░ рднреА рдЖрдк FFT . рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
рдЧрд▓рдд рдЖрд╡реГрддреНрддрд┐ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдЙрдЯрдкреБрдЯ ...... рд▓реЗрдХрд┐рди рдЖрдк рдЕрднреА рднреА рджреЗрдЦреЗрдВрдЧреЗ
рдХреЛрдИ рдЪреАрдЬрд╝ред

13 рдордИ 2015 рдХреЛ 16:37 рдмрдЬреЗ, рд▓рд┐рдпрд╛рдо рд╡рд┐рдХрд┐рдВрд╕ [email protected] рдиреЗ рд▓рд┐рдЦрд╛:

рдпрд╣ рджреЗрдЦрдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ рдХрд┐ рдкреНрд░рд╛рд░реВрдк рдПрдХ рд╕рдорд╕реНрдпрд╛ рдХреИрд╕реЗ рд╣реЛ рд╕рдХрддреА рд╣реИ .... рдпрд╣ 16-рдмрд┐рдЯ рд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рд╣реИ
рдкреВрд░реНрдгрд╛рдВрдХред рд╕рдмрд╕реЗ рдмреБрд░рд╛ рдпрд╣ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдПрд▓/рдЖрд░ рдЪреИрдирд▓реЛрдВ рдХреА рдЕрджрд▓рд╛-рдмрджрд▓реА рдХрд░реЗрдВ?

13 рдордИ 2015 рдХреЛ 16:33 рдмрдЬреЗ, рдирд┐рдХ рд╕реНрдЯреАрд▓ рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com рдиреЗ рд▓рд┐рдЦрд╛:

рдореЗрд░реА рдЯрд┐рдкреНрдкрдгреА ncmpcpp рд╕реНрд░реЛрдд рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдереА
http://git.musicpd.org/cgit/mirror/ncmpcpp.git/tree/src/visualizer.cppред

Mopidy рдХрд╛ рдореНрдпреВрдЯ рдЖрдЙрдЯрдкреБрдЯ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЕрдХреНрд╖рдо рд╣реИ рдЕрд░реНрдерд╛рдд рдСрдбрд┐рдпреЛ рдореНрдпреВрдЯ рдирд╣реАрдВ рд╣реИред
Ncmpcpp рд╡рд┐рдЬрд╝реБрдЕрд▓рд╛рдЗрдЬрд╝рд░ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рдЖрдЙрдЯрдкреБрдЯ рд▓реЗрдЧрд╛, рдЗрд╕реЗ рдЕрдХреНрд╖рдо рдХрд░реЗрдВ (рдирд╣реАрдВ
рдкреНрд░рднрд╛рд╡) рдФрд░ рдлрд┐рд░ рдЗрд╕реЗ рд╕рдХреНрд╖рдо рдХрд░реЗрдВ, рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдСрдбрд┐рдпреЛ рдХреЛ рдореНрдпреВрдЯ рдХрд░ рджреЗрдВред рдпрдХреАрдирди рдЙрдиреНрд╣реЗрдВ рдЪрд╛рд╣рд┐рдП
рдмрд╕ рдЗрд╕реЗ рджреЛ рдмрд╛рд░ рдЯреЙрдЧрд▓ рдХрд░реЗрдВред

рдСрдбрд┐рдпреЛ рдХреЗ рдЧрд▓рдд рдлреЙрд░реНрдореЗрдЯ рдореЗрдВ рд╣реЛрдиреЗ рдХреА рдПрдХ рдЕрдЪреНрдЫреА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИред рдЖрдкрдХреЗ рдкрд╛рд╕
рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЗ gstreamer рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдореЗрдВ рдХреБрдЫ рднреА рд╕рд╣реА рдирд╣реАрдВ рд╣реИ
@adamcik https://github.com/adamcik рдХреЗ рдКрдкрд░ рдЙрдирдХреЗ рдХреЛрдб рдореЗрдВ рдерд╛ред

-
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ рдпрд╛ рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/mopidy/mopidy/issues/775#issuecomment -101716947ред

рдпрд╣ рд╕рдЪ рд╣реИ, рддреЛ рд╢рд╛рдпрдж рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реИ рдХреНрдпреЛрдВрдХрд┐ Mopidy рдХреЗ рдореНрдпреВрдЯ рдЖрдЙрдЯрдкреБрдЯ рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ udpsink рдХреЛрдИ рдбреЗрдЯрд╛ рдирд╣реАрдВ рднреЗрдЬреЗрдЧрд╛ред

cat /tmp/mdp.fifo (рдпреВрдбреАрдкреА рд╕реЗ рдКрдкрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдмрдирд╛рдпрд╛ рдЧрдпрд╛) рдбреЗрдЯрд╛ рдХреА рдирд┐рд░рдВрддрд░ рдзрд╛рд░рд╛ рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рджрд┐рдЦрд╛рддрд╛ рд╣реИред

рдореИрдВрдиреЗ рд╡рд┐рдЬрд╝реБрдЕрд▓рд╛рдЗрдЬрд╝рд░ ncmpcpp рдХреЛрдб рдХреЛ рджреЗрдЦрд╛:

  1. рдлрд╝рд╛рдЗрд▓ рдХреЛ O_RDONLY | O_NONBLOCK рд░реВрдк рдореЗрдВ рдЦреЛрд▓рддрд╛ рд╣реИ
  2. рдКрдкрд░ рд╕реЗ рдкрдврд╝рддрд╛ рд╣реИ ; рдпрд╣ рдореЗрд░реЗ mopidy config рдореЗрдВ рд╕реНрдЯреАрд░рд┐рдпреЛ рдХреЗ рд▓рд┐рдП рд╕реЗрдЯ рд╣реИ, рдпрд╣ 44100:16:2 рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдХреЛрдИ рднреА рдореЗрд░реА рд╢рд╛рдЦрд╛ рд╕реЗ рднреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд╕рдХрддрд╛ рд╣реИ (рдбреЙрдХрд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж):

git clone https://github.com/wernight/docker-mopidy.git
cd docker-mopidy
git checkout udpsink
docker build -t mopidy .
cd ..

git clone https://github.com/wernight/docker-ncmpcpp.git
cd docker-ncmpcpp
git checkout udpsink
docker build -t ncmpcpp .
cd ..

# Remember to enable PulseAudio over network 

docker run --name mopidy -d \
      -e PULSE_SERVER=tcp:$(hostname -i):4713 \
      -e PULSE_COOKIE_DATA=$(pax11publish -d | grep --color=never -Po '(?<=^Cookie: ).*') \
      mopidy
docker run --rm -it --link mopidy:mopidy ncmpcpp --host mopidy

рдиреЗрдЯрдХреИрдЯ рдХреЗ рд╕рд╛рде рд╕рдВрдШрд░реНрд╖ рдХрд░рдиреЗ рдореЗрдВ рдХрд╛рдлреА рд╕рдордп рдмрд┐рддрд╛рдирд╛ рдкрдбрд╝рд╛ рдХреНрдпреЛрдВрдХрд┐ -k рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ рдореИрдВ рдЧреАрдд рд╕реНрд╡рд┐рдЪ рдкрд░ рдЗрд╕реЗ рд╕реНрд╡рдд: рдкреБрдирд░рд╛рд░рдВрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдпрд╛ рд╣реВрдВ:

while :; do yes $'\n' | nc -lu 127.0.0.1 5555 > /tmp/mopidy.fifo; done

рдореВрд▓ рд░реВрдк рд╕реЗ рдКрдкрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЕрдиреНрдп рд╡рд┐рдХрд▓реНрдкред

@ S0lll0s @wernight netcat -k рднреА рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдирд╣реАрдВ рдХрд┐рдпрд╛ рдерд╛ рдФрд░ рдЧреАрдд рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рдмрд╛рдж рдкреБрди: рдкреНрд░рд╛рд░рдВрдн рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдерд╛ред рдЬрдмрдХрд┐ рдЖрдкрдХрд╛ рд╕рдорд╛рдзрд╛рди рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдореБрдЭреЗ рдмреЗрд╣рддрд░ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╛рдорд╛рдЬрд┐рдХ рдорд┐рд▓рд╛ рд╣реИ:

while :; do socat -d -d -T 1 -u UDP4-LISTEN:5555 OPEN:/tmp/mopidy.fifo; done

рдЖрд░реНрдХ рд▓рд┐рдирдХреНрд╕ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП:

nc рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП -k рд╕рдорд░реНрдерди рдХреЗ рд╕рд╛рде рдЖрдкрдХреЛ openbsd-netcat рдкреИрдХреЗрдЬ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рднреА рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП @SjRNMzU рдХреА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ - рдЖрдкрдХреЛ рдЪрд╛рд╣рд┐рдП рдЗрд╕реЗ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП socat рдкреИрдХреЗрдЬред

@johnhamelink (рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдЕрдкрдиреА рдЯрд┐рдкреНрдкрдгреА рд╕реЗ рдЖрд░реНрдХ рдЪрд▓рд╛ рд░рд╣реЗ рд╣реИрдВ) рдХреНрдпрд╛ рдЖрдкрдХреЗ рдкрд╛рд╕ socat рд╕рдорд╛рдзрд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдЧреАрдд рдХреЛ рд░реЛрдХрдиреЗ рдХреЗ рдмрд╛рдж рд╡рд┐рдЬрд╝реБрдЕрд▓рд╛рдЗрдЬрд╝рд░ рдХреЗ рд╕рд╛рде "рдкрдХрдбрд╝рдиреЗ" рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реИ?

@ рдерд┐рдпреЛрд╕-рд╕реНрдкреЗрд╕ рдореИрдВ рдпрд╣ рдирд╣реАрдВ рдХрд╣ рд╕рдХрддрд╛ рдХрд┐ рдореИрдВрдиреЗ рдЗрд╕реЗ рд╕реНрд╡рдпрдВ рджреЗрдЦрд╛ рд╣реИ

рдореИрдВ рдЖрд░реНрдХ рдкрд░ рд╣реВрдВ рдФрд░ рдЗрд╕реЗ nc (рджреЛрдиреЛрдВ gnu рдФрд░ openbsd ) рдпрд╛ socat рд╕рд╛рде рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд╕рдХрд╛ред рдЗрд╕рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд, рдореИрдВ gst-launch-1.0 ... udpsink port=5555 рд╕реЗ nc -kluw 1 127.0.0.1 5555 рд╕рд╛рде рдирд╣реАрдВ рдкрдврд╝ рд╕рдХрддрд╛, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╕реНрдХреНрд░реАрди рдкрд░ рдХреБрдЫ рднреА рдкреНрд░рд┐рдВрдЯ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

рдбреЗрдмрд┐рдпрди рдмрд╕реНрдЯрд░ (4.11.6-1), mopidy 2.1.0-1, gstreamer1.0-tools 1.12.2-1, ncmpcpp 0.7.4-1+b3, socat 1.7.3.2-1 рдкрд░ рдЗрд╕ рдХрд╛рдо рдХреА рдкреБрд╖реНрдЯрд┐ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

рд╕рд┐рд╕реНрдЯрдо рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рдореЗрдВ рд╕рдорд╛рдЬ рд╢реБрд░реВ рдХрд░реЗрдВ:

open_mpd_fifo() {
    local fifo
    readonly fifo='/tmp/mpd.fifo'

    mkfifo "$fifo"
    while :; do socat -d -d -T 1 -u UDP4-LISTEN:5555 OPEN:"$fifo"; done
}

mopidy [рдСрдбрд┐рдпреЛ] conf (рдиреЛрдЯ рд╣реЛрд╕реНрдЯ рдХреЛ udpsink рдХреЗ рд▓рд┐рдП рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдерд╛):

[audio]
output = tee name=t ! queue ! autoaudiosink t. ! queue ! udpsink host=127.0.0.1 port=5555

рдЖрд░реНрдХ рдХреЗ рд▓рд┐рдП рд░реИрдирд┐рд╕рд╛рд▓реНрдЯ рдЖрдкрдХреЛ рдПрдирд╕реАрдПрдордкреАрд╕реАрдкреАрдкреА рдХреЛ рдлреАрдлреЛ рд╕рдкреЛрд░реНрдЯ рдЪреЗрдХ рдХреЗ рд╕рд╛рде рд╕рдВрдХрд▓рд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛: https://bbs.archlinux.org/viewtopic.php?id=99915

рдпрд╣рд╛рдБ рдореЗрд░рд╛ рд╡рд░реНрдХрд┐рдВрдЧ рдЖрд░реНрдХ рд╕реЗрдЯрдЕрдк рд╣реИ, рдмрд╛рдХреА рдереНрд░реЗрдб + рдбреЙрдХреНрд╕ + рдореИрдирдкреЗрдЬ + рдорд┐рд╢реНрд░рд┐рдд рдмреНрд▓реЙрдЧ рдкрдврд╝рдиреЗ рдХреЗ рдмрд╛рджред рдореИрдВ Mopidy рдХреЛ рд╕рд┐рд╕реНрдЯрдо рд╕реЗрд╡рд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд▓рд╛ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реЗрд╡рд╛ PulseAudio рдХреЛ TCP рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдСрдбрд┐рдпреЛ рднреЗрдЬ рд░рд╣рд╛ рд╣реВрдВред рдореИрдВрдиреЗ рдХреБрдЫ рдЕрддрд┐рд░рд┐рдХреНрдд рдПрдиреЛрдЯреЗрд╢рди рд╢рд╛рдорд┐рд▓ рдХрд┐рдП рд╣реИрдВ рдЬреЛ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдХрдо рдЕрдиреБрднрд╡реА рд▓реЛрдЧреЛрдВ рдХреА рдорджрдж рдХрд░реЗрдВрдЧреЗред

рд╕рдВрдХреБрд▓

рдпреЗ рд╕рднреА рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдЖрд░реНрдХ рд░реЗрдкреЛ рд╕реЗ рд╣реИрдВ:

gstreamer 1.12.3-1
mopidy 2.1.0
ncmpcpp 0.8.1  # this had fifo support without any special compiling for me
openbsd-netcat 1.178_3-1  # gnu-netcat lacks the -k flag, as discussed above
pulseaudio 11.1

рд╕реЗрдЯ рдЕрдк

mopidy рд╕рд┐рд╕реНрдЯрдо рд╕реЗрд╡рд╛ рд╕рдХреНрд╖рдо рдХрд░реЗрдВ:

sudo systemctl enable mopidy.service

рд╕рдВрдкрд╛рджрди рдореЗрдВ рдЖрд╕рд╛рдиреА (рд╡реИрдХрд▓реНрдкрд┐рдХ) рдХреЗ рд▓рд┐рдП рдореЛрдкрд┐рдбреА рдХреЗ рд╕рд┐рд╕реНрдЯрдо рдХреЙрдиреНрдлрд┐рдЧ рдХреЛ рдпреВрдЬрд░ рдХреЙрдиреНрдлрд┐рдЧрд░ рдХреЗ рд╕рд╛рде рд╕рд┐рдорд▓рд┐рдВрдХ рд╕реЗ рдмрджрд▓реЗрдВ:

sudo ln -sf ~/.config/mopidy/mopidy.conf /etc/mopidy/mopidy.conf

рдлреАрдлреЛ рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдБ:

mkfifo "/tmp/mpd.fifo"

рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди

~/.config/mopidy/mopidy.conf (рдпрд╛ /etc/mopidy/mopidy.conf рдЕрдЧрд░ рдЖрдкрдиреЗ рд╕рд┐рдорд▓рд┐рдВрдХ рдирд╣реАрдВ рдмрдирд╛рдпрд╛ рд╣реИ): mopidy рдХреЛ рдкрд▓реНрд╕рдСрдбрд┐рдпреЛ рд╕рд░реНрд╡рд░ рдкрд░ рдСрдбрд┐рдпреЛ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣реЗрдВ рдЬреЛ рд▓реЛрдХрд▓рд╣реЛрд╕реНрдЯ рдкрд░ рд╕реБрди рд░рд╣рд╛ рд╣реЛ рдФрд░ рд▓реЛрдХрд▓рд╣реЛрд╕реНрдЯ рдкрд░ рдпреВрдбреАрдкреА рд╕рд┐рдВрдХ : 5555

[audio]
output = tee name=t ! queue ! pulsesink server=127.0.0.1 t. ! queue ! udpsink host=127.0.0.1 port=5555

рдореЗрдВ ~/.ncmpcpp/config : ncmpcpp рдХреЛ рдмрддрд╛рдПрдВ рдХрд┐ рд╡рд╣ рдлреАрдлреЛ рдлрд╛рдЗрд▓ рдХрд╣рд╛рдВ рдорд┐рд▓реЗрдЧреА рдЬрд┐рд╕реЗ рд╕реБрдирдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ, рдФрд░ рдХреБрдЫ рдЕрдиреНрдп рд╡рд┐рд╡рд┐рдз рд╕реЗрдЯрд┐рдВрдЧреНрд╕

visualizer_fifo_path = "/tmp/mpd.fifo"
visualizer_output_name = "my_fifo"
visualizer_sync_interval = "30"
visualizer_in_stereo = "yes"
visualizer_type = "spectrum"
visualizer_look = "+|"

рдореЗрдВ ~/.config/pulse/default.pa : рдкрд▓реНрд╕рдСрдбрд┐рдпреЛ рдХреЛ рд▓реЛрдХрд▓рд╣реЛрд╕реНрдЯ рд╕реЗ рдЯреАрд╕реАрдкреА рдкрд░ рдСрдбрд┐рдпреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣реЗрдВ (рд╕реЗрдЯрд┐рдВрдЧ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╣реЛрдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдФрд░ рдмрд╕ рдЕрд╕рдореНрдмрджреНрдз рд╣реЛ рд╕рдХрддрд╛ рд╣реИ)

load-module module-native-protocol-tcp auth-ip-acl=127.0.0.1

~/.zshrc ( ~/.bashrc рдореЗрдВ рднреА рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП): netcat рдХреЛ ncmpcpp рд╕рд╛рде рд╢реБрд░реВ рдХрд░рдиреЗ рдФрд░ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд░реИрдкрд░ рдлрд╝рдВрдХреНрд╢рди "nplayer" рдмрдирд╛рдПрдВ:

nplayer () (nc -kluw 1 127.0.0.1 5555 > /tmp/mpd.fifo & trap "kill $!" EXIT; ncmpcpp)

рдпрд╣ рдХреНрдпрд╛ рдХрд░рддрд╛ рд╣реИ:

  • рдХрд┐рд╕реА рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдЙрд╕рдХреА рд╕рдВрдкреВрд░реНрдг рд╕рд╛рдордЧреНрд░реА рдХреЛ рд▓рдкреЗрдЯрдХрд░ рдПрдХ рд╕рдмрд╕реНрдХреНрд░рд┐рдкреНрд╢рди рдХреЗ рд╕рд╛рде рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВ
  • рдпреВрдбреАрдкреА рд╕рд┐рдВрдХ рдХреЛ рднреЗрдЬреЗ рдЧрдП рдСрдбрд┐рдпреЛ рдбреЗрдЯрд╛ рдХреЛ рд╕реБрдирдиреЗ рдХреЗ рд▓рд┐рдП рдкреГрд╖реНрдарднреВрдорд┐ рдореЗрдВ netcat рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╢реБрд░реВ рдХрд░реЗрдВ рдФрд░ рдЗрд╕реЗ рдкрд╣рд▓реЗ рдмрдирд╛рдП рдЧрдП рдлреАрдлреЛ рдкрд░ рд░реАрдбрд╛рдпрд░реЗрдХреНрдЯ рдХрд░реЗрдВред рдЭрдВрдбреЗ:

    • -k рд╡рд░реНрддрдорд╛рди рдХрдиреЗрдХреНрд╢рди рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рд╕реБрдирддреЗ рд░рд╣реЗрдВ

    • -l рд╢реНрд░рд╡рдг рдореЛрдб рд╕рдХреНрд╖рдо рдХрд░реЗрдВ

    • -u рдпреВрдбреАрдкреА рдореЛрдб рд╕рдХреНрд╖рдо рдХрд░реЗрдВ

    • -w NUM NUM рд╕реЗрдХрдВрдб рдХреЗ рдмрд╛рдж рд╕рдордпрдмрд╛рд╣реНрдп рдирд┐рд╖реНрдХреНрд░рд┐рдп рдХрдиреЗрдХреНрд╢рди (рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ 1 рд╕реЗрдХрдВрдб)

  • netcat ncmpcpp рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ EXIT рдЯреНрд░реИрдк рд╕реЗрдЯ рдХрд░реЗрдВ рдЬрдм
  • рдЕрдЧреНрд░рднреВрдорд┐ рдореЗрдВ ncmpcpp рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╢реБрд░реВ рдХрд░реЗрдВ

рдореИрдВ рдордВрдЬрд╝рд░реЛ (рдЖрд░реНрдХ рдбрд┐рд╕реНрдЯреНрд░реЛ) рдкрд░ рдореЛрдкрд┐рдбреА рдЪрд▓рд╛ рд░рд╣рд╛ рд╣реВрдВред рдореБрдЭреЗ рд╕рдорд╛рдЬ рдпрд╛ рдиреЗрдЯрдХреИрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХреЛрдИ рдЖрдЙрдЯрдкреБрдЯ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдореЗрдВ рдкрд░реЗрд╢рд╛рдиреА рд╣реЛ рд░рд╣реА рдереАред рдореИрдВ рд╣рд╛рд▓рд╛рдВрдХрд┐ tcpdump рдХреЗ рд╕рд╛рде рдЖрдиреЗ рд╡рд╛рд▓реЗ рдкреИрдХреЗрдЯреЛрдВ рдХреЛ рджреЗрдЦрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдерд╛:
sudo tcpdump -i lo -n udp port 5555 -XX

рдореБрдЭреЗ рдмрд╣реБрдд рд╕рдордп рд▓рдЧрд╛ рдФрд░ рдореБрдЭреЗ @mosbasik рдХреЗ рдмрд┐рдирд╛ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ
udpsink рдХреЗ рдмрд╛рдж рд╕рдорд╕реНрдпрд╛ host=127.0.0.1 рдирд╣реАрдВ рдереА, рдпрд╣ рдЕрдиреНрдп рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдХреНрдпреЛрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдФрд░ рдореБрдЭреЗ рдирд╣реАрдВ, рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ред рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдкрдХреЛ рдХреЛрдИ рдЖрдЙрдЯрдкреБрдЯ рдирд╣реАрдВ рдорд┐рд▓ рд░рд╣рд╛ рд╣реИ рддреЛ рдпрд╣ рд╕рдВрднрд╡ рд╣реИред рдЗрди 2 рдиреЗ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд┐рдпрд╛:

[audio]
output = tee name=t ! queue ! autoaudiosink server=127.0.0.1 t. ! queue ! udpsink host=127.0.0.1 port=5555тЖк

рдпрд╛

[audio]
output = tee name=t ! queue ! autoaudiosink  t. ! queue ! udpsink host=127.0.0.1 port=5555тЖк

рдПрдХ рддрд░рдл рдзреНрдпрд╛рди рджреЗрдВ: рдореИрдВ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП pulsesink рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рдерд╛ рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдЗрд╕реЗ autoaudiosink рдкрд░ рдЫреЛрдбрд╝рдирд╛ рдкрдбрд╝рд╛, рдЬреЛ рдХрд┐ рдореИрдВрдиреЗ рдЗрд╕реЗ рдкрд╣рд▓реЗ рднреА рд╕реЗрдЯ рдХрд┐рдпрд╛ рдерд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╡рд┐рдЬрд╝реБрдЕрд▓рд╛рдЗрдЬрд╝рд░ рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдзреАрдорд╛ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ, рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ autoaudiosink рд░реАрдмреВрдЯ рдХреЗ рдмрд╛рдж рдмрд┐рд▓реНрдХреБрд▓ рд╕рд╣реА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ .. рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЕрднреА рднреА рдереЛрдбрд╝рд╛ рдзреАрдорд╛ рд╣реИред рдкрд▓реНрд╕рд▓рд┐рдВрдХ рдХреЗ рд╕рд╛рде рдпрд╣ gstreamer рдкреНрд▓рдЧрдЗрдиреНрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╢рд┐рдХрд╛рдпрдд рдХрд░рддрд╛ рд░рд╣рд╛ред рдЗрд╕рдХреЗ рдмрд╛рдж рднреА (рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ) рдореИрдВрдиреЗ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдЖрд░реНрдХ рд░реЗрдкреЛ рдкрд░ рдЬреАрдПрд╕рдЯреА рдХреЗ рд▓рд┐рдП рд╣рд░ рдкреНрд▓рдЧрдЗрди рдкреИрдХреЗрдЬ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рд╣реИред рдиреЛрдЯ flump3dec рдФрд░ mad


mopidy deps рдХрд╛ рдЖрдЙрдЯрдкреБрдЯ

Executable: /usr/bin/mopidy
Platform: Linux-4.16.7-1-MANJARO-x86_64-with-glibc2.2.5
Python: CPython 2.7.15 from /usr/lib/python2.7
Mopidy: 2.2.1 from /usr/lib/python2.7/site-packages
  Pykka>=1.1: 1.2.1 from /usr/lib/python2.7/site-packages
  requests>=2.0: 2.20.1 from /usr/lib/python2.7/site-packages
    chardet>=3.0.2: 3.0.4 from /usr/lib/python2.7/site-packages
    idna>=2.5: 2.7 from /usr/lib/python2.7/site-packages
    urllib3>=1.21.1: 1.24.1 from /usr/lib/python2.7/site-packages
  setuptools: 40.5.0 from /usr/lib/python2.7/site-packages
  tornado>=4.4: 5.1.1 from /usr/lib/python2.7/site-packages
    futures: 3.2.0 from /usr/lib/python2.7/site-packages
    singledispatch: 3.4.0.3 from /usr/lib/python2.7/site-packages
      six: 1.11.0 from /usr/lib/python2.7/site-packages
    backports_abc>=0.4: 0.5 from /usr/lib/python2.7/site-packages
Mopidy-Iris: 3.4.9 from /usr/lib/python2.7/site-packages
  setuptools>=3.3: 40.5.0 from /usr/lib/python2.7/site-packages
  pylast>=1.6.0: 2.3.0 from /usr/lib/python2.7/site-packages
    six: 1.11.0 from /usr/lib/python2.7/site-packages
  Mopidy>=2.0: 2.2.1 from /usr/lib/python2.7/site-packages
    Pykka>=1.1: 1.2.1 from /usr/lib/python2.7/site-packages
    requests>=2.0: 2.20.1 from /usr/lib/python2.7/site-packages
      chardet>=3.0.2: 3.0.4 from /usr/lib/python2.7/site-packages
      idna>=2.5: 2.7 from /usr/lib/python2.7/site-packages
      urllib3>=1.21.1: 1.24.1 from /usr/lib/python2.7/site-packages
    setuptools: 40.5.0 from /usr/lib/python2.7/site-packages
    tornado>=4.4: 5.1.1 from /usr/lib/python2.7/site-packages
      futures: 3.2.0 from /usr/lib/python2.7/site-packages
      singledispatch: 3.4.0.3 from /usr/lib/python2.7/site-packages
        six: 1.11.0 from /usr/lib/python2.7/site-packages
      backports_abc>=0.4: 0.5 from /usr/lib/python2.7/site-packages
  Mopidy-Local-Images>=1.0: 1.0.0 from /usr/lib/python2.7/site-packages
    setuptools: 40.5.0 from /usr/lib/python2.7/site-packages
    Mopidy>=1.1: 2.2.1 from /usr/lib/python2.7/site-packages
      Pykka>=1.1: 1.2.1 from /usr/lib/python2.7/site-packages
      requests>=2.0: 2.20.1 from /usr/lib/python2.7/site-packages
        chardet>=3.0.2: 3.0.4 from /usr/lib/python2.7/site-packages
        idna>=2.5: 2.7 from /usr/lib/python2.7/site-packages
        urllib3>=1.21.1: 1.24.1 from /usr/lib/python2.7/site-packages
      setuptools: 40.5.0 from /usr/lib/python2.7/site-packages
      tornado>=4.4: 5.1.1 from /usr/lib/python2.7/site-packages
        futures: 3.2.0 from /usr/lib/python2.7/site-packages
        singledispatch: 3.4.0.3 from /usr/lib/python2.7/site-packages
          six: 1.11.0 from /usr/lib/python2.7/site-packages
        backports_abc>=0.4: 0.5 from /usr/lib/python2.7/site-packages
    Pykka>=1.1: 1.2.1 from /usr/lib/python2.7/site-packages
    uritools>=1.0: 1.0.1 from /usr/lib/python2.7/site-packages
      ipaddress>=1.0.6: 1.0.22 from /usr/lib/python2.7/site-packages
      ipaddress>=1.0.6: 1.0.22 from /usr/lib/python2.7/site-packages
  ConfigObj>=5.0.6: 5.0.6 from /usr/lib/python2.7/site-packages
  raven>=6.1.0: 6.9.0 from /usr/lib/python2.7/site-packages
    contextlib2: 0.5.5 from /usr/lib/python2.7/site-packages
Mopidy-Local-Images: 1.0.0 from /usr/lib/python2.7/site-packages
  setuptools: 40.5.0 from /usr/lib/python2.7/site-packages
  Mopidy>=1.1: 2.2.1 from /usr/lib/python2.7/site-packages
    Pykka>=1.1: 1.2.1 from /usr/lib/python2.7/site-packages
    requests>=2.0: 2.20.1 from /usr/lib/python2.7/site-packages
      chardet>=3.0.2: 3.0.4 from /usr/lib/python2.7/site-packages
      idna>=2.5: 2.7 from /usr/lib/python2.7/site-packages
      urllib3>=1.21.1: 1.24.1 from /usr/lib/python2.7/site-packages
    setuptools: 40.5.0 from /usr/lib/python2.7/site-packages
    tornado>=4.4: 5.1.1 from /usr/lib/python2.7/site-packages
      futures: 3.2.0 from /usr/lib/python2.7/site-packages
      singledispatch: 3.4.0.3 from /usr/lib/python2.7/site-packages
        six: 1.11.0 from /usr/lib/python2.7/site-packages
      backports_abc>=0.4: 0.5 from /usr/lib/python2.7/site-packages
  Pykka>=1.1: 1.2.1 from /usr/lib/python2.7/site-packages
  uritools>=1.0: 1.0.1 from /usr/lib/python2.7/site-packages
    ipaddress>=1.0.6: 1.0.22 from /usr/lib/python2.7/site-packages
    ipaddress>=1.0.6: 1.0.22 from /usr/lib/python2.7/site-packages
Mopidy-Spotify-Tunigo: 1.0.0 from /usr/lib/python2.7/site-packages
  Mopidy>=0.19.0: 2.2.1 from /usr/lib/python2.7/site-packages
    Pykka>=1.1: 1.2.1 from /usr/lib/python2.7/site-packages
    requests>=2.0: 2.20.1 from /usr/lib/python2.7/site-packages
      chardet>=3.0.2: 3.0.4 from /usr/lib/python2.7/site-packages
      idna>=2.5: 2.7 from /usr/lib/python2.7/site-packages
      urllib3>=1.21.1: 1.24.1 from /usr/lib/python2.7/site-packages
    setuptools: 40.5.0 from /usr/lib/python2.7/site-packages
    tornado>=4.4: 5.1.1 from /usr/lib/python2.7/site-packages
      futures: 3.2.0 from /usr/lib/python2.7/site-packages
      singledispatch: 3.4.0.3 from /usr/lib/python2.7/site-packages
        six: 1.11.0 from /usr/lib/python2.7/site-packages
      backports_abc>=0.4: 0.5 from /usr/lib/python2.7/site-packages
  Mopidy-Spotify>=1.2.0: 3.1.0 from /usr/lib/python2.7/site-packages
    Mopidy>=2.0: 2.2.1 from /usr/lib/python2.7/site-packages
      Pykka>=1.1: 1.2.1 from /usr/lib/python2.7/site-packages
      requests>=2.0: 2.20.1 from /usr/lib/python2.7/site-packages
        chardet>=3.0.2: 3.0.4 from /usr/lib/python2.7/site-packages
        idna>=2.5: 2.7 from /usr/lib/python2.7/site-packages
        urllib3>=1.21.1: 1.24.1 from /usr/lib/python2.7/site-packages
      setuptools: 40.5.0 from /usr/lib/python2.7/site-packages
      tornado>=4.4: 5.1.1 from /usr/lib/python2.7/site-packages
        futures: 3.2.0 from /usr/lib/python2.7/site-packages
        singledispatch: 3.4.0.3 from /usr/lib/python2.7/site-packages
          six: 1.11.0 from /usr/lib/python2.7/site-packages
        backports_abc>=0.4: 0.5 from /usr/lib/python2.7/site-packages
    Pykka>=1.1: 1.2.1 from /usr/lib/python2.7/site-packages
    pyspotify>=2.0.5: 2.0.5 from /usr/lib/python2.7/site-packages
      cffi>=1.0.0: 1.11.5 from /usr/lib/python2.7/site-packages
        pycparser: 2.19 from /usr/lib/python2.7/site-packages
    requests>=2.0: 2.20.1 from /usr/lib/python2.7/site-packages
      chardet>=3.0.2: 3.0.4 from /usr/lib/python2.7/site-packages
      idna>=2.5: 2.7 from /usr/lib/python2.7/site-packages
      urllib3>=1.21.1: 1.24.1 from /usr/lib/python2.7/site-packages
    setuptools: 40.5.0 from /usr/lib/python2.7/site-packages
  Pykka>=1.1: 1.2.1 from /usr/lib/python2.7/site-packages
  setuptools: 40.5.0 from /usr/lib/python2.7/site-packages
  tunigo>=1.0.0: 1.0.0 from /usr/lib/python2.7/site-packages
    requests>=2.0.0: 2.20.1 from /usr/lib/python2.7/site-packages
      chardet>=3.0.2: 3.0.4 from /usr/lib/python2.7/site-packages
      idna>=2.5: 2.7 from /usr/lib/python2.7/site-packages
      urllib3>=1.21.1: 1.24.1 from /usr/lib/python2.7/site-packages
    setuptools: 40.5.0 from /usr/lib/python2.7/site-packages
Mopidy-SoundCloud: 2.1.0 from /usr/lib/python2.7/site-packages
  setuptools: 40.5.0 from /usr/lib/python2.7/site-packages
  Mopidy>=1.0: 2.2.1 from /usr/lib/python2.7/site-packages
    Pykka>=1.1: 1.2.1 from /usr/lib/python2.7/site-packages
    requests>=2.0: 2.20.1 from /usr/lib/python2.7/site-packages
      chardet>=3.0.2: 3.0.4 from /usr/lib/python2.7/site-packages
      idna>=2.5: 2.7 from /usr/lib/python2.7/site-packages
      urllib3>=1.21.1: 1.24.1 from /usr/lib/python2.7/site-packages
    setuptools: 40.5.0 from /usr/lib/python2.7/site-packages
    tornado>=4.4: 5.1.1 from /usr/lib/python2.7/site-packages
      futures: 3.2.0 from /usr/lib/python2.7/site-packages
      singledispatch: 3.4.0.3 from /usr/lib/python2.7/site-packages
        six: 1.11.0 from /usr/lib/python2.7/site-packages
      backports_abc>=0.4: 0.5 from /usr/lib/python2.7/site-packages
  Pykka>=1.1: 1.2.1 from /usr/lib/python2.7/site-packages
  requests>=2.0.0: 2.20.1 from /usr/lib/python2.7/site-packages
    chardet>=3.0.2: 3.0.4 from /usr/lib/python2.7/site-packages
    idna>=2.5: 2.7 from /usr/lib/python2.7/site-packages
    urllib3>=1.21.1: 1.24.1 from /usr/lib/python2.7/site-packages
Mopidy-Spotify: 3.1.0 from /usr/lib/python2.7/site-packages
  Mopidy>=2.0: 2.2.1 from /usr/lib/python2.7/site-packages
    Pykka>=1.1: 1.2.1 from /usr/lib/python2.7/site-packages
    requests>=2.0: 2.20.1 from /usr/lib/python2.7/site-packages
      chardet>=3.0.2: 3.0.4 from /usr/lib/python2.7/site-packages
      idna>=2.5: 2.7 from /usr/lib/python2.7/site-packages
      urllib3>=1.21.1: 1.24.1 from /usr/lib/python2.7/site-packages
    setuptools: 40.5.0 from /usr/lib/python2.7/site-packages
    tornado>=4.4: 5.1.1 from /usr/lib/python2.7/site-packages
      futures: 3.2.0 from /usr/lib/python2.7/site-packages
      singledispatch: 3.4.0.3 from /usr/lib/python2.7/site-packages
        six: 1.11.0 from /usr/lib/python2.7/site-packages
      backports_abc>=0.4: 0.5 from /usr/lib/python2.7/site-packages
  Pykka>=1.1: 1.2.1 from /usr/lib/python2.7/site-packages
  pyspotify>=2.0.5: 2.0.5 from /usr/lib/python2.7/site-packages
    cffi>=1.0.0: 1.11.5 from /usr/lib/python2.7/site-packages
      pycparser: 2.19 from /usr/lib/python2.7/site-packages
  requests>=2.0: 2.20.1 from /usr/lib/python2.7/site-packages
    chardet>=3.0.2: 3.0.4 from /usr/lib/python2.7/site-packages
    idna>=2.5: 2.7 from /usr/lib/python2.7/site-packages
    urllib3>=1.21.1: 1.24.1 from /usr/lib/python2.7/site-packages
  setuptools: 40.5.0 from /usr/lib/python2.7/site-packages
GStreamer: 1.14.4.0 from /usr/lib/python2.7/site-packages/gi
  Detailed information: 
    Python wrapper: python-gi 3.30.2
    Relevant elements:
      Found:
        uridecodebin
        souphttpsrc
        appsrc
        alsasink
        osssink
        oss4sink
        pulsesink
        id3demux
        id3v2mux
        lamemp3enc
        mpegaudioparse
        mpg123audiodec
        vorbisdec
        vorbisenc
        vorbisparse
        oggdemux
        oggmux
        oggparse
        flacdec
        flacparse
        shout2send
      Not found:
        flump3dec
        mad

рдореИрдВ Mopidy рдФрд░ рд╕рднреА рджреВрд░рд╕реНрде ncmpcpp рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП udpsink рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред Mopidy рдХреЛ MacVLAN рдХреЗ рд╕рд╛рде рдбреЙрдХрдЯрд░ рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рд╕реЗрдЯрдЕрдк рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдореИрдВ рдХрдВрдЯреЗрдирд░ рдкрд░ рдкреЛрд░реНрдЯ рдХреЛ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рджреЗрдЦ рд╕рдХрддрд╛ рд╣реВрдВред

nc -vz -u mopidy.lan 5555
found 0 associations
found 1 connections:
     1: flags=82<CONNECTED,PREFERRED>
    outif (null)
    src x.x.x.x port 50630
    dst x.x.x.x port 5555
    rank info not available

Connection to mopidy.lan port 5555 [udp/personal-agent] succeeded!

рд╡рд░реНрддрдорд╛рди рдореЗрдВ Mopidy рдирд┐рдореНрди рдмрд┐рдЯ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИ:

[audio]
mixer = software
mixer_volume = 100
output = tee name=t ! queue ! lamemp3enc ! shout2send async=false mount=mopidy ip="mopidy.lan" port=8092 username="some username" password="some password" t. ! queue ! udpsink host=0.0.0.0 port=5555

mpd.fifo рдореЗрдВ рдХрдЪреНрдЪреЗ рдбреЗрдЯрд╛ рдХреЛ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореИрдВ рдиреЗрдЯрдХреИрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ, рдЗрд╕ рдкрд░ рдХреЛрдИ рд╡рд┐рдЪрд╛рд░? рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдЧрд▓рдд рддрд░реАрдХреЗ рд╕реЗ рдиреЗрдЯрдХреИрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдХреБрдЫ рд╢реЛрдз рдиреЗ рдХреЛрдИ рдЬрд╡рд╛рдм рдирд╣реАрдВ рджрд┐рдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдХреЛрдИ рдореБрдЭреЗ рд╕рд╣реА рджрд┐рд╢рд╛ рдореЗрдВ рдЗрдВрдЧрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред

#!/bin/bash

mkfifo /tmp/mpd.fifo
while :; do yes $'\n' | nc -lu mopidy 5555 > /tmp/mpd.fifo; done

рдореБрдЭреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рддреНрд░реБрдЯрд┐ рдорд┐рд▓рддреА рд╣реИ:

nc: Can't assign requested address

рдореИрдВ рдЗрд╕реЗ рдХреИрд╕реЗ рдХрд╛рдо рдкрд░ рд▓рд╛ рд╕рдХрддрд╛ рд╣реВрдВ рдЗрд╕ рдкрд░ рдХреЛрдИ рд╡рд┐рдЪрд╛рд░?

рдЪреАрдпрд░реНрд╕!

FYI рдХрд░реЗрдВ рдореИрдВрдиреЗ gstreamer рдХреЗ udpsink рд▓рд┐рдП ncmpcpp рдореЗрдВ рд╕рдорд░реНрдерди рдЬреЛрдбрд╝рд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЕрдм рдЗрд╕реЗ рд╕реАрдзреЗ рдлреАрдлреЛ рд╣реИрдХреНрд╕ рдХреЗ рдмрд┐рдирд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП https://github.com/ncmpcpp/ncmpcpp/commit/fb886f687014e22b2fe1477da855be5201063ea8 рджреЗрдЦреЗрдВред

рдПрдХ рдЯреАрдЬрд╝рд░ рдХреЗ рдиреАрдЪреЗред рдпрд╣ mopidy + mopidy-spotify + mopidy-mpd + ncmpcpp рд╣реИред

https://user-images.githubusercontent.com/387658/102549720-e41bf980-40bc-11eb-8127-70889011e52f.mp4

@arybczak рдмрд╣реБрдд рдмрдврд╝рд┐рдпрд╛! рдЖрдкрдХреЛ рдЗрд╕реЗ https://discourse.mopidy.com/c/show-and-tell/9 . рдкрд░ рдкреЛрд╕реНрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП

@adamcik рдХреНрдпрд╛ рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рд▓рдЧрднрдЧ 7-рдпреЛ рдореБрджреНрджрд╛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рджреБрдирд┐рдпрд╛ рдХреЗ рдореБрджреНрджреЗ рдХреЗ рдмреЗрд╣рддрд░ рд╕рдорд╛рдзрд╛рди рдХреЗ рдкрдХреНрд╖ рдореЗрдВ "рдмрд╣рд┐рд╖реНрдХреГрдд" рд╣реИ рдЬрд┐рд╕рдиреЗ рдЗрд╕реЗ рд╕реНрдкрд╛рд░реНрдХ рдХрд┐рдпрд╛ (рдПрдирд╕реАрдПрдордкреАрд╕реАрдкреАрдкреА рдореЗрдВ рд╡рд┐рдЬрд╝реБрдЕрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдХрд╛ рд╕рдорд░реНрдерди)?

@pspeder , рдЖрдкрдХрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИ? рдХреНрдпрд╛ https://github.com/mopidy/mopidy/issues/775#issuecomment -747725806 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рд╣реИ?

@kingosticks рдмрд╕ рд╕реБрдЭрд╛рд╡ рджреЗ рд░рд╣рд╛ рдерд╛ рдХрд┐ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдП

рдореИрдВ рдЗрд╕рд╕реЗ рд╕рд╣рдордд рд╣реВрдВред

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

weilbith picture weilbith  ┬╖  7рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

flyingrub picture flyingrub  ┬╖  15рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

ice-bear-forever picture ice-bear-forever  ┬╖  6рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

zopyx picture zopyx  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

pnijhara picture pnijhara  ┬╖  5рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ