все Python 3до 3.13Удалено из стандартной библиотекипонятие
sndhdr
удалённые модули
Определял формат звукового файла по заголовку. Удалён в Python 3.13 — для WAV читайте параметры модулем wave, иначе проверяйте сигнатуру байт.
Синтаксис
import sndhdr # до 3.13
sndhdr.what(файл) возвращал SndHeaders: формат ('wav', 'aiff', 'au' и другие), частоту, число каналов, кадров и разрядность. Убран по PEP 594 вместе с imghdr: список форматов устарел, а сопровождать модуль было некому. Как переписать: для WAV откройте файл wave.open() и возьмите getparams() — там те же частота, каналы и разрядность; формат по первым байтам узнаётся сравнением: b'RIFF' и b'WAVE' с 8-го байта у WAV, b'FORM' у AIFF, b'.snd' у AU. Сотни форматов знают filetype, puremagic и python-magic; пакет standard-sndhdr на PyPI возвращает модуль.
Примеры
# Python 3.13+
try:
import sndhdr
except ModuleNotFoundError as e:
print(type(e).__name__) # → ModuleNotFoundError
# Python 3.13+
import wave
with wave.open('a.wav', 'wb') as w:
w.setparams((1, 2, 8000, 0, 'NONE', 'not compressed'))
w.writeframes(bytes(200))
head = open('a.wav', 'rb').read(12)
print(head[:4] == b'RIFF' and head[8:12] == b'WAVE') # → True
with wave.open('a.wav', 'rb') as r:
print(r.getframerate(), r.getnchannels(), r.getnframes()) # → 8000 1 100
import sndhdr, wave
with wave.open('a.wav', 'wb') as w:
w.setparams((1, 2, 8000, 0, 'NONE', 'not compressed'))
w.writeframes(bytes(200))
info = sndhdr.what('a.wav')
print(info.filetype, info.framerate, info.nchannels) # → wav 8000 1
См. также
Частые ошибки
Открыть в полном глоссарииdocs.python.orgСообщить о неточности