- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在使用 UInt8 时,似乎没有什么可以处理字节顺序的。例如,在处理 UInt16 时,可以设置是小端还是大端:
dataview.setUint16(byteOffset, value [, littleEndian])
对比
dataview.setUint8(byteOffset, value)
我想这是因为字节顺序处理字节的顺序,如果我一次插入一个字节,那么我需要自己对它们进行排序。
那么我该如何自己处理字节顺序呢?我正在使用此规范创建一个 WAVE 文件头:http://soundfile.sapp.org/doc/WaveFormat/
header 的第一部分是 big endian 中的“ChunkID”,我是这样做的:
dataView.setUint8(0, 'R'.charCodeAt());
dataView.setUint8(1, 'I'.charCodeAt());
dataView.setUint8(2, 'F'.charCodeAt());
dataView.setUint8(3, 'F'.charCodeAt());
header 的第二部分是 small endian 中的“ChunkSize”,我是这样做的:
dataView.setUint8(4, 172);
现在我想既然这些 block 的字节序是不同的,那么我应该在每个 block 中做一些不同的事情。在这两种情况下我应该做些什么不同?
干杯!
编辑
我问这个问题是因为我创建的 wav 文件无效(根据 https://indiehd.com/auxiliary/flac-validator/ )。我怀疑这是因为我没有正确处理字节顺序。这是完整的波形文件:
const fs = require('fs');
const BITS_PER_BYTE = 8;
const BITS_PER_SAMPLE = 8;
const SAMPLE_RATE = 44100;
const NB_CHANNELS = 2;
const SUB_CHUNK_2_SIZE = 128;
const chunkSize = 36 + SUB_CHUNK_2_SIZE;
const blockAlign = NB_CHANNELS * (BITS_PER_SAMPLE / BITS_PER_BYTE);
const byteRate = SAMPLE_RATE * blockAlign;
const arrayBuffer = new ArrayBuffer(chunkSize + 8)
const dataView = new DataView(arrayBuffer);
// The RIFF chunk descriptor
// ChunkID
dataView.setUint8(0, 'R'.charCodeAt());
dataView.setUint8(1, 'I'.charCodeAt());
dataView.setUint8(2, 'F'.charCodeAt());
dataView.setUint8(3, 'F'.charCodeAt());
// ChunkSize
dataView.setUint8(4, chunkSize);
// Format
dataView.setUint8(8, 'W'.charCodeAt());
dataView.setUint8(9, 'A'.charCodeAt());
dataView.setUint8(10, 'V'.charCodeAt());
dataView.setUint8(11, 'E'.charCodeAt());
// The fmt sub-chunk
// Subchunk1ID
dataView.setUint8(12, 'f'.charCodeAt());
dataView.setUint8(13, 'm'.charCodeAt());
dataView.setUint8(14, 't'.charCodeAt());
// Subchunk1Size
dataView.setUint8(16, 16);
// AudioFormat
dataView.setUint8(20, 1);
// NumChannels
dataView.setUint8(22, NB_CHANNELS);
// SampleRate
dataView.setUint8(24, ((SAMPLE_RATE >> 8) & 255));
dataView.setUint8(25, SAMPLE_RATE & 255);
// ByteRate
dataView.setUint8(28, ((byteRate >> 8) & 255));
dataView.setUint8(29, byteRate & 255);
// BlockAlign
dataView.setUint8(32, blockAlign);
// BitsPerSample
dataView.setUint8(34, BITS_PER_SAMPLE);
// The data sub-chunk
// Subchunk2ID
dataView.setUint8(36, 'd'.charCodeAt());
dataView.setUint8(37, 'a'.charCodeAt());
dataView.setUint8(38, 't'.charCodeAt());
dataView.setUint8(39, 'a'.charCodeAt());
// Subchunk2Size
dataView.setUint8(40, SUB_CHUNK_2_SIZE);
// Data
for (let i = 0; i < SUB_CHUNK_2_SIZE; i++) {
dataView.setUint8(i + 44, i);
}
最佳答案
单个字节 (uint8
) 没有任何字节顺序,字节顺序是字节序列的一个属性。
根据您链接的规范,ChunkSize 占用 4 个字节的空间 - 最低有效字节在前(小端)。如果您的值只有一个字节(不大于 255),您只需像您所做的那样在偏移量 4 处写入该字节。如果这 4 个字节是大端顺序,你必须在偏移量 7 处写入你的字节。
不过,我建议简单地使用 setUint32
:
dataView.setUint32(0, 0x52494646, false); // RIFF
dataView.setUint32(4, 172 , true);
dataView.setUint32(8, 0x57415645, false) // WAVE
关于javascript - 如何在 DataView 中使用 UInt8 处理字节顺序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54854325/
这是我的 Dataview.List 这是我的 Dataview.Dataview 我想显示我的 Dataview.dataview 中的元素,就像我的 Dataview.List 中的元素一样。我只
我想通过过滤现有的 DataView 创建一个新的 DataView,但是我遇到了麻烦,因为 DataView 没有 .AsEnumerable() 方法并且没有实现 IEnumerable{Data
我想用如下状态和功能扩展 DataView: export class MyDataView extends DataView { public position: number; p
我正在使用 dataview 并使用它的 skip 和 take 方法,这将占用 5 行并根据页码和页面大小跳过一些行。 //creating a dataview object and assign
我正在为我的图片库使用 ExtJS DataView。这是我的项目工具提示方式。它在 tpl 中。 new Ext.XTemplate( '', '',
我无法在不转换的情况下查询 DataView。 IsPresent 方法中的两行代码取自 "LINQ - Specified cast is not valid with dataview use "
在我的应用程序中,我使用数据 View 在动态传递过滤器选项的地方应用过滤器。如果有 2 个过滤器参数,则数据 View 应针对参数 1 进行过滤,然后按参数 2 进行过滤。我正在使用一种在 for
我在我的页面上显示来自 DataTable 的信息,并想添加一些排序功能,这比直接的列排序要稍微好一点。因此,我一直在尝试将 LinkButtons 放在我的 GridView 的 HeaderI
我有两个要排序的 DataView,在 dgtest1 中,我尝试对包含 Typeid != 25 的数据进行排序,在 dgtest2 中我试图只显示 Typeid == 25 处的数据。 当我单步执
DataView 对象没有像 DataTable 那样的 Rows 属性。 如何循环遍历 DataView 的行? 最佳答案 DataView 对象本身用于循环遍历 DataView 行。 DataV
我正在尝试关注 http://mleibman.github.com/SlickGrid/examples/example4-model.html本教程。我下载了所有必需的 .js 文件(core.j
如何在顶部而不是默认在底部添加新行,在 slickgrid dataview impelmentation 中也很感激有人提供删除行的示例。 最佳答案 这是一个示例函数,可以与示例 1-simple.
我有一个数据表。我想按列名“城市”对其默认 View 进行排序。我希望排序不区分大小写。 这是我的代码: DataTable dt = GetDataFromSource(); dt.DefaultV
我有一个包含一列(“利润”)的数据表。我想要的是获取此表中所有值的总和。我试图通过以下方式做到这一点...... DataTable dsTemp = new DataTable(); dsTemp.
我在 DataView.Sort 上遇到性能瓶颈。代码如下。 /// /// Filters the data table and returns a new data table
我正在尝试确定 DataView 是否不包含数据。 lsSql = "Select col1, col2 from table where tableId = " + Id; DataView l
我有一个 DataTable包含一些行。复制到 DataView .现在我有 List 形式的 ID .其中包含从 GridView 中选择的项目.现在我想过滤这个 DataView使用 AND 作为
我有一个包含一些列的 gridview,我需要按日期列对 gridview 进行排序。但我无法正确排序。这是我使用的代码: dt.DefaultView.Sort = "Meldingsdatum a
我想将数据 View rowfilter 值转换为数据表。我有一个有值(value)的数据集。现在我正在使用数据 View 过滤值。现在我想将数据 View 过滤器值转换为数据表。请帮我复制它....
我有一个数据 View 。 dataview 的来源是来自 sql server 的 view。Dataview 已排序。像这样: dv_building.Sort = "bld_number" 此
我是一名优秀的程序员,十分优秀!