re-structure client audio conversion

This commit is contained in:
Jakob Ketterl 2021-08-12 18:01:03 +02:00
parent c3d393252b
commit be6f533437

View File

@ -1,16 +1,18 @@
from csdr.chain import Chain from csdr.chain import Chain
from pycsdr.modules import AudioResampler, Convert, AdpcmEncoder from pycsdr.modules import AudioResampler, Convert, AdpcmEncoder, Limit
from pycsdr.types import Format from pycsdr.types import Format
class ClientAudioChain(Chain): class ClientAudioChain(Chain):
def __init__(self, format: Format, inputRate: int, clientRate: int, compression: str): def __init__(self, format: Format, inputRate: int, clientRate: int, compression: str):
workers = [] workers = []
if inputRate != clientRate:
# we only have an audio resampler for float ATM so if we need to resample, we need to convert
if format != Format.FLOAT: if format != Format.FLOAT:
workers += [Convert(format, Format.FLOAT)] workers += [Convert(format, Format.FLOAT)]
if inputRate != clientRate: workers += [AudioResampler(inputRate, clientRate), Limit(), Convert(Format.FLOAT, Format.SHORT)]
workers += [AudioResampler(inputRate, clientRate)] elif format != Format.SHORT:
workers += [Convert(Format.FLOAT, Format.SHORT)] workers += [Convert(format, Format.SHORT)]
if compression == "adpcm": if compression == "adpcm":
workers += [AdpcmEncoder(sync=True)] workers += [AdpcmEncoder(sync=True)]
super().__init__(*workers) super().__init__(*workers)