Liquor

Liquor

10个粉丝

15

问答

0

专栏

0

资料

Liquor  发布于  2023-08-08 12:24:20
采纳率 27%
15个问答
1116

纯粹的pcm看数据如何得知位宽?

悬赏金¥ 100
已结题

如果不用分析软件、不用播放软件,给你一个pcm文件(没有文件头),单单从数据里面如何分析出是两个字节一个采样还是一个字节一个采样?

我来回答
回答29个
时间排序
认可量排序

Techlife

7个粉丝

9

问答

14

专栏

4

资料

Techlife 2023-08-08 12:29:10
认可0

多准备几个两个字节一个采样和一个字节一个采样的文件,然后看差别,再反推

Liquor
Liquor   回复   Techlife  2023-08-08 12:35:00
0

我看了同一个音频文件的16位,8位,有符号无符号,大端小端,还是没办法看出啥

Techlife
Techlife   回复   Liquor  2023-08-08 13:01:06
0

应该有标志位或者格式的区分,不然软件怎么识别呢

Liquor
Liquor   回复   Techlife  2023-08-08 13:19:04
0

就是纯纯的pcm文件,就只有数据没有头,每一个数据就是一个采样点,然后也不能用软件的话,应该如何区分是16位一个数据还是8位一个数据

Liquor
Liquor   回复    2023-08-08 13:51:54
0

如果不能用播放器,就不知道哪一段声音是小的呀。主要是如果是十六位,那么相应的0xxxxxxx xxxxxxxx也可以被误解为是八位的两个数据啊?第二个方法数据的连续性怎么查看,不借助工具的情况下,只看数据

3个粉丝

0

问答

0

专栏

0

资料

2023-08-08 13:48:55
认可0

方法3:直接播放试错

Liquor
Liquor   回复    2023-08-08 13:53:00
0

不能用播放器

輝
  回复   Liquor  2023-08-08 14:00:12
0

看下面方法1

Liquor
Liquor   回复    2023-08-08 14:07:11
0

我这边收到了你那个回复的“只能靠猜的方法”这一个答复,但是进来就看不到了,能不能再答一下

3个粉丝

0

问答

0

专栏

0

资料

2023-08-08 13:51:48
认可4
易百纳技术社区该回答已被题主采纳为最佳答案

方法1:声音小的时候 采样的最高位是0。如果是八位数据那么应该是 大多数二进制数据应该是 0xxxxxxxx 。如果是十六位 那么也应该是 0xxxxxxxx xxxxxxxxx。找一段声音很小的时候,16位数据可能会出现 0xH xxH 0xH xxH 这种极端情况。
方法2:还有一点可以看数据的连续性,波形是连续的,按16位和8位 打点 看看是不是连续的。这个办法还能区分出来通道数。

Liquor
Liquor   回复    2023-08-08 14:04:14
0

这个我看了,如果不能用播放器,就不知道哪一段声音是小的呀。主要是如果是十六位,那么相应的0xxxxxxx xxxxxxxx也可以被误解为是八位的两个数据啊?第二个方法数据的连续性怎么查看,不借助工具的情况下,只看数据

輝
  回复   Liquor  2023-08-08 14:26:57
0

找高位数据0 多的那一段数据啊。统计一下 方法1大多数能正确识别。你理解下方法一把,单通道 区分8位和16位很实用。

輝
  回复   Liquor  2023-08-08 14:42:33
0

我这里说0 只是说接近平均值,并不是物理数据的0。

輝
  回复   Liquor  2023-08-08 14:47:25
0

音频还有特性,整体式对称的。平均值基本式一个稳定值(有符号的时候 平局值应该是0) 无符号平局值应该 某个中间值。利用这个特性也可以,观察数据。用假设方法试错 也行
1、假设数据是 有符号8位, 随机在整体数据中取几处 每次连续 10K数据,计算平均值。得到的结果应该都接近0
2、假设数据是 有符号16位,大端,随机在整体数据中取几处 每次连续 10K数据,计算平均值。得到的结果应该都接近0
3、假设数据是 有符号16位,小端,随机在整体数据中取几处 每次连续 10K数据,计算平均值。得到的结果应该都接近0
4、假设数据是 无符号8位, 随机在整体数据中取几处 每次连续 10K数据,计算平均值。得到的结果应该都接近同一个值
5、假设数据是 无符号16位,大端,随机在整体数据中取几处 每次连续 10K数据,计算平均值。得到的结果应该都接近同一个值
6、假设数据是 无符号16位,小端,随机在整体数据中取几处 每次连续 10K数据,计算平均值。得到的结果应该都接近同一个值

Liquor
Liquor   回复    2023-08-08 14:47:30
0

方法一中的0xH xxH 0xH xxH分别指什么,接近平均值有一点难理解

輝
  回复   Liquor  2023-08-08 14:52:14
0

有符号数据 还有一个办法 很好反推。有符号数据 高位是全1的比如 -1 是 0xFFFF
如果出现 00xx 00xx 00xx FFxx FFxx FFxx 这种数据 就是有符号的。波形在0上下波动(有符号音频肯定是在0上下波动的,无符号数据是在平均值上下波动)。8位数据同理。

輝
  回复   Liquor  2023-08-08 14:53:28
0

这个值是 实际值减去平局值得 绝对值。

Liquor
Liquor   回复    2023-08-08 14:53:50
0

这个方法,如果平均值是0则只能判断是有符号,如果是其他值的话才能猜测出是16位还是8位的

Liquor
Liquor   回复    2023-08-08 14:56:54
0

如果不知道大端存储还是小端存储,这个方法依旧有效吗

輝
  回复   Liquor  2023-08-08 14:59:38
0

说了这么多 无非就是找数据规律。音频波形一定是在 平局值 上下波动,一般类似个正弦波那种。有符号得平局只一般都是取0。
整形数据得 负数高位是全1(比如-1 是0xFFFF) 正数高位是全0 (+1 是0x0001)。
0x00 0x11 0x00 0x22 这种明显就是大端啊。是两个正数,声音小得时候 看高位补的数据。
你可以尝试分别用 大端 小端组合。
就是各种尝试,找到最合理的那种啊。所有可能都尝试一遍,找到最合理的那种。

Liquor
Liquor   回复    2023-08-08 15:00:16
0

这个实际值减去平均值得到的绝对值代表什么,回复有点多,有点混了

輝
  回复   Liquor  2023-08-08 15:02:28
0

计算平局值,多取几个采样段。每次计算的平均值应该是相等(差距很小)的。如果大小端反了,你每次计算的平局值差距应该很大,因为数据乱了。

輝
  回复   Liquor  2023-08-08 15:12:33
0

规律,
1、肯定存在一个固定的平均值
2、波形在平局值整体上下是对称的,也就是一直在 平局在上下波动
3、声音小的时候 波动很小,很接近平均值
4、有符号、和无符号 二进制规律。有符号 负数高位补1(-1 是0xFFFF)
5、如果文件保存是有符号 那么一般平局值就是0。否则保存有符号意义不大了。
试错的方式 尝试读取数据。找到最符合上面规律的读取方式。

Liquor
Liquor   回复    2023-08-08 15:23:23
0

有一个疑问 都不知道是8位还是16位 在取值的时候就没办法确定是取8位还是16位为一个数据了呀 可不可以这么想:如果是16位,假如我取成了8位为一个数据,那么每一段的平均值就相差比较远 ,然后再反过来取16位即可,这样子

Liquor
Liquor   回复    2023-08-08 15:33:37
0

大佬给个qq给我吧,可能到时候还会有一些小脑洞问问大佬

輝
  回复   Liquor  2023-08-08 15:37:05
0

可以,把所有情况都试一遍。最接近已经明确的 规律的那个情况就是正确的。

輝
  回复   Liquor  2023-08-09 08:39:05
0

还有一个方法 可以用计算各种情况的方差。方差小的就是 正确读取格式。

自由如风

0个粉丝

0

问答

0

专栏

0

资料

自由如风 2023-08-08 13:52:18
认可0

这不糊扯吗?

Liquor

10个粉丝

15

问答

0

专栏

0

资料

Liquor 2023-08-08 13:57:44
认可0

有必要再描述一下:原问题是—如果给一段pcm文件,不借助播放软件(不是用播放器听声音正不正常)或者其它分析工具,只单纯看数据,怎么判断数据是8位还是16位,有符号还是无符号,大端还是小端,提供大概的思路就可以

加载中···
或将文件直接拖到这里
悬赏:
E币
网盘
* 网盘链接:
* 提取码:
悬赏:
E币

Markdown 语法

  • 加粗**内容**
  • 斜体*内容*
  • 删除线~~内容~~
  • 引用> 引用内容
  • 代码`代码`
  • 代码块```编程语言↵代码```
  • 链接[链接标题](url)
  • 无序列表- 内容
  • 有序列表1. 内容
  • 缩进内容
  • 图片![alt](url)
+ 添加网盘链接/附件

Markdown 语法

  • 加粗**内容**
  • 斜体*内容*
  • 删除线~~内容~~
  • 引用> 引用内容
  • 代码`代码`
  • 代码块```编程语言↵代码```
  • 链接[链接标题](url)
  • 无序列表- 内容
  • 有序列表1. 内容
  • 缩进内容
  • 图片![alt](url)
相关问答
无更多相似问答 去提问
举报反馈

举报类型

  • 内容涉黄/赌/毒
  • 内容侵权/抄袭
  • 政治相关
  • 涉嫌广告
  • 侮辱谩骂
  • 其他

详细说明

易百纳技术社区