什么是Python字节串?
我所能找到的只是关于如何编码为bytestring或解码为ascii或的主题utf-8.我试图了解它是如何工作的.在普通的ASCII字符串中,它是一个数组或字符列表,每个字符代表一个0-255的ASCII值,这就是你知道数字代表什么字符的方式.在Unicode中,它是字符的8或16字节表示,告诉您它是什么字符.
那么什么是字节串?Python如何知道哪些字符代表什么?它是如何在引擎盖下工作的?既然你可以打印甚至返回这些字符串,它会显示字符串表示,我不太明白......
好的,所以我的观点肯定会在这里错过.我被告知这是一个不可变的字节序列,没有任何特殊的解释.
一个字节序列..好吧,让我们说一个字节:
'a'.encode()返回b'a'.
很简单.为什么我能看到一个?
说我得到的ASCII值一个,这样做:
printf "%d" "'a"
它返回97.好的,好的,ASCII字符的整数值a.如果我们将97解释为ASCII,比如在C中char,那么我们得到这封信a.很公平.如果我们将字节表示转换为位,我们得到:
01100001
2 ^ 0 + 2 ^ 5 + 2 ^ 6 = 97.凉.
那么为什么要'a'.encode()返回b'a'而不是01100001??
如果它没有特定的解释,它不应该返回类似的东西b'01100001'吗?
它似乎像ASCII一样解释它.
有人提到它调用__repr__了bytestring,所以它以人类可读的形式显示.但是,即使我做了类似的事情:
with open('testbytestring.txt', 'wb') as f:
f.write(b'helloworld') …Run Code Online (Sandbox Code Playgroud) 我有关于使用Python进行音频数据分析的作业.我想知道是否有任何好的模块可供我从mp3文件中提取原始数据.我的意思是原始数据,而不是元数据,id3标签.
我知道如何使用该wave模块来处理.wav文件.我可以readframes获取原始数据.但我不知道如何处理mp3.我在google和stackoverflow上搜索了很多并找到了eyeD3.但不幸的是,文档相当令人沮丧,现在版本是0.7.1,与我在互联网上可以找到的大多数示例不同.
有没有可以从mp3中提取原始数据的好模块?如果有任何好的文档eyeD3,它也是好的.
我希望我能找到一种方法从 python 中的 mp3 获取幅度数据。与 audacity 类似,但我不需要视觉效果,一个简单的值数组就可以了。我希望我的代码在声音变大时在某些点对声音做出反应。我正在使用 pygame 播放音频并尝试将其转换为 sndarray 但它只给了我前 0.00018 秒。无论如何,我可以得到整个mp3吗?它不一定是实时的,因为无论如何我都希望能够提前做出反应,并且会使用 pygame 跟踪我的位置。
我正在使用树莓派来构建这个云,而不是其他功能。我已经完成了照明工作,需要它对闪电做出反应,遗憾的是 lightshowpi 不是一个选择。任何帮助将不胜感激
编辑:这就是我到目前为止所拥有的,感谢 coder-don。它有效,但我挂在 while 循环上。我不知道为什么。我使用的 mp3 相当长,这可能是问题所在吗?
import os, sys
from gi.repository import Gst, GObject
Gst.init()
GObject.threads_init()
def get_peaks(filename):
global do_run
pipeline_txt = (
'filesrc location="%s" ! decodebin ! audioconvert ! '
'audio/x-raw,channels=1,rate=22050,endianness=1234,'
'width=32,depth=32,signed=(bool)TRUE !'
'level name=level interval=1000000000 !'
'fakesink' % filename)
pipeline = Gst.parse_launch(pipeline_txt)
level = pipeline.get_by_name('level')
bus = pipeline.get_bus()
bus.add_signal_watch()
peaks = []
do_run = True
def show_peak(bus, message): …Run Code Online (Sandbox Code Playgroud)