Lines Matching refs:self

104     def __init__(self, file, align=True, bigendian=True, inclheader=False):
105 self.closed = False
106 self.align = align # whether to align to word (2-byte) boundaries
111 self.file = file
112 self.chunkname = file.read(4)
113 if len(self.chunkname) < 4:
116 self.chunksize = struct.unpack_from(strflag+'L', file.read(4))[0]
120 self.chunksize = self.chunksize - 8 # subtract header
121 self.size_read = 0
123 self.offset = self.file.tell()
125 self.seekable = False
127 self.seekable = True
129 def getname(self):
131 return self.chunkname
133 def close(self):
134 if not self.closed:
136 self.skip()
138 self.closed = True
140 def seek(self, pos, whence=0):
146 if self.closed:
148 if not self.seekable:
151 pos = pos + self.size_read
153 pos = pos + self.chunksize
154 if pos < 0 or pos > self.chunksize:
156 self.file.seek(self.offset + pos, 0)
157 self.size_read = pos
159 def tell(self):
160 if self.closed:
162 return self.size_read
164 def read(self, size=-1):
170 if self.closed:
172 if self.size_read >= self.chunksize:
175 size = self.chunksize - self.size_read
176 if size > self.chunksize - self.size_read:
177 size = self.chunksize - self.size_read
178 data = self.file.read(size)
179 self.size_read = self.size_read + len(data)
180 if self.size_read == self.chunksize and \
181 self.align and \
182 (self.chunksize & 1):
183 dummy = self.file.read(1)
184 self.size_read = self.size_read + len(dummy)
187 def skip(self):
194 if self.closed:
196 if self.seekable:
198 n = self.chunksize - self.size_read
200 if self.align and (self.chunksize & 1):
202 self.file.seek(n, 1)
203 self.size_read = self.size_read + n
207 while self.size_read < self.chunksize:
208 n = min(8192, self.chunksize - self.size_read)
209 dummy = self.read(n)
245 def initfp(self, file):
246 self._convert = None
247 self._soundpos = 0
248 self._file = _Chunk(file, bigendian = 0)
249 if self._file.getname() != b'RIFF':
251 if self._file.read(4) != b'WAVE':
253 self._fmt_chunk_read = 0
254 self._data_chunk = None
256 self._data_seek_needed = 1
258 chunk = _Chunk(self._file, bigendian = 0)
263 self._read_fmt_chunk(chunk)
264 self._fmt_chunk_read = 1
266 if not self._fmt_chunk_read:
268 self._data_chunk = chunk
269 self._nframes = chunk.chunksize // self._framesize
270 self._data_seek_needed = 0
273 if not self._fmt_chunk_read or not self._data_chunk:
276 def __init__(self, f):
277 self._i_opened_the_file = None
280 self._i_opened_the_file = f
283 self.initfp(f)
285 if self._i_opened_the_file:
289 def __del__(self):
290 self.close()
292 def __enter__(self):
293 return self
295 def __exit__(self, *args):
296 self.close()
301 def getfp(self):
302 return self._file
304 def rewind(self):
305 self._data_seek_needed = 1
306 self._soundpos = 0
308 def close(self):
309 self._file = None
310 file = self._i_opened_the_file
312 self._i_opened_the_file = None
315 def tell(self):
316 return self._soundpos
318 def getnchannels(self):
319 return self._nchannels
321 def getnframes(self):
322 return self._nframes
324 def getsampwidth(self):
325 return self._sampwidth
327 def getframerate(self):
328 return self._framerate
330 def getcomptype(self):
331 return self._comptype
333 def getcompname(self):
334 return self._compname
336 def getparams(self):
337 return _wave_params(self.getnchannels(), self.getsampwidth(),
338 self.getframerate(), self.getnframes(),
339 self.getcomptype(), self.getcompname())
341 def getmarkers(self):
344 def getmark(self, id):
347 def setpos(self, pos):
348 if pos < 0 or pos > self._nframes:
350 self._soundpos = pos
351 self._data_seek_needed = 1
353 def readframes(self, nframes):
354 if self._data_seek_needed:
355 self._data_chunk.seek(0, 0)
356 pos = self._soundpos * self._framesize
358 self._data_chunk.seek(pos, 0)
359 self._data_seek_needed = 0
362 data = self._data_chunk.read(nframes * self._framesize)
363 if self._sampwidth != 1 and sys.byteorder == 'big':
364 data = _byteswap(data, self._sampwidth)
365 if self._convert and data:
366 data = self._convert(data)
367 self._soundpos = self._soundpos + len(data) // (self._nchannels * self._sampwidth)
374 def _read_fmt_chunk(self, chunk):
376 wFormatTag, self._nchannels, self._framerate, dwAvgBytesPerSec, wBlockAlign = struct.unpack_from('<HHLLH', chunk.read(14))
384 self._sampwidth = (sampwidth + 7) // 8
385 if not self._sampwidth:
389 if not self._nchannels:
391 self._framesize = self._nchannels * self._sampwidth
392 self._comptype = 'NONE'
393 self._compname = 'not compressed'
422 def __init__(self, f):
423 self._i_opened_the_file = None
426 self._i_opened_the_file = f
428 self.initfp(f)
430 if self._i_opened_the_file:
434 def initfp(self, file):
435 self._file = file
436 self._convert = None
437 self._nchannels = 0
438 self._sampwidth = 0
439 self._framerate = 0
440 self._nframes = 0
441 self._nframeswritten = 0
442 self._datawritten = 0
443 self._datalength = 0
444 self._headerwritten = False
446 def __del__(self):
447 self.close()
449 def __enter__(self):
450 return self
452 def __exit__(self, *args):
453 self.close()
458 def setnchannels(self, nchannels):
459 if self._datawritten:
463 self._nchannels = nchannels
465 def getnchannels(self):
466 if not self._nchannels:
468 return self._nchannels
470 def setsampwidth(self, sampwidth):
471 if self._datawritten:
475 self._sampwidth = sampwidth
477 def getsampwidth(self):
478 if not self._sampwidth:
480 return self._sampwidth
482 def setframerate(self, framerate):
483 if self._datawritten:
487 self._framerate = int(round(framerate))
489 def getframerate(self):
490 if not self._framerate:
492 return self._framerate
494 def setnframes(self, nframes):
495 if self._datawritten:
497 self._nframes = nframes
499 def getnframes(self):
500 return self._nframeswritten
502 def setcomptype(self, comptype, compname):
503 if self._datawritten:
507 self._comptype = comptype
508 self._compname = compname
510 def getcomptype(self):
511 return self._comptype
513 def getcompname(self):
514 return self._compname
516 def setparams(self, params):
518 if self._datawritten:
520 self.setnchannels(nchannels)
521 self.setsampwidth(sampwidth)
522 self.setframerate(framerate)
523 self.setnframes(nframes)
524 self.setcomptype(comptype, compname)
526 def getparams(self):
527 if not self._nchannels or not self._sampwidth or not self._framerate:
529 return _wave_params(self._nchannels, self._sampwidth, self._framerate,
530 self._nframes, self._comptype, self._compname)
532 def setmark(self, id, pos, name):
535 def getmark(self, id):
538 def getmarkers(self):
541 def tell(self):
542 return self._nframeswritten
544 def writeframesraw(self, data):
547 self._ensure_header_written(len(data))
548 nframes = len(data) // (self._sampwidth * self._nchannels)
549 if self._convert:
550 data = self._convert(data)
551 if self._sampwidth != 1 and sys.byteorder == 'big':
552 data = _byteswap(data, self._sampwidth)
553 self._file.write(data)
554 self._datawritten += len(data)
555 self._nframeswritten = self._nframeswritten + nframes
557 def writeframes(self, data):
558 self.writeframesraw(data)
559 if self._datalength != self._datawritten:
560 self._patchheader()
562 def close(self):
564 if self._file:
565 self._ensure_header_written(0)
566 if self._datalength != self._datawritten:
567 self._patchheader()
568 self._file.flush()
570 self._file = None
571 file = self._i_opened_the_file
573 self._i_opened_the_file = None
580 def _ensure_header_written(self, datasize):
581 if not self._headerwritten:
582 if not self._nchannels:
584 if not self._sampwidth:
586 if not self._framerate:
588 self._write_header(datasize)
590 def _write_header(self, initlength):
591 assert not self._headerwritten
592 self._file.write(b'RIFF')
593 if not self._nframes:
594 self._nframes = initlength // (self._nchannels * self._sampwidth)
595 self._datalength = self._nframes * self._nchannels * self._sampwidth
597 self._form_length_pos = self._file.tell()
599 self._form_length_pos = None
600 self._file.write(struct.pack('<L4s4sLHHLLHH4s',
601 36 + self._datalength, b'WAVE', b'fmt ', 16,
602 WAVE_FORMAT_PCM, self._nchannels, self._framerate,
603 self._nchannels * self._framerate * self._sampwidth,
604 self._nchannels * self._sampwidth,
605 self._sampwidth * 8, b'data'))
606 if self._form_length_pos is not None:
607 self._data_length_pos = self._file.tell()
608 self._file.write(struct.pack('<L', self._datalength))
609 self._headerwritten = True
611 def _patchheader(self):
612 assert self._headerwritten
613 if self._datawritten == self._datalength:
615 curpos = self._file.tell()
616 self._file.seek(self._form_length_pos, 0)
617 self._file.write(struct.pack('<L', 36 + self._datawritten))
618 self._file.seek(self._data_length_pos, 0)
619 self._file.write(struct.pack('<L', self._datawritten))
620 self._file.seek(curpos, 0)
621 self._datalength = self._datawritten