/opt/imh/python3.13/lib/python3.13
NameSizeModeActions
asyncio/-0755rm
collections/-0755rm
concurrent/-0755rm
config-3.13-x86_64-linux-gnu/-0755rm
ctypes/-0755rm
curses/-0755rm
dbm/-0755rm
email/-0755rm
encodings/-0755rm
ensurepip/-0755rm
html/-0755rm
http/-0755rm
idlelib/-0755rm
importlib/-0755rm
json/-0755rm
lib-dynload/-0755rm
logging/-0755rm
multiprocessing/-0755rm
pathlib/-0755rm
pydoc_data/-0755rm
re/-0755rm
site-packages/-0755rm
sqlite3/-0755rm
sysconfig/-0755rm
tkinter/-0755rm
tomllib/-0755rm
turtledemo/-0755rm
unittest/-0755rm
urllib/-0755rm
venv/-0755rm
wsgiref/-0755rm
xml/-0755rm
xmlrpc/-0755rm
zipfile/-0755rm
zoneinfo/-0755rm
_pyrepl/-0755rm
__phello__/-0755rm
__pycache__/-0755rm
abc.py65380644editdlrm
antigravity.py5000644editdlrm
argparse.py1016610644editdlrm
ast.py653390644editdlrm
base64.py216300755editdlrm
bdb.py353430644editdlrm
bisect.py34230644editdlrm
bz2.py119690644editdlrm
calendar.py260770644editdlrm
cmd.py153160644editdlrm
code.py131700644editdlrm
codecs.py369780644editdlrm
codeop.py58280644editdlrm
colorsys.py40620644editdlrm
compileall.py206650644editdlrm
configparser.py538310644editdlrm
contextlib.py278010644editdlrm
contextvars.py1290644editdlrm
copy.py89750644editdlrm
copyreg.py76140644editdlrm
cProfile.py66240755editdlrm
csv.py191780644editdlrm
dataclasses.py645450644editdlrm
datetime.py2680644editdlrm
decimal.py27980644editdlrm
difflib.py833670644editdlrm
dis.py409620644editdlrm
doctest.py1094140644editdlrm
enum.py855930644editdlrm
filecmp.py106520644editdlrm
fileinput.py157170644editdlrm
fnmatch.py61800644editdlrm
fractions.py400900644editdlrm
ftplib.py347350644editdlrm
functools.py391230644editdlrm
genericpath.py62470644editdlrm
getopt.py74880644editdlrm
getpass.py62330644editdlrm
gettext.py215340644editdlrm
glob.py197200644editdlrm
graphlib.py96480644editdlrm
gzip.py246330644editdlrm
hashlib.py94460644editdlrm
heapq.py230240644editdlrm
hmac.py77160644editdlrm
imaplib.py540400644editdlrm
inspect.py1282760644editdlrm
io.py35820644editdlrm
ipaddress.py816350644editdlrm
keyword.py10730644editdlrm
LICENSE.txt138090644editdlrm
linecache.py72840644editdlrm
locale.py790330644editdlrm
lzma.py133990644editdlrm
mailbox.py816440644editdlrm
mimetypes.py238510644editdlrm
modulefinder.py237920644editdlrm
netrc.py70310644editdlrm
ntpath.py328060644editdlrm
nturl2path.py23740644editdlrm
numbers.py117690644editdlrm
opcode.py28250644editdlrm
operator.py109800644editdlrm
optparse.py603690644editdlrm
os.py416270644editdlrm
pdb.py909250755editdlrm
pickle.py669570644editdlrm
pickletools.py940520644editdlrm
pkgutil.py182810644editdlrm
platform.py473450755editdlrm
plistlib.py297940644editdlrm
poplib.py146040644editdlrm
posixpath.py183600644editdlrm
pprint.py241580644editdlrm
profile.py231400755editdlrm
pstats.py292960644editdlrm
pty.py61370644editdlrm
pyclbr.py113960644editdlrm
pydoc.py1100640755editdlrm
py_compile.py78370644editdlrm
queue.py134550644editdlrm
quopri.py71840755editdlrm
random.py370060644editdlrm
reprlib.py80680644editdlrm
rlcompleter.py79180644editdlrm
runpy.py128850644editdlrm
sched.py63510644editdlrm
secrets.py19840644editdlrm
selectors.py194570644editdlrm
shelve.py88100644editdlrm
shlex.py133530644editdlrm
shutil.py574630644editdlrm
signal.py24950644editdlrm
site.py255680644editdlrm
smtplib.py435320755editdlrm
socket.py377590644editdlrm
socketserver.py280650644editdlrm
sre_compile.py2310644editdlrm
sre_constants.py2320644editdlrm
sre_parse.py2290644editdlrm
ssl.py527060644editdlrm
stat.py61470644editdlrm
statistics.py618310644editdlrm
string.py117860644editdlrm
stringprep.py129170644editdlrm
struct.py2570644editdlrm
subprocess.py894860644editdlrm
symtable.py142070644editdlrm
tabnanny.py115320755editdlrm
tarfile.py1142390755editdlrm
tempfile.py324060644editdlrm
textwrap.py199390644editdlrm
this.py10030644editdlrm
threading.py553000644editdlrm
timeit.py134640755editdlrm
token.py24890644editdlrm
tokenize.py215680644editdlrm
trace.py297140755editdlrm
traceback.py665240644editdlrm
tracemalloc.py180470644editdlrm
tty.py20350644editdlrm
turtle.py1452150644editdlrm
types.py112070644editdlrm
typing.py1327180644editdlrm
uuid.py294580644editdlrm
warnings.py269480644editdlrm
wave.py232540644editdlrm
weakref.py215130644editdlrm
webbrowser.py242850755editdlrm
zipapp.py86180644editdlrm
zipimport.py328900644editdlrm
_aix_support.py40210644editdlrm
_android_support.py68950644editdlrm
_apple_support.py22560644editdlrm
_collections_abc.py322640644editdlrm
_colorize.py28480644editdlrm
_compat_pickle.py87350644editdlrm
_compression.py56810644editdlrm
_ios_support.py26720644editdlrm
_markupbase.py146530644editdlrm
_opcode_metadata.py92650644editdlrm
_osx_support.py220230644editdlrm
_pydatetime.py919830644editdlrm
_pydecimal.py2272860644editdlrm
_pyio.py936930644editdlrm
_pylong.py118300644editdlrm
_py_abc.py61890644editdlrm
_sitebuiltins.py31280644editdlrm
_strptime.py347340644editdlrm
_sysconfigdata__linux_x86_64-linux-gnu.py450210644editdlrm
_threading_local.py43630644editdlrm
_weakrefset.py58930644editdlrm
__future__.py52180644editdlrm
__hello__.py2270644editdlrm
Edit: /opt/imh/python3.13/lib/python3.13/wave.py (23254B)
"""Stuff to parse WAVE files. Usage. Reading WAVE files: f = wave.open(file, 'r') where file is either the name of a file or an open file pointer. The open file pointer must have methods read(), seek(), and close(). When the setpos() and rewind() methods are not used, the seek() method is not necessary. This returns an instance of a class with the following public methods: getnchannels() -- returns number of audio channels (1 for mono, 2 for stereo) getsampwidth() -- returns sample width in bytes getframerate() -- returns sampling frequency getnframes() -- returns number of audio frames getcomptype() -- returns compression type ('NONE' for linear samples) getcompname() -- returns human-readable version of compression type ('not compressed' linear samples) getparams() -- returns a namedtuple consisting of all of the above in the above order getmarkers() -- returns None (for compatibility with the old aifc module) getmark(id) -- raises an error since the mark does not exist (for compatibility with the old aifc module) readframes(n) -- returns at most n frames of audio rewind() -- rewind to the beginning of the audio stream setpos(pos) -- seek to the specified position tell() -- return the current position close() -- close the instance (make it unusable) The position returned by tell() and the position given to setpos() are compatible and have nothing to do with the actual position in the file. The close() method is called automatically when the class instance is destroyed. Writing WAVE files: f = wave.open(file, 'w') where file is either the name of a file or an open file pointer. The open file pointer must have methods write(), tell(), seek(), and close(). This returns an instance of a class with the following public methods: setnchannels(n) -- set the number of channels setsampwidth(n) -- set the sample width setframerate(n) -- set the frame rate setnframes(n) -- set the number of frames setcomptype(type, name) -- set the compression type and the human-readable compression type setparams(tuple) -- set all parameters at once tell() -- return current position in output file writeframesraw(data) -- write audio frames without patching up the file header writeframes(data) -- write audio frames and patch up the file header close() -- patch up the file header and close the output file You should set the parameters before the first writeframesraw or writeframes. The total number of frames does not need to be set, but when it is set to the correct value, the header does not have to be patched up. It is best to first set all parameters, perhaps possibly the compression type, and then write audio frames using writeframesraw. When all frames have been written, either call writeframes(b'') or close() to patch up the sizes in the header. The close() method is called automatically when the class instance is destroyed. """ from collections import namedtuple import builtins import struct import sys __all__ = ["open", "Error", "Wave_read", "Wave_write"] class Error(Exception): pass WAVE_FORMAT_PCM = 0x0001 WAVE_FORMAT_EXTENSIBLE = 0xFFFE # Derived from uuid.UUID("00000001-0000-0010-8000-00aa00389b71").bytes_le KSDATAFORMAT_SUBTYPE_PCM = b'\x01\x00\x00\x00\x00\x00\x10\x00\x80\x00\x00\xaa\x008\x9bq' _array_fmts = None, 'b', 'h', None, 'i' _wave_params = namedtuple('_wave_params', 'nchannels sampwidth framerate nframes comptype compname') def _byteswap(data, width): swapped_data = bytearray(len(data)) for i in range(0, len(data), width): for j in range(width): swapped_data[i + width - 1 - j] = data[i + j] return bytes(swapped_data) class _Chunk: def __init__(self, file, align=True, bigendian=True, inclheader=False): self.closed = False self.align = align # whether to align to word (2-byte) boundaries if bigendian: strflag = '>' else: strflag = '<' self.file = file self.chunkname = file.read(4) if len(self.chunkname) < 4: raise EOFError try: self.chunksize = struct.unpack_from(strflag+'L', file.read(4))[0] except struct.error: raise EOFError from None if inclheader: self.chunksize = self.chunksize - 8 # subtract header self.size_read = 0 try: self.offset = self.file.tell() except (AttributeError, OSError): self.seekable = False else: self.seekable = True def getname(self): """Return the name (ID) of the current chunk.""" return self.chunkname def close(self): if not self.closed: try: self.skip() finally: self.closed = True def seek(self, pos, whence=0): """Seek to specified position into the chunk. Default position is 0 (start of chunk). If the file is not seekable, this will result in an error. """ if self.closed: raise ValueError("I/O operation on closed file") if not self.seekable: raise OSError("cannot seek") if whence == 1: pos = pos + self.size_read elif whence == 2: pos = pos + self.chunksize if pos < 0 or pos > self.chunksize: raise RuntimeError self.file.seek(self.offset + pos, 0) self.size_read = pos def tell(self): if self.closed: raise ValueError("I/O operation on closed file") return self.size_read def read(self, size=-1): """Read at most size bytes from the chunk. If size is omitted or negative, read until the end of the chunk. """ if self.closed: raise ValueError("I/O operation on closed file") if self.size_read >= self.chunksize: return b'' if size < 0: size = self.chunksize - self.size_read if size > self.chunksize - self.size_read: size = self.chunksize - self.size_read data = self.file.read(size) self.size_read = self.size_read + len(data) if self.size_read == self.chunksize and \ self.align and \ (self.chunksize & 1): dummy = self.file.read(1) self.size_read = self.size_read + len(dummy) return data def skip(self): """Skip the rest of the chunk. If you are not interested in the contents of the chunk, this method should be called so that the file points to the start of the next chunk. """ if self.closed: raise ValueError("I/O operation on closed file") if self.seekable: try: n = self.chunksize - self.size_read # maybe fix alignment if self.align and (self.chunksize & 1): n = n + 1 self.file.seek(n, 1) self.size_read = self.size_read + n return except OSError: pass while self.size_read < self.chunksize: n = min(8192, self.chunksize - self.size_read) dummy = self.read(n) if not dummy: raise EOFError class Wave_read: """Variables used in this class: These variables are available to the user though appropriate methods of this class: _file -- the open file with methods read(), close(), and seek() set through the __init__() method _nchannels -- the number of audio channels available through the getnchannels() method _nframes -- the number of audio frames available through the getnframes() method _sampwidth -- the number of bytes per audio sample available through the getsampwidth() method _framerate -- the sampling frequency available through the getframerate() method _comptype -- the AIFF-C compression type ('NONE' if AIFF) available through the getcomptype() method _compname -- the human-readable AIFF-C compression type available through the getcomptype() method _soundpos -- the position in the audio stream available through the tell() method, set through the setpos() method These variables are used internally only: _fmt_chunk_read -- 1 iff the FMT chunk has been read _data_seek_needed -- 1 iff positioned correctly in audio file for readframes() _data_chunk -- instantiation of a chunk class for the DATA chunk _framesize -- size of one frame in the file """ def initfp(self, file): self._convert = None self._soundpos = 0 self._file = _Chunk(file, bigendian = 0) if self._file.getname() != b'RIFF': raise Error('file does not start with RIFF id') if self._file.read(4) != b'WAVE': raise Error('not a WAVE file') self._fmt_chunk_read = 0 self._data_chunk = None while 1: self._data_seek_needed = 1 try: chunk = _Chunk(self._file, bigendian = 0) except EOFError: break chunkname = chunk.getname() if chunkname == b'fmt ': self._read_fmt_chunk(chunk) self._fmt_chunk_read = 1 elif chunkname == b'data': if not self._fmt_chunk_read: raise Error('data chunk before fmt chunk') self._data_chunk = chunk self._nframes = chunk.chunksize // self._framesize self._data_seek_needed = 0 break chunk.skip() if not self._fmt_chunk_read or not self._data_chunk: raise Error('fmt chunk and/or data chunk missing') def __init__(self, f): self._i_opened_the_file = None if isinstance(f, str): f = builtins.open(f, 'rb') self._i_opened_the_file = f # else, assume it is an open file object already try: self.initfp(f) except: if self._i_opened_the_file: f.close() raise def __del__(self): self.close() def __enter__(self): return self def __exit__(self, *args): self.close() # # User visible methods. # def getfp(self): return self._file def rewind(self): self._data_seek_needed = 1 self._soundpos = 0 def close(self): self._file = None file = self._i_opened_the_file if file: self._i_opened_the_file = None file.close() def tell(self): return self._soundpos def getnchannels(self): return self._nchannels def getnframes(self): return self._nframes def getsampwidth(self): return self._sampwidth def getframerate(self): return self._framerate def getcomptype(self): return self._comptype def getcompname(self): return self._compname def getparams(self): return _wave_params(self.getnchannels(), self.getsampwidth(), self.getframerate(), self.getnframes(), self.getcomptype(), self.getcompname()) def getmarkers(self): import warnings warnings._deprecated("Wave_read.getmarkers", remove=(3, 15)) return None def getmark(self, id): import warnings warnings._deprecated("Wave_read.getmark", remove=(3, 15)) raise Error('no marks') def setpos(self, pos): if pos < 0 or pos > self._nframes: raise Error('position not in range') self._soundpos = pos self._data_seek_needed = 1 def readframes(self, nframes): if self._data_seek_needed: self._data_chunk.seek(0, 0) pos = self._soundpos * self._framesize if pos: self._data_chunk.seek(pos, 0) self._data_seek_needed = 0 if nframes == 0: return b'' data = self._data_chunk.read(nframes * self._framesize) if self._sampwidth != 1 and sys.byteorder == 'big': data = _byteswap(data, self._sampwidth) if self._convert and data: data = self._convert(data) self._soundpos = self._soundpos + len(data) // (self._nchannels * self._sampwidth) return data # # Internal methods. # def _read_fmt_chunk(self, chunk): try: wFormatTag, self._nchannels, self._framerate, dwAvgBytesPerSec, wBlockAlign = struct.unpack_from(' 4: raise Error('bad sample width') self._sampwidth = sampwidth def getsampwidth(self): if not self._sampwidth: raise Error('sample width not set') return self._sampwidth def setframerate(self, framerate): if self._datawritten: raise Error('cannot change parameters after starting to write') if framerate <= 0: raise Error('bad frame rate') self._framerate = int(round(framerate)) def getframerate(self): if not self._framerate: raise Error('frame rate not set') return self._framerate def setnframes(self, nframes): if self._datawritten: raise Error('cannot change parameters after starting to write') self._nframes = nframes def getnframes(self): return self._nframeswritten def setcomptype(self, comptype, compname): if self._datawritten: raise Error('cannot change parameters after starting to write') if comptype not in ('NONE',): raise Error('unsupported compression type') self._comptype = comptype self._compname = compname def getcomptype(self): return self._comptype def getcompname(self): return self._compname def setparams(self, params): nchannels, sampwidth, framerate, nframes, comptype, compname = params if self._datawritten: raise Error('cannot change parameters after starting to write') self.setnchannels(nchannels) self.setsampwidth(sampwidth) self.setframerate(framerate) self.setnframes(nframes) self.setcomptype(comptype, compname) def getparams(self): if not self._nchannels or not self._sampwidth or not self._framerate: raise Error('not all parameters set') return _wave_params(self._nchannels, self._sampwidth, self._framerate, self._nframes, self._comptype, self._compname) def setmark(self, id, pos, name): import warnings warnings._deprecated("Wave_write.setmark", remove=(3, 15)) raise Error('setmark() not supported') def getmark(self, id): import warnings warnings._deprecated("Wave_write.getmark", remove=(3, 15)) raise Error('no marks') def getmarkers(self): import warnings warnings._deprecated("Wave_write.getmarkers", remove=(3, 15)) return None def tell(self): return self._nframeswritten def writeframesraw(self, data): if not isinstance(data, (bytes, bytearray)): data = memoryview(data).cast('B') self._ensure_header_written(len(data)) nframes = len(data) // (self._sampwidth * self._nchannels) if self._convert: data = self._convert(data) if self._sampwidth != 1 and sys.byteorder == 'big': data = _byteswap(data, self._sampwidth) self._file.write(data) self._datawritten += len(data) self._nframeswritten = self._nframeswritten + nframes def writeframes(self, data): self.writeframesraw(data) if self._datalength != self._datawritten: self._patchheader() def close(self): try: if self._file: self._ensure_header_written(0) if self._datalength != self._datawritten: self._patchheader() self._file.flush() finally: self._file = None file = self._i_opened_the_file if file: self._i_opened_the_file = None file.close() # # Internal methods. # def _ensure_header_written(self, datasize): if not self._headerwritten: if not self._nchannels: raise Error('# channels not specified') if not self._sampwidth: raise Error('sample width not specified') if not self._framerate: raise Error('sampling rate not specified') self._write_header(datasize) def _write_header(self, initlength): assert not self._headerwritten self._file.write(b'RIFF') if not self._nframes: self._nframes = initlength // (self._nchannels * self._sampwidth) self._datalength = self._nframes * self._nchannels * self._sampwidth try: self._form_length_pos = self._file.tell() except (AttributeError, OSError): self._form_length_pos = None self._file.write(struct.pack('