Что возвращается wave.readframes? - PullRequest
10 голосов
/ 14 января 2010

Я присваиваю значение переменной x следующим образом:

import wave
w = wave.open('/usr/share/sounds/ekiga/voicemail.wav', 'r')
x = w.readframes(1)

Когда я печатаю x, я получаю:

'\x1e\x00'

Итак, x получил значение. Но что это? Это шестнадцатеричное? type(x) и type(x[0]) скажи мне, что x и x[0] строки Кто-нибудь может сказать мне, как я должен интерпретировать эти строки? Могу ли я преобразовать их в целое число?

Ответы [ 4 ]

7 голосов
/ 14 января 2010

Интерактивный переводчик отображает непечатные символы, подобные этому. Строка содержит два байта, 0x1E и 0x00. Вы можете преобразовать его в целое число (WORD-size) с помощью struct.unpack("<H", x) (little endian!).

1 голос
/ 14 января 2010

Это двухбайтовая строка:

>>> x='\x1e\x00'
>>> map(ord, list(x))
[30, 0]
>>> [ord(i) for i in x]
[30, 0]
0 голосов
/ 17 ноября 2013

Да, это в шестнадцатеричном формате, но что это означает, зависит от других выходных данных файла wav, например. ширина выборки и количество каналов. Ваши данные могут быть прочитаны двумя способами: 2 канала и шириной сэмпла 1 байт (стереозвук) или 1 каналом и шириной сэмпла 2 байт (монозвук) Используйте x.getparams(): первое число будет количеством каналов, а второе - шириной выборки.

Эта ссылка объясняет это очень хорошо.

0 голосов
/ 14 января 2010

Эта строка представляет байты. Я думаю, вы можете превратить их в целое число с помощью пакета struct , который позволяет интерпретировать строки байтов.

...