| 45 | |
| 46 | |
| 47 | class DecoderPipeline(Pipeline): |
| 48 | def __init__(self): |
| 49 | super().__init__( |
| 50 | batch_size=8, |
| 51 | num_threads=3, |
| 52 | device_id=0, |
| 53 | exec_async=True, |
| 54 | exec_pipelined=True, |
| 55 | output_dtype=[ |
| 56 | types.INT16, |
| 57 | types.INT16, |
| 58 | types.INT16, |
| 59 | types.FLOAT, |
| 60 | types.FLOAT, |
| 61 | types.FLOAT, |
| 62 | types.FLOAT, |
| 63 | types.FLOAT, |
| 64 | ], |
| 65 | output_ndim=[2, 2, 1, 1, 0, 0, 0, 0], |
| 66 | ) |
| 67 | self.file_source = ops.ExternalSource() |
| 68 | self.plain_decoder = ops.decoders.Audio(dtype=types.INT16) |
| 69 | self.resampling_decoder = ops.decoders.Audio(sample_rate=rate1, dtype=types.INT16) |
| 70 | self.downmixing_decoder = ops.decoders.Audio(downmix=True, dtype=types.INT16) |
| 71 | self.resampling_downmixing_decoder = ops.decoders.Audio( |
| 72 | sample_rate=rate2, downmix=True, quality=50, dtype=types.FLOAT |
| 73 | ) |
| 74 | |
| 75 | def define_graph(self): |
| 76 | self.raw_file = self.file_source() |
| 77 | dec_plain, rates_plain = self.plain_decoder(self.raw_file) |
| 78 | dec_res, rates_res = self.resampling_decoder(self.raw_file) |
| 79 | dec_mix, rates_mix = self.downmixing_decoder(self.raw_file) |
| 80 | dec_res_mix, rates_res_mix = self.resampling_downmixing_decoder(self.raw_file) |
| 81 | out = [ |
| 82 | dec_plain, |
| 83 | dec_res, |
| 84 | dec_mix, |
| 85 | dec_res_mix, |
| 86 | rates_plain, |
| 87 | rates_res, |
| 88 | rates_mix, |
| 89 | rates_res_mix, |
| 90 | ] |
| 91 | return out |
| 92 | |
| 93 | def iter_setup(self): |
| 94 | list = [] |
| 95 | for i in range(self.batch_size): |
| 96 | idx = i % len(names) |
| 97 | with open(names[idx], mode="rb") as f: |
| 98 | list.append(np.array(bytearray(f.read()), np.uint8)) |
| 99 | self.feed_input(self.raw_file, list) |
| 100 | |
| 101 | |
| 102 | @attr("sanitizer_skip") |
no outgoing calls