Guido van Rossum | 8307443 | 1992-12-14 15:06:32 +0000 | [diff] [blame^] | 1 | # Compare different audio compression schemes. |
| 2 | # |
| 3 | # This copies mono audio data from the input port to the output port, |
| 4 | # and puts up a window with 4 toggle buttons: |
| 5 | # |
| 6 | # uLAW : convert the data to uLAW and back |
| 7 | # ADPCM : convert the data to ADPCM and back |
| 8 | # Difference : make only the difference between the converted and the |
| 9 | # original data audible |
| 10 | # Exit : quit from the program |
| 11 | |
| 12 | import fl |
| 13 | import FL |
| 14 | import flp |
| 15 | import al |
| 16 | import AL |
| 17 | import audioop |
| 18 | import sys |
| 19 | |
| 20 | class Cmpaf(): |
| 21 | def init(self): |
| 22 | parsetree = flp.parse_form('cmpaf_form','form') |
| 23 | flp.create_full_form(self, parsetree) |
| 24 | c = al.newconfig() |
| 25 | c.setchannels(AL.MONO) |
| 26 | c.setqueuesize(1800) |
| 27 | self.iport = al.openport('cmpaf','r', c) |
| 28 | self.oport = al.openport('cmpaf','w', c) |
| 29 | self.do_adpcm = self.do_ulaw = self.do_diff = 0 |
| 30 | self.acstate = None |
| 31 | self.form.show_form(FL.PLACE_SIZE, 1, 'compare audio formats') |
| 32 | return self |
| 33 | |
| 34 | def run(self): |
| 35 | while 1: |
| 36 | olddata = data = self.iport.readsamps(600) |
| 37 | if self.do_ulaw: |
| 38 | data = audioop.lin2ulaw(data, 2) |
| 39 | data = audioop.ulaw2lin(data, 2) |
| 40 | if self.do_adpcm: |
| 41 | data, nacstate = audioop.lin2adpcm(data, 2, \ |
| 42 | self.acstate) |
| 43 | data, dummy = audioop.adpcm2lin(data, 2, \ |
| 44 | self.acstate) |
| 45 | self.acstate = nacstate |
| 46 | if self.do_diff: |
| 47 | olddata = audioop.mul(olddata, 2, -1) |
| 48 | data = audioop.add(olddata, data, 2) |
| 49 | self.oport.writesamps(data) |
| 50 | fl.check_forms() |
| 51 | |
| 52 | def cb_exit(self, *args): |
| 53 | sys.exit(0) |
| 54 | |
| 55 | def cb_adpcm(self, obj, val): |
| 56 | self.do_adpcm = obj.get_button() |
| 57 | |
| 58 | def cb_ulaw(self, obj, val): |
| 59 | self.do_ulaw = obj.get_button() |
| 60 | |
| 61 | def cb_diff(self, obj, val): |
| 62 | self.do_diff = obj.get_button() |
| 63 | |
| 64 | cmpaf = Cmpaf().init() |
| 65 | cmpaf.run() |