from datetime import timedelta
import numpy as np
from dspy import config
[docs]def rechannel(buf, in_channels, out_channels):
if in_channels > 2 or out_channels > 2:
raise NotImplemented()
if in_channels == out_channels:
return buf
num_frames = len(buf)/in_channels
output = np.zeros(num_frames*out_channels, dtype=np.float32)
if in_channels < out_channels:
in_channel = 0
for out_channel in range(out_channels):
output[out_channel::out_channels] += buf[in_channel::in_channels]
in_channel = (in_channel + 1) % in_channels
elif in_channels > out_channels:
out_channel = 0
for in_channel in range(in_channels):
output[out_channel::out_channels] += buf[in_channel::in_channels]
out_channel = (out_channel + 1) % out_channels
return output
[docs]def t2f(t):
if isinstance(t, timedelta):
return int(t.total_seconds() * config['SAMPLING_RATE'])
if isinstance(t, float):
return int(t * config['SAMPLING_RATE'])
if isinstance(t, int):
return t
[docs]def pitch_to_frequency(pitch):
return 440 * 2 ** ((pitch - 69)/12.)