问题标签 [riff]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1629 浏览

parsing - RIFF Wave 文件格式:FourCC 值和 HEX 转换

上下文: 我正在解析 Riff/Wave 文件。有文档标识 Riff 块中的 FourCC 值。以下是波形文件更重要的块。

两个 .wav 特定块的 FourCC ID:

因此,这些 fmt 值应该相等:

并且,这些数据值应该相等:

现在,当我读入有效的 .wav 文件时,FourCC fmtChunkID fmt int总是:

并且数据int始终是:

问题: 为什么记录的 Hex 值与我从流中返回的 int 不匹配?我猜我不了解十六进制到整数的转换。

额外: 我在网上找到了具有可疑 fmt 值“1718449184”的 .wav 解析器代码。但我发现更多 fmt 值“544501094”。最后,谷歌搜索“1718449184 AND 544501094”;没有。

感谢您的帮助。

0 投票
1 回答
674 浏览

c# - .Wav Speex 标头内容问题

我已经安装了 Speex Voice ACM Codec 1.0.1.1 编解码器,它们似乎有不同的 .wav 标头,然后是此 NSpeex(C#) 包中的 C# 代码中描述的标头。

我可以读取使用“Speex Voice ACM Codec 1.0.1.1”创建的 .wav 文件,并成功解码它们,但是当我创建 .wav 文件时,“Speex Voice ACM Codec 1.0.1.1”无法识别我的标题。我检查了十六进制编辑器,“Speex Voice ACM Codec 1.0.1.1”创建的 .wav 标头中有一些字节,我没有创建,它们与 NSpeex.PcmWaveWriter 类中的不同。

所以,我同意这部分:

但是,其余的不是 NSpeex.PcmWaveWriter 类的代码。

在十六进制编辑器中,我在“Speex Voice ACM Codec 1.0.1.1”创建的 .wav 文件中看到(在上述部分之后):

但我不知道那是什么以及如何创建 .wav 标头以与“Speex Voice ACM Codec 1.0.1.1”兼容。同样,我可以解码他们的 .wav 文件,并创建我可以解码的 .wav 文件,但该编解码器似乎无法识别我的 .wav 标头。

Speex 应该是“开源”的,有人可以透露 .wav (speex) 标头中的秘密字节吗?

0 投票
1 回答
3257 浏览

java - How to decode WAV/RIFF audio data?

I'm trying to create a program to generate random audio which can be written to a WAV/RIFF file. I'm able to understand the header easily thanks to this, and I've found how to write byte data to a WAV/RIFF file here but what I can't find is anything which specifies how WAV/RIFF audio data is encoded in those bytes.

So what I'm trying to do is analyze the data (not trying to get this handed to me ;) ) to know what's going on in the bytes, thus allowing me to write my program properly. So is there anything out there that explains how to decode the audio chunk of the WAV/RIFF file to understand what's taking place in each byte (amplitude, frequencies, etc)? I understand I may be missing something here, maybe each byte isn't what I should be looking for, but again there seems to be only sparse data that I've been able to find on the topic out there.

Will be using Java for this at the moment, so if there are any implementation specific options there please let me know.

NOTE

I also found this and this which seem to be in the general area of what I'm looking for, but they still don't get there. So what I'm looking for is a specification or example that will show me how to analyze the individual bytes to see what's going on so I can learn how to write them.

EDIT

A friend suggested that I might be overthinking this, and that there may be a Java library that would make analyzing raw audio data easier in Java than doing it by byte. If so, any suggestions on this or where to look?

0 投票
1 回答
2184 浏览

c++ - 使用 XAudio2 加载 WAV 文件

我正在编写一个可以加载和播放 WAV 文件的程序,我正在使用 XAudio2 库,我在 msdn.microsoft.com 的帮助下开始编写它,现在我几乎完全从 msdn 复制了代码,它仍然可以不行。我不知道问题出在哪里。当我尝试使用 CreateSourceVoice 播放声音时,出现 XAUDIO2_E_INVALID_CALL 错误。我将不胜感激。他是我的代码:

我的临时主线:

以及在 WAV 文件中搜索块的功能:

0 投票
0 回答
1039 浏览

audio - libsndfile:读取 wav 跳过 JUNK 块

我一直在使用 libsndfile 库。但直到最近,我发现我的一些 wav 文件中有这个额外的 JUNK 部分,而 libsndfile 并没有将其归类为 JUNK,而只是将其作为数据读取。

我的 wav 文件的结构如下所示:

带有 JUNK 部分的 test.wav.

我想知道我应该如何跳过或忽略这个垃圾部分。请注意,fmt现在位于偏移量 ( off=56) 而不是off=20,这是我的 test.wav 没有任何 JUNK 的时候。

如果解决方案是使用 libsndfile 以外的其他库,那么请提出建议,哪一个可以让我以编程方式跳过这个 JUNK 块。

0 投票
1 回答
2622 浏览

c++ - 使用 C++ 读取 wav 文件时出错

我有一个 .wav 文件,我想用 C++ 读取它。我对 RIFF 文件头做了一些研究,并编写了一个代码来加载它。

但是,我在输入文件 OS.wav 上运行此代码是非常有道理的。它输出信息:

你可以看到“fmt”是“假的”。

然后我使用 sox 通过以下方式转换此 wav 文件:

并再次运行我的代码。它有以下信息:

我没有改变任何东西。但是标题信息是如此不同。谁能告诉我为什么会发生这种情况,好吗?

谢谢你。

0 投票
2 回答
2833 浏览

c++ - 获取 wav 文件的帧和样本

首先,我试图在没有任何专有库的情况下做到这一点,以便它更便携,并且我对这里发生的事情有了更好的/不熟悉的理解。我可以编写自己的类和库来处理重复的功能(解析标头等)。

所以我想知道如何通过流读取WAV/RIFF文件,以便计算有关所述音频文件的信息(即文件中音频的长度、多少样本、多少帧等)。然后遍历这些帧或样本以获取其他功能。

我知道它将以二进制文件的形式读取它,并允许RIFF 规范fstream中指定的标头(并从标头中获取一些信息),但是如何识别字节到帧或样本,以及长度?

我可以在其他语言中找到处理此问题的问题,但在 C++ 中没有看到与它直接相关的任何内容。

0 投票
4 回答
30235 浏览

python - 由于以下原因,无法将文件 file.wav 作为 WAV 打开:文件不以 RIFF id 开头

尝试在 python 中打开 RIFF 文件(据我了解它是一种 WAV)时出现此错误。

当我使用各种工具检查它时,我相信它确实是一个 WAV / RIFF 文件。

0 投票
1 回答
1019 浏览

perl - RIFF WAV 标头格式 2014 更新?

我正在尝试在 perl 中解码和播放 WAV 文件以进行进一步操作,我发现了一些关于格式的参考,以及一些有趣的 q+a

音频帧包含什么? 使用 C++ 读取 wav 文件时出错 将音符写入 wav 文件

我发现了“Cannonical WAVE 文件格式”在此处输入图像描述

但最后我正在测试 2 个不遵循“标准”的不同 WAV 文件。Mplayer 在读取数据方面完全没有问题,我在我的 perl 代码上找到了一种解决方法:

仍然困扰我它是如何真正工作的,可变数据在“每个样本的位数”字段和“数据”字段之间是什么。

感谢你们!

(我越来越沉迷于这个论坛)

test2.wav

测试.wav

0 投票
1 回答
177 浏览

c# - RIFF AVI RLE 与 GDI RLE 不同

我有一个 1990 年代初期制作的基本 RIFF AVI,我很想用原生 VB/C# 代码制作一个基本的视频播放器。根据标题,它使用旧的 MS RLE 编解码器。AVI 中的位图头表明它是 RLE8 压缩的。

位图文件

  1. 这是原始“xxdc”压缩数据写入位图的结果,该位图从头开始务实地创建并在 Windows 照片查看器中打开
  2. 使用 VirtualDub 提取的同一帧
  3. 下面的代码解压 RLE8 位图

问题是下面的代码和 Windows 都做同样的事情,缺少部分,这导致我从旧的VirtualDub 博客文章中找到以下内容;

(GDI 的 RLE 与 AVI 的 RLE 不同)”。

问题是我找不到区别:(。我在互联网上找不到任何资源或 MSDN 上的任何材料。

我将一个 RLE8 解压示例从 http://dirkbertels.net/computing/bitmap_decompression.php 移植到 VB(为简洁起见,位图结构省略)。这是一种享受。问题是它对于使用 RLE8 的 AVI 帧不能正常工作。

我现在不知道 VirtualDub、FFMPEG 和其他人如何在不使用旧的 MSRLE.DLL 编解码器的情况下做到这一点......有人有什么想法吗?