Files
gtav-src/tools_ng/techart/dcc/motionbuilder2014/python/external/pydub/utils.py
T
2025-09-29 00:52:08 +02:00

79 lines
2.1 KiB
Python
Executable File

from __future__ import division
from tempfile import TemporaryFile
from math import log, ceil, floor
import sys
if sys.version_info >= (3, 0):
basestring = str
def _fd_or_path_or_tempfile(fd, mode='w+b', tempfile=True):
if fd is None and tempfile:
fd = TemporaryFile(mode=mode)
if isinstance(fd, basestring):
fd = open(fd, mode=mode)
return fd
def db_to_float(db):
"""
Converts the input db to a float, which represents the equivalent
ratio in power.
"""
db = float(db)
return 10 ** (db / 10)
def ratio_to_db(ratio, val2=None):
"""
Converts the input float to db, which represents the equivalent
to the ratio in power represented by the multiplier passed in.
"""
ratio = float(ratio)
# accept 2 values and use the ratio of val1 to val2
if val2 is not None:
ratio = ratio / val2
return 10 * log(ratio, 10)
def register_pydub_effect(fn, name=None):
"""
decorator for adding pydub effects to the AudioSegment objects.
example use:
@register_pydub_effect
def normalize(audio_segment):
...
or you can specify a name:
@register_pydub_effect("normalize")
def normalize_audio_segment(audio_segment):
...
"""
if isinstance(fn, basestring):
name = fn
return lambda fn: register_pydub_effect(fn, name)
if name is None:
name = fn.__name__
from .audio_segment import AudioSegment
setattr(AudioSegment, name, fn)
return fn
def make_chunks(audio_segment, chunk_length):
"""
Breaks an AudioSegment into chunks that are <chunk_length> milliseconds
long.
if chunk_length is 50 then you'll get a list of 50 millisecond long audio
segments back (except the last one, which can be shorter)
"""
number_of_chunks = ceil(len(audio_segment)/float(chunk_length))
return [audio_segment[i*chunk_length:(i+1)*chunk_length]
for i in range(int(number_of_chunks))]