65 lines
1.6 KiB
Python
Executable File
65 lines
1.6 KiB
Python
Executable File
# Compare different audio compression schemes.
|
|
#
|
|
# This copies mono audio data from the input port to the output port,
|
|
# and puts up a window with 4 toggle buttons:
|
|
#
|
|
# uLAW : convert the data to uLAW and back
|
|
# ADPCM : convert the data to ADPCM and back
|
|
# Difference : make only the difference between the converted and the
|
|
# original data audible
|
|
# Exit : quit from the program
|
|
|
|
import fl
|
|
import FL
|
|
import flp
|
|
import al
|
|
import AL
|
|
import audioop
|
|
import sys
|
|
|
|
class Cmpaf:
|
|
def __init__(self):
|
|
parsetree = flp.parse_form('cmpaf_form','form')
|
|
flp.create_full_form(self, parsetree)
|
|
c = al.newconfig()
|
|
c.setchannels(AL.MONO)
|
|
c.setqueuesize(1800)
|
|
self.iport = al.openport('cmpaf','r', c)
|
|
self.oport = al.openport('cmpaf','w', c)
|
|
self.do_adpcm = self.do_ulaw = self.do_diff = 0
|
|
self.acstate = None
|
|
self.form.show_form(FL.PLACE_SIZE, 1, 'compare audio formats')
|
|
|
|
def run(self):
|
|
while 1:
|
|
olddata = data = self.iport.readsamps(600)
|
|
if self.do_ulaw:
|
|
data = audioop.lin2ulaw(data, 2)
|
|
data = audioop.ulaw2lin(data, 2)
|
|
if self.do_adpcm:
|
|
data, nacstate = audioop.lin2adpcm(data, 2, \
|
|
self.acstate)
|
|
data, dummy = audioop.adpcm2lin(data, 2, \
|
|
self.acstate)
|
|
self.acstate = nacstate
|
|
if self.do_diff:
|
|
olddata = audioop.mul(olddata, 2, -1)
|
|
data = audioop.add(olddata, data, 2)
|
|
self.oport.writesamps(data)
|
|
fl.check_forms()
|
|
|
|
def cb_exit(self, *args):
|
|
sys.exit(0)
|
|
|
|
def cb_adpcm(self, obj, val):
|
|
self.do_adpcm = obj.get_button()
|
|
|
|
def cb_ulaw(self, obj, val):
|
|
self.do_ulaw = obj.get_button()
|
|
|
|
def cb_diff(self, obj, val):
|
|
self.do_diff = obj.get_button()
|
|
|
|
cmpaf = Cmpaf()
|
|
cmpaf.run()
|