# HG changeset patch # User Amine Sehili # Date 1548965529 -3600 # Node ID 6c81dac04c030defce813ac30e5402f85b8d3a9e # Parent 97be2ee272b2c617b4c7adbb043cb5cd8e737aa8 Add _mix_audio_channels function diff -r 97be2ee272b2 -r 6c81dac04c03 auditok/io.py --- a/auditok/io.py Wed Jan 30 20:24:45 2019 +0100 +++ b/auditok/io.py Thu Jan 31 21:12:09 2019 +0100 @@ -27,6 +27,7 @@ import os import sys import wave +import audioop from array import array if sys.version_info >= (3, 0): @@ -166,6 +167,22 @@ return a.tostring() +def _mix_audio_channels(data, channels, sample_width): + if channels == 1: + return data + if channels == 2: + return audioop.tomono(data, sample_width, 0.5, 0.5) + fmt = DATA_FORMAT[sample_width] + buffer = array(fmt, data) + mono_channels = [ + array(fmt, buffer[ch::channels]) for ch in range(channels) + ] + avg_arr = array( + fmt, (sum(samples) // channels for samples in zip(*mono_channels)) + ) + return _array_to_bytes(avg_arr) + + def _extract_selected_channel(data, channels, sample_width, use_channel): if use_channel == "mix": return _mix_audio_channels(data, channels, sample_width)