404

[ Avaa Bypassed ]




Upload:

Command:

elspacio@52.14.37.165: ~ $
"""Routines to help recognizing sound files.

Function whathdr() recognizes various types of sound file headers.
It understands almost all headers that SOX can decode.

The return tuple contains the following items, in this order:
- file type (as SOX understands it)
- sampling rate (0 if unknown or hard to decode)
- number of channels (0 if unknown or hard to decode)
- number of frames in the file (-1 if unknown or hard to decode)
- number of bits/sample, or 'U' for U-LAW, or 'A' for A-LAW

If the file doesn't have a recognizable type, it returns None.
If the file can't be opened, OSError is raised.

To compute the total time, divide the number of frames by the
sampling rate (a frame contains a sample for each channel).

Function what() calls whathdr().  (It used to also use some
heuristics for raw data, but this doesn't work very well.)

Finally, the function test() is a simple main program that calls
what() for all files mentioned on the argument list.  For directory
arguments it calls what() for all files in that directory.  Default
argument is "." (testing all files in the current directory).  The
option -r tells it to recurse down directories found inside
explicitly given directories.
"""

import warnings

warnings._deprecated(__name__, remove=(3, 13))

# The file structure is top-down except that the test program and its
# subroutine come last.

__all__ = ['what', 'whathdr']

from collections import namedtuple

SndHeaders = namedtuple('SndHeaders',
                        'filetype framerate nchannels nframes sampwidth')

SndHeaders.filetype.__doc__ = ("""The value for type indicates the data type
and will be one of the strings 'aifc', 'aiff', 'au','hcom',
'sndr', 'sndt', 'voc', 'wav', '8svx', 'sb', 'ub', or 'ul'.""")
SndHeaders.framerate.__doc__ = ("""The sampling_rate will be either the actual
value or 0 if unknown or difficult to decode.""")
SndHeaders.nchannels.__doc__ = ("""The number of channels or 0 if it cannot be
determined or if the value is difficult to decode.""")
SndHeaders.nframes.__doc__ = ("""The value for frames will be either the number
of frames or -1.""")
SndHeaders.sampwidth.__doc__ = ("""Either the sample size in bits or
'A' for A-LAW or 'U' for u-LAW.""")

def what(filename):
    """Guess the type of a sound file."""
    res = whathdr(filename)
    return res


def whathdr(filename):
    """Recognize sound headers."""
    with open(filename, 'rb') as f:
        h = f.read(512)
        for tf in tests:
            res = tf(h, f)
            if res:
                return SndHeaders(*res)
        return None


#-----------------------------------#
# Subroutines per sound header type #
#-----------------------------------#

tests = []

def test_aifc(h, f):
    """AIFC and AIFF files"""
    with warnings.catch_warnings():
        warnings.simplefilter('ignore', category=DeprecationWarning)
        import aifc
    if not h.startswith(b'FORM'):
        return None
    if h[8:12] == b'AIFC':
        fmt = 'aifc'
    elif h[8:12] == b'AIFF':
        fmt = 'aiff'
    else:
        return None
    f.seek(0)
    try:
        a = aifc.open(f, 'r')
    except (EOFError, aifc.Error):
        return None
    return (fmt, a.getframerate(), a.getnchannels(),
            a.getnframes(), 8 * a.getsampwidth())

tests.append(test_aifc)


def test_au(h, f):
    """AU and SND files"""
    if h.startswith(b'.snd'):
        func = get_long_be
    elif h[:4] in (b'\0ds.', b'dns.'):
        func = get_long_le
    else:
        return None
    filetype = 'au'
    hdr_size = func(h[4:8])
    data_size = func(h[8:12])
    encoding = func(h[12:16])
    rate = func(h[16:20])
    nchannels = func(h[20:24])
    sample_size = 1 # default
    if encoding == 1:
        sample_bits = 'U'
    elif encoding == 2:
        sample_bits = 8
    elif encoding == 3:
        sample_bits = 16
        sample_size = 2
    else:
        sample_bits = '?'
    frame_size = sample_size * nchannels
    if frame_size:
        nframe = data_size / frame_size
    else:
        nframe = -1
    return filetype, rate, nchannels, nframe, sample_bits

tests.append(test_au)


def test_hcom(h, f):
    """HCOM file"""
    if h[65:69] != b'FSSD' or h[128:132] != b'HCOM':
        return None
    divisor = get_long_be(h[144:148])
    if divisor:
        rate = 22050 / divisor
    else:
        rate = 0
    return 'hcom', rate, 1, -1, 8

tests.append(test_hcom)


def test_voc(h, f):
    """VOC file"""
    if not h.startswith(b'Creative Voice File\032'):
        return None
    sbseek = get_short_le(h[20:22])
    rate = 0
    if 0 <= sbseek < 500 and h[sbseek] == 1:
        ratecode = 256 - h[sbseek+4]
        if ratecode:
            rate = int(1000000.0 / ratecode)
    return 'voc', rate, 1, -1, 8

tests.append(test_voc)


def test_wav(h, f):
    """WAV file"""
    import wave
    # 'RIFF' <len> 'WAVE' 'fmt ' <len>
    if not h.startswith(b'RIFF') or h[8:12] != b'WAVE' or h[12:16] != b'fmt ':
        return None
    f.seek(0)
    try:
        w = wave.open(f, 'r')
    except (EOFError, wave.Error):
        return None
    return ('wav', w.getframerate(), w.getnchannels(),
                   w.getnframes(), 8*w.getsampwidth())

tests.append(test_wav)


def test_8svx(h, f):
    """8SVX file"""
    if not h.startswith(b'FORM') or h[8:12] != b'8SVX':
        return None
    # Should decode it to get #channels -- assume always 1
    return '8svx', 0, 1, 0, 8

tests.append(test_8svx)


def test_sndt(h, f):
    """SNDT file"""
    if h.startswith(b'SOUND'):
        nsamples = get_long_le(h[8:12])
        rate = get_short_le(h[20:22])
        return 'sndt', rate, 1, nsamples, 8

tests.append(test_sndt)


def test_sndr(h, f):
    """SNDR file"""
    if h.startswith(b'\0\0'):
        rate = get_short_le(h[2:4])
        if 4000 <= rate <= 25000:
            return 'sndr', rate, 1, -1, 8

tests.append(test_sndr)


#-------------------------------------------#
# Subroutines to extract numbers from bytes #
#-------------------------------------------#

def get_long_be(b):
    return (b[0] << 24) | (b[1] << 16) | (b[2] << 8) | b[3]

def get_long_le(b):
    return (b[3] << 24) | (b[2] << 16) | (b[1] << 8) | b[0]

def get_short_be(b):
    return (b[0] << 8) | b[1]

def get_short_le(b):
    return (b[1] << 8) | b[0]


#--------------------#
# Small test program #
#--------------------#

def test():
    import sys
    recursive = 0
    if sys.argv[1:] and sys.argv[1] == '-r':
        del sys.argv[1:2]
        recursive = 1
    try:
        if sys.argv[1:]:
            testall(sys.argv[1:], recursive, 1)
        else:
            testall(['.'], recursive, 1)
    except KeyboardInterrupt:
        sys.stderr.write('\n[Interrupted]\n')
        sys.exit(1)

def testall(list, recursive, toplevel):
    import sys
    import os
    for filename in list:
        if os.path.isdir(filename):
            print(filename + '/:', end=' ')
            if recursive or toplevel:
                print('recursing down:')
                import glob
                names = glob.glob(os.path.join(glob.escape(filename), '*'))
                testall(names, recursive, 0)
            else:
                print('*** directory (use -r) ***')
        else:
            print(filename + ':', end=' ')
            sys.stdout.flush()
            try:
                print(what(filename))
            except OSError:
                print('*** not found ***')

if __name__ == '__main__':
    test()

Filemanager

Name Type Size Permission Actions
__pycache__ Folder 0755
asyncio Folder 0755
collections Folder 0755
concurrent Folder 0755
config-3.11-x86_64-linux-gnu Folder 0755
ctypes Folder 0755
curses Folder 0755
dbm Folder 0755
distutils Folder 0755
email Folder 0755
encodings Folder 0755
ensurepip Folder 0755
html Folder 0755
http Folder 0755
importlib Folder 0755
json Folder 0755
lib-dynload Folder 0755
lib2to3 Folder 0755
logging Folder 0755
multiprocessing Folder 0755
pydoc_data Folder 0755
re Folder 0755
site-packages Folder 0755
sqlite3 Folder 0755
tomllib Folder 0755
unittest Folder 0755
urllib Folder 0755
venv Folder 0755
wsgiref Folder 0755
xml Folder 0755
xmlrpc Folder 0755
zoneinfo Folder 0755
LICENSE.txt File 13.61 KB 0644
__future__.py File 5.1 KB 0644
__hello__.py File 227 B 0644
_aix_support.py File 3.31 KB 0644
_bootsubprocess.py File 2.61 KB 0644
_collections_abc.py File 29.49 KB 0644
_compat_pickle.py File 8.56 KB 0644
_compression.py File 5.55 KB 0644
_markupbase.py File 14.31 KB 0644
_osx_support.py File 21.51 KB 0644
_py_abc.py File 6.04 KB 0644
_pydecimal.py File 223.83 KB 0644
_pyio.py File 91.99 KB 0644
_sitebuiltins.py File 3.05 KB 0644
_strptime.py File 24.58 KB 0644
_sysconfigdata__linux_x86_64-linux-gnu.py File 57.28 KB 0644
_sysconfigdata_d_linux_x86_64-linux-gnu.py File 56.52 KB 0644
_threading_local.py File 7.05 KB 0644
_weakrefset.py File 5.75 KB 0644
abc.py File 6.38 KB 0644
aifc.py File 33.41 KB 0644
antigravity.py File 500 B 0644
argparse.py File 97.93 KB 0644
ast.py File 60 KB 0644
asynchat.py File 11.3 KB 0644
asyncore.py File 19.83 KB 0644
base64.py File 20.55 KB 0755
bdb.py File 31.7 KB 0644
bisect.py File 3.06 KB 0644
bz2.py File 11.57 KB 0644
cProfile.py File 6.21 KB 0755
calendar.py File 24.15 KB 0644
cgi.py File 33.63 KB 0755
cgitb.py File 12.13 KB 0644
chunk.py File 5.37 KB 0644
cmd.py File 14.52 KB 0644
code.py File 10.37 KB 0644
codecs.py File 36.28 KB 0644
codeop.py File 5.77 KB 0644
colorsys.py File 3.97 KB 0644
compileall.py File 19.78 KB 0644
configparser.py File 54.36 KB 0644
contextlib.py File 26.77 KB 0644
contextvars.py File 129 B 0644
copy.py File 8.48 KB 0644
copyreg.py File 7.5 KB 0644
crypt.py File 3.82 KB 0644
csv.py File 15.65 KB 0644
dataclasses.py File 57.1 KB 0644
datetime.py File 89.68 KB 0644
decimal.py File 320 B 0644
difflib.py File 81.36 KB 0644
dis.py File 28.23 KB 0644
doctest.py File 103.81 KB 0644
enum.py File 77.72 KB 0644
filecmp.py File 9.94 KB 0644
fileinput.py File 15.35 KB 0644
fnmatch.py File 5.86 KB 0644
fractions.py File 28 KB 0644
ftplib.py File 34.98 KB 0644
functools.py File 37.51 KB 0644
genericpath.py File 4.86 KB 0644
getopt.py File 7.31 KB 0644
getpass.py File 5.85 KB 0644
gettext.py File 20.82 KB 0644
glob.py File 8.53 KB 0644
graphlib.py File 9.43 KB 0644
gzip.py File 23.51 KB 0644
hashlib.py File 11.49 KB 0644
heapq.py File 22.48 KB 0644
hmac.py File 7.54 KB 0644
imaplib.py File 53.58 KB 0644
imghdr.py File 3.86 KB 0644
imp.py File 10.36 KB 0644
inspect.py File 120.53 KB 0644
io.py File 4.22 KB 0644
ipaddress.py File 76.52 KB 0644
keyword.py File 1.04 KB 0644
linecache.py File 5.52 KB 0644
locale.py File 77.24 KB 0644
lzma.py File 12.97 KB 0644
mailbox.py File 76.98 KB 0644
mailcap.py File 9.15 KB 0644
mimetypes.py File 22.42 KB 0644
modulefinder.py File 23.14 KB 0644
netrc.py File 6.77 KB 0644
nntplib.py File 40.12 KB 0644
ntpath.py File 29.51 KB 0644
nturl2path.py File 2.82 KB 0644
numbers.py File 10.11 KB 0644
opcode.py File 10.2 KB 0644
operator.py File 10.71 KB 0644
optparse.py File 58.95 KB 0644
os.py File 38.6 KB 0644
pathlib.py File 47.43 KB 0644
pdb.py File 62.68 KB 0755
pickle.py File 63.61 KB 0644
pickletools.py File 91.66 KB 0644
pipes.py File 8.77 KB 0644
pkgutil.py File 24.06 KB 0644
platform.py File 41.3 KB 0755
plistlib.py File 27.69 KB 0644
poplib.py File 14.84 KB 0644
posixpath.py File 16.61 KB 0644
pprint.py File 24.01 KB 0644
profile.py File 22.36 KB 0755
pstats.py File 28.67 KB 0644
pty.py File 6.17 KB 0644
py_compile.py File 7.65 KB 0644
pyclbr.py File 11.13 KB 0644
pydoc.py File 110.02 KB 0755
queue.py File 11.23 KB 0644
quopri.py File 7.11 KB 0755
random.py File 31.41 KB 0644
reprlib.py File 5.31 KB 0644
rlcompleter.py File 7.64 KB 0644
runpy.py File 12.85 KB 0644
sched.py File 6.2 KB 0644
secrets.py File 1.98 KB 0644
selectors.py File 19.21 KB 0644
shelve.py File 8.36 KB 0644
shlex.py File 13.18 KB 0644
shutil.py File 55.19 KB 0644
signal.py File 2.44 KB 0644
site.py File 22.45 KB 0644
smtpd.py File 30.44 KB 0755
smtplib.py File 44.37 KB 0755
sndhdr.py File 7.27 KB 0644
socket.py File 36.68 KB 0644
socketserver.py File 26.94 KB 0644
sre_compile.py File 231 B 0644
sre_constants.py File 232 B 0644
sre_parse.py File 229 B 0644
ssl.py File 53.03 KB 0644
stat.py File 5.36 KB 0644
statistics.py File 46.59 KB 0644
string.py File 11.51 KB 0644
stringprep.py File 12.61 KB 0644
struct.py File 257 B 0644
subprocess.py File 86.65 KB 0644
sunau.py File 18.05 KB 0644
symtable.py File 10.13 KB 0644
sysconfig.py File 29.6 KB 0644
tabnanny.py File 11.05 KB 0755
tarfile.py File 105.35 KB 0755
telnetlib.py File 22.75 KB 0644
tempfile.py File 31.13 KB 0644
textwrap.py File 19.26 KB 0644
this.py File 1003 B 0644
threading.py File 56.87 KB 0644
timeit.py File 13.21 KB 0755
token.py File 2.33 KB 0644
tokenize.py File 25.72 KB 0644
trace.py File 28.51 KB 0755
traceback.py File 39.6 KB 0644
tracemalloc.py File 17.62 KB 0644
tty.py File 879 B 0644
types.py File 9.83 KB 0644
typing.py File 118.12 KB 0644
uu.py File 7.17 KB 0644
uuid.py File 26.95 KB 0644
warnings.py File 20.62 KB 0644
wave.py File 21.31 KB 0644
weakref.py File 21.01 KB 0644
webbrowser.py File 24.56 KB 0755
xdrlib.py File 5.84 KB 0644
zipapp.py File 7.36 KB 0644
zipfile.py File 91.59 KB 0644
zipimport.py File 30.17 KB 0644