Найти - Пользователи
Полная версия: Звук в HEX виде
Начало » Центр помощи » Звук в HEX виде
1 2
Alex_Kutsan
Нужно представить звук в виде строки 16 ричных чисел. Как это делается когда я закидываю песню в НEX редактор.
Андрей Светлов
array.array?
Alex_Kutsan
а можно подробней? что значит array.array?

Вот я открыл музыкальный фаил

f = open('/media/Files/Alex Doc/Музыка/Реквием по мечте.mp3','r')

нашел вот код ддля записи опрделённого байта в фаил
f.seek(номер байта);
f.write(chr(свой новый байт))

но как прочитать определённый байт файла? и как точно узнать их количество?
Ferroman
Я найду ответы на эти вопросы с 4 запросов в гугл.
Андрей Светлов
Тема перемещена в “Питон для Чайников”.
И будет находится там до тех пор, пока вопросы не станут сложнее.
Alex_Kutsan
Простите за глупые вопросы.Наверно я разучился пользоватся гуглом. подскажите как сформулировать вопрос?
А пока вот до чего дошел
>>> f.seek(128)
>>> x = f.read(1)
>>> x
'\xd2' #это похоже на юникодовский символ
>>> print x.decode('utf-8')
Traceback (most recent call last):
File "<pyshell#29>", line 1, in <module>
print x.decode('utf-8')
File "/usr/lib/python2.6/encodings/utf_8.py", line 16, in decode
return codecs.utf_8_decode(input, errors, True)
UnicodeDecodeError: 'utf8' codec can't decode byte 0xd2 in position 0: unexpected end of data
что такое ‘\xd2’? и как мне его увидеть в 16 ричном виде?
igor.kaist
элементарно:
x='\xd2\x12\xab'
print x.encode('hex')
Только зачем вам это с mp3 нужно? wave вы все равно так не получите…
Alex_Kutsan
Долго расказывать зачем это нужно.
Но вот второй вопрос
x = ‘\xd2’
>>> x = hex(int(x.encode('hex'),16))
>>> x
'0xd2'

как полученое значение опять записать в виде ‘/xd2’ конечно можно просто заменить 0 на /
>>> x = ‘/’ + x
>>> x
'/xd2
но если заново произвести анологичную операцию
>>> x = hex(int(x.encode('hex'),16))
>>> x
'0x2f786432'

то окажется что прошлый икс вовсе не такой как сейчас.
Значит дело кодировок. Это Юникод как преобразовать?
>>> x
'\xd2'
>>> x = hex(int(x.encode('hex'),16))
>>> x = unicode(x) # так неподходит, так какже?
>>> x
u'0xd2'
igor.kaist
Кто вам сказал что это юникод вообще?
chr(int('\xd2'.encode('hex'),16))
ofigetitelno
:)
попробуйте перечитать комментарии сначала
я понимаю, это сложно, но попробуйте
если не получится посмотрите по ссылке
http://docs.python.org/library/array.html#module-array
там тоже всё ужасно сложно, но обратите внимание на array.fromfile
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB