• VAD监测(一)


    麦克风的采样率是16000,代表一秒钟采集16000个数据点

    我们每次拿1024个采样点作为一个buffer,buffer是一个b''类型,也就是字节类型。 这一个buffer的长度不一定是1024,取决于每个采样点的采样点的位深度,如果音频数据是 16 位(2 字节)的采样,那么 buffer 将包含 1024 个采样点,每个采样点占用 2 个字节,因此 buffer 的总长度将是 2048 字节,如果是双声道的话,那就要再翻上一杯。 

    一个采样点占用两个字节,那在计算机内存中是如何存储的呢?

    一般使用大端方法或者小端方法进行存储。

    两个字节的排列顺序取决于系统的字节顺序。在“大端(Big-Endian)”系统中,高位字节(更有意义的部分)存储在低地址处,而在“小端(Little-Endian)”系统中,高位字节存储在高地址处。例如,16位采样值0x1234在大端系统中存储为0x12 0x34,而在小端系统中存储为0x34 0x12。

    举个例子,假设你有两个16位采样值,0x1234和0x5678。在小端系统中,它们可能在内存中这样排列(假设从地址0x00开始):

    对于十六进制数0x1234:

    • 高位字节(Most Significant Byte,MSB)是0x12。
    • 低位字节(Least Significant Byte,LSB)是0x34。
    1. 地址 内容
    2. 0x00(低地址处) 0x34(低位字节)
    3. 0x01(高地址处) 0x12(高位字节)
    4. 0x02 0x78
    5. 0x03 0x56

    高位字节比低位字节保留的信息更多,所以我们需要保留高位字节。

    那就需要判断是用大端方法还是小端方案呢?如果是小端方案,那我们就保留高地址处的高位字节,也就是保留奇数下标。 如果是大端方案,我们需要保留低地址处的高位字节,那就保留偶数下标。 

    如何判断是用大端方法还是小端方案呢?

    既然一个采样点占用两个字节,然后依次向后排列。 我们判断一下偶数下标的字节和奇数下标的字节那个分布的更均匀。 

    Counter之后发现奇数下标分布的比较离散,说明奇数下标是高位,那我们就保留奇数下标,同时说明这是大端方法存储。 

  • 相关阅读:
    java中Runnable、Callable、Future、RunnableFuture、CompletionStage接口区别
    第十九章Java绘图
    企业数据管理中,细节至关重要
    Unittest接口自动化测试
    OpenLayer系列——【一】初识OpenLayer与OpenLayer视图操作
    BGP选路规则
    解决聊天窗口的输入框高度变化,引起中间滚动内容的跳动问题
    链表(1)
    014 Linux 线上高频使用以及面试高频问题——如何查找大文件并安全的清除?
    go 每天定时任务 --chatGPT
  • 原文地址:https://blog.csdn.net/sunriseYJP/article/details/134518193