reel

A contraption for async subprocess streaming


License
MIT
Install
pip install reel==0.0.8

Documentation

reel

Async subprocess pipelines and stream transports:

"""An example of using ``reel`` to play music."""
import trio

from reel import Reel
from reel.cmd import ffmpeg, sox


async def main():
    """Play some audio files through the speakers."""
    cornell77 = ''.join([
        'http://archive.org/download/',
        'gd1977-05-08.shure57.stevenson.29303',
        '.flac16/gd1977-05-08d02t{}.flac'
    ])

    tracks = [
        'http://allotropic.com/static/out000.wav',
        'http://allotropic.com/static/out001.wav',
        'http://allotropic.com/static/out002.wav',
        'http://allotropic.com/static/out003.wav',
        'http://allotropic.com/static/out004.wav',
        'http://allotropic.com/static/out005.wav',
        cornell77.format('04'),
        cornell77.format('05'),
        'http://ice1.somafm.com/groovesalad-256-mp3',
    ]

    playlist = Reel([ffmpeg.read(track) for track in tracks])
    speakers = sox.speakers()

    async with playlist | speakers as player:
        await player.play()

if __name__ == '__main__':
    trio.run(main)

Motivation

This project is a simplified version of Python subprocess control with pipes and asynchronous support. It is being developed to support tapedeck, a music streaming package which uses ffmpeg and other shell commands to get music from various sources to various destinations.