音频属性详解(涉及采样率、通道数、位数、比特率、帧等)

音频指人耳可以听到的声音频率在 20HZ~20kHz 之间的声波,称为音频。

采样频率

即取样频率, 指每秒钟取得声音样本的次数。采样频率越高,声音的质量也就越好,声音的还原也就越真实,但同时它占的资源比较多。由于人耳的分辨率很有限,太高的频率并不能分辨出来。

如果是双声道(stereo),采样就是双份的,文件也差不多要大一倍。

22050 的采样频率是常用的, 44100 已是CD音质, 超过 48000 或 96000 的采样对人耳已经没有意义。这和电影的每秒 24 帧图片的道理差不多。

采样位数

采样值或取样值(声音的连续强度被数字表示后可以分为多少级,即将采样样本幅度量化)。它是用来衡量声音波动变化的一个参数,也可以说是声卡的分辨率。它的数值越大,分辨率也就越高,所发出声音的能力越强。

  • 8 bit

    只能记录 256 个数,只能将振幅划分成 256 个等级

  • 16 bit

    细到 65536 个数

  • 32 bit

    把振幅细分到 4294967296 个等级

通道数

声音的通道的数目。常有单声道和立体声之分,单声道的声音只能使用一个喇叭发声(有的也处理成两个喇叭输出同一个声道的声音),立体声可以使两个喇叭都发声(一般左右声道有分工) ,更能感受到空间效果,当然还有更多的通道数。

常见的声道有:

  • 单声道

    mono

  • 双声道

    stereo,最常见的类型,包含左声道以及右声道

  • 2.1 声道

    在双声道基础上加入一个低音声道

  • 5.1 声道

    包含一个正面声道、左前方声道、右前方声道、左环绕声道、右环绕声道、一个低音声道,最早应用于早期的电影院

  • 7.1 声道

    在 5.1 声道的基础上,把左右的环绕声道拆分为左右环绕声道以及左右后置声道,主要应用于 BD 以及现代的电影院

帧记录了一个声音单元,其长度为样本长度(采样位数)和通道数的乘积。

周期

音频设备一次处理所需要的帧数,对于音频设备的数据访问以及音频数据的存储,都是以此为单位。

交错模式

数字音频信号存储的方式。数据以连续帧的方式存放,即首先记录帧1的左声道样本和右声道样本,再开始帧2的记录...

非交错模式

首先记录的是一个周期内所有帧的左声道样本,再记录所有右声道样本。

比特率

每秒的传输速率(位速, 也叫比特率)。如 705.6kbps 或 705600bps, 其中的 b 是 bit, ps 是每秒的意思,表示每秒705600bit 的容量。

文件时长 = (文件总大小 - 头信息)/ (采样频率 * 采样位数 * 通道数 / 8)

  • 23
    点赞
  • 135
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论
要生成指定尺寸和指定位数的格雷码图片,我们可以使用Python的Pillow库和NumPy库来实现。 首先,我们需要了解什么是格雷码。格雷码是一种二进制编码,其中相邻的两个之间只有一位二进制不同。例如,4位二进制的格雷码序列如下:0, 1, 3, 2, 6, 7, 5, 4。 接下来,我们将介绍如何生成指定尺寸和指定位数的格雷码图片。 步骤1:生成格雷码序列 我们可以使用递归方法生成格雷码序列。下面是一个生成n位格雷码序列的Python函: ```python def gray_code(n): if n == 0: return [''] else: lower = gray_code(n - 1) return ['0' + x for x in lower] + ['1' + x for x in reversed(lower)] ``` 该函将返回一个包含2^n个元素的列表,每个元素是一个n位的格雷码。 例如,当n=2时,该函将返回:['00', '01', '11', '10']。 步骤2:将格雷码转换为二进制 由于Pillow库只能处理二进制据,因此我们需要将格雷码转换为二进制。我们可以使用以下函将格雷码转换为二进制: ```python def gray_to_bin(gray): bin = '' bin += gray[0] for i in range(1, len(gray)): if gray[i] == '0': bin += bin[i - 1] else: bin += '1' if bin[i - 1] == '0' else '0' return bin ``` 该函将返回一个二进制字符串,其中包含与输入格雷码相对应的二进制。 例如,当输入的格雷码为'0001'时,该函将返回'0000'。 步骤3:生成二进制图像据 我们可以使用NumPy库生成一个二维组来表示图像据。我们可以使用以下函生成一个指定尺寸的二维组: ```python import numpy as np def create_image(width, height): image = np.zeros((height, width), dtype=np.uint8) return image ``` 该函将返回一个指定尺寸的二维组,其中的每个元素都是0。 步骤4:将二进制转换为图像据 我们可以使用以下函将二进制转换为图像据: ```python from PIL import Image def bin_to_image(bin, width, height): image = create_image(width, height) for i in range(width): for j in range(height): index = i * height + j pixel = int(bin[index]) image[j][i] = 255 * pixel return Image.fromarray(image, 'L') ``` 该函将返回一个Pillow图像对象,其中的黑色像素表示0,白色像素表示1。 步骤5:生成格雷码图像 最后,我们可以将上述函组合起来生成格雷码图像。以下是生成指定尺寸和指定位数的格雷码图像的Python代码: ```python from PIL import Image import numpy as np def gray_code(n): if n == 0: return [''] else: lower = gray_code(n - 1) return ['0' + x for x in lower] + ['1' + x for x in reversed(lower)] def gray_to_bin(gray): bin = '' bin += gray[0] for i in range(1, len(gray)): if gray[i] == '0': bin += bin[i - 1] else: bin += '1' if bin[i - 1] == '0' else '0' return bin def create_image(width, height): image = np.zeros((height, width), dtype=np.uint8) return image def bin_to_image(bin, width, height): image = create_image(width, height) for i in range(width): for j in range(height): index = i * height + j pixel = int(bin[index]) image[j][i] = 255 * pixel return Image.fromarray(image, 'L') def generate_gray_code_image(n, size): gray_codes = gray_code(n) images = [] for gray in gray_codes: bin = gray_to_bin(gray) image = bin_to_image(bin, size, size) images.append(image) return images ``` 该代码将生成一个包含2^n张图片的列表,其中每张图片都是一个n位的格雷码图像。 例如,当n=3,size=256时,该代码将生成一个包含8张图片的列表,每张图片尺寸为256x256。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

郎涯技术

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值