Un oscilloscope dans mon terminal

Un jour j'ai fait de la musique

Je vous en parle un autre jour.

Tout ce qui compte c'est que j'ai fait ce script qui affiche dans votre terminal les valeurs des octets d'un fichier un par un.

Si c'est, par exemple un fichier .pcm (où l'on dessine une onde sonore avec des octets entre 0x00 et 0xff), ça dessine une sinusoïdale.

Ça ne sert pas à grand chose, sauf si comme moi vous générez des fichiers sons.

Le voici :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#!/usr/bin/python2.7
# -*- coding: utf-8 -*-

import os
import sys
import time

def sane(i):
  if ord(i) < 127 and ord(i) > 32: # test d'affichabilité du caractère
    return i
  return "."

def scroll(filename):
  buffr = "_"
  try:
    ofi = open(filename,'r')
    while buffr != "":
      buffr = ofi.read(0x100)
      for i in buffr:
        print " "*int((columns)*(1.0*ord(i)/0x100))+sane(i)
  except KeyboardInterrupt:
    ofi.close()
  except:
    ofi.close()
    print "oups"
    print e

def scrollfull(filename):
  with open(filename,'r') as ofi:
    data = ofi.read()
    ofi.close()
  for i in data:
    print " "*int((columns)*(1.0*ord(i)/0x100))+sane(i)

if __name__ == "__main__":
  if len(sys.argv) == 3:
    # ./script.py file width
    columns = int(sys.argv[2])
    # ./script.py file 
  else:
    columns = int(os.popen('stty size', 'r').read().split()[1])
  try:
    scrollfull(sys.argv[1])
  except KeyboardInterrupt:
    pass # mouhaha
  except Exception as e:
    print e
    print "oups oups"

blogroll

social