Package stempeg
Stempeg is a python package to read and write STEM files. Technically, stems are audio containers that combine multiple audio streams and metadata in a single audio file. This makes it ideal to playback multitrack audio, where users can select the audio sub-stream during playback (e.g. supported by VLC).
Under the hood, stempeg uses ffmpeg for reading and writing multistream audio, optionally MP4Box is used to create STEM files that are compatible with Native Instruments hardware and software.
stempeg.read
: reading audio tensors and metadata.stempeg.write
: writing audio tensors.
Please checkout the Github repository for more information.
Expand source code Browse git
# flake8: noqa
"""
Stempeg is a python package to read and write [STEM](https://www.native-instruments.com/en/specials/stems/) files.
Technically, stems are audio containers that combine multiple audio streams and metadata in a single audio file. This makes it ideal to playback multitrack audio, where users can select the audio sub-stream during playback (e.g. supported by VLC).
Under the hood, _stempeg_ uses [ffmpeg](https://www.ffmpeg.org/) for reading and writing multistream audio, optionally [MP4Box](https://github.com/gpac/gpac) is used to create STEM files that are compatible with Native Instruments hardware and software.
- `stempeg.read`: reading audio tensors and metadata.
- `stempeg.write`: writing audio tensors.
![stempeg_scheme](https://user-images.githubusercontent.com/72940/102477776-16960a00-405d-11eb-9389-1ea9263cf99d.png)
Please checkout [the Github repository](https://github.com/faroit/stempeg) for more information.
"""
from .read import read_stems
from .read import Info
from .read import StreamsReader, ChannelsReader
from .write import write_stems
from .write import write_audio
from .write import FilesWriter, StreamsWriter, ChannelsWriter, NIStemsWriter
from .cmds import check_available_aac_encoders
import re
import os
import subprocess as sp
from os import path as op
import argparse
import pkg_resources
__version__ = "0.2.2"
def example_stem_path():
"""Get the path to an included stem file.
Returns
-------
filename : str
Path to the stem file
"""
return pkg_resources.resource_filename(
__name__,
'data/The Easton Ellises - Falcon 69.stem.mp4'
)
def default_metadata():
"""Get the path to included stems metadata.
Returns
-------
filename : str
Path to the json file
"""
return pkg_resources.resource_filename(
__name__,
'data/default_metadata.json'
)
def ffmpeg_version():
"""Returns the available ffmpeg version
Returns
----------
version : str
version number as string
"""
cmd = [
'ffmpeg',
'-version'
]
output = sp.check_output(cmd)
aac_codecs = [
x for x in
output.splitlines() if "ffmpeg version " in str(x)
][0]
hay = aac_codecs.decode('ascii')
match = re.findall(r'ffmpeg version \w?(\d+\.)?(\d+\.)?(\*|\d+)', hay)
if match:
return "".join(match[0])
else:
return None
Sub-modules
stempeg.cli
stempeg.cmds
stempeg.read
-
Writing module to load stems into numpy tensors.
stempeg.write
-
Writing module to save stems to disk.
Functions
def default_metadata()
-
Get the path to included stems metadata.
Returns
filename
:str
- Path to the json file
Expand source code Browse git
def default_metadata(): """Get the path to included stems metadata. Returns ------- filename : str Path to the json file """ return pkg_resources.resource_filename( __name__, 'data/default_metadata.json' )
def example_stem_path()
-
Get the path to an included stem file.
Returns
filename
:str
- Path to the stem file
Expand source code Browse git
def example_stem_path(): """Get the path to an included stem file. Returns ------- filename : str Path to the stem file """ return pkg_resources.resource_filename( __name__, 'data/The Easton Ellises - Falcon 69.stem.mp4' )
def ffmpeg_version()
-
Returns the available ffmpeg version
Returns
version
:str
- version number as string
Expand source code Browse git
def ffmpeg_version(): """Returns the available ffmpeg version Returns ---------- version : str version number as string """ cmd = [ 'ffmpeg', '-version' ] output = sp.check_output(cmd) aac_codecs = [ x for x in output.splitlines() if "ffmpeg version " in str(x) ][0] hay = aac_codecs.decode('ascii') match = re.findall(r'ffmpeg version \w?(\d+\.)?(\d+\.)?(\*|\d+)', hay) if match: return "".join(match[0]) else: return None