Handle mono conversion within `pcm_to_np()`
This commit is contained in:
parent
be5f9627da
commit
c152be2343
|
@ -579,15 +579,23 @@ def get_dtype(audio_format):
|
||||||
|
|
||||||
|
|
||||||
def pcm_to_np(pcm_data, audio_format=DEFAULT_FORMAT):
|
def pcm_to_np(pcm_data, audio_format=DEFAULT_FORMAT):
|
||||||
|
"""
|
||||||
|
Converts PCM data (e.g. read from a wavfile) into a mono numpy column vector
|
||||||
|
with values in the range [0.0, 1.0].
|
||||||
|
"""
|
||||||
# Handles both mono and stero audio
|
# Handles both mono and stero audio
|
||||||
dtype = get_dtype(audio_format)
|
dtype = get_dtype(audio_format)
|
||||||
samples = np.frombuffer(pcm_data, dtype=dtype)
|
samples = np.frombuffer(pcm_data, dtype=dtype)
|
||||||
|
|
||||||
|
# Read interleaved channels
|
||||||
|
nchannels = audio_format.channels
|
||||||
|
samples = samples.reshape((int(len(samples)/nchannels), nchannels))
|
||||||
|
|
||||||
|
# Convert to 0.0-1.0 range
|
||||||
samples = samples.astype(np.float32) / np.iinfo(dtype).max
|
samples = samples.astype(np.float32) / np.iinfo(dtype).max
|
||||||
|
|
||||||
if audio_format.channels == 1:
|
# Average multi-channel clips into mono and turn into column vector
|
||||||
return np.expand_dims(samples, axis=1)
|
return np.expand_dims(np.mean(samples, axis=1), axis=1)
|
||||||
else:
|
|
||||||
return samples
|
|
||||||
|
|
||||||
|
|
||||||
def np_to_pcm(np_data, audio_format=DEFAULT_FORMAT):
|
def np_to_pcm(np_data, audio_format=DEFAULT_FORMAT):
|
||||||
|
|
Loading…
Reference in New Issue