Форум сайта python.su
Понадобилось работать с wav файлами, причем на pure python.
Задача: читать два файла, смикшировать их, и записать результат тоже в wav. Работать это будет на относительно слабом железе. Си расширения недоступны.
Судя по результатам profile, основной тормоз происходит не на IO, а на строчку,которая работает со списком байт, полученных с помощью struct:
s=struct.unpack('1024B',wave.readframes(1024))
s2=struct.unpack('1024B',wave2.readframes(1024))
out_wave.writeframes(struct.pack('1024B',*[((x+y)//2) for x,y in zip(s,s2)]))
Офлайн
можно попробовать убрать лишний zip, что-то типа этого:
slen = max(len(s),len(s2))
[((s[x]+s2[x])//2) for x in xrange(slen)]
Отредактировано (Фев. 17, 2010 13:17:45)
Офлайн
На array немного быстрее
s = array.array('B')
s2 = array.array('B')
res = array.array('B')
s.fromstring(wave.readframes(1024))
s2.fromstring(wave2.readframes(1024))
res.extend((x+y)//2 for x, y in izip(s, s2))
out_wave.writeframes(res.tostring())
Офлайн
o7412369815963, спасибо… что то я ступил :)
Slava, пробовал уже вариант с array, получается медленнее процентов на 10 :(
Офлайн
o7412369815963тогда уж min, иначе ведь index out of range получить можноslen = max(len(s),len(s2))
Офлайн
pyuserда, точно :)o7412369815963тогда уж min, иначе ведь index out of range получить можноslen = max(len(s),len(s2))
Офлайн