- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在用 C# 编写一个应用程序,它将录制音频文件 (*.wav) 并自动标记和命名它们。波形文件是 RIFF 文件(如 AVI),除了波形数据 block 之外,它还可以包含元数据 block 。所以现在我想弄清楚如何从录制的波形文件中读取和写入 RIFF 元数据。
我正在使用 NAudio 来录制文件,并在 their forums 上询问过作为well on SO用于读取和写入 RIFF 标签的方法。虽然我收到了很多不错的答案,但没有一个解决方案能够像我希望的那样轻松地阅读和编写 RIFF block 。
但更重要的是,我在字节级别处理文件的经验很少,我认为这可能是一个很好的学习机会。所以现在我想尝试编写自己的类,它可以读取 RIFF 文件并允许从文件中读取和写入元数据。
我在 C# 中使用过流,但总是同时使用整个流。所以现在我有点迷茫,我必须逐字节考虑文件。具体来说,我将如何在文件中间删除或插入字节?我已尝试通过 FileStream 将文件读入字节数组 (byte[]),如下面的代码所示。
System.IO.FileStream waveFileStream = System.IO.File.OpenRead(@"C:\sound.wav");
byte[] waveBytes = new byte[waveFileStream.Length];
waveFileStream.Read(waveBytes, 0, waveBytes.Length);
而且我可以通过 Visual Studio 调试器看到前四个字节是文件的 RIFF header 。
但是,在执行更改其大小(如插入或删除值)的操作时,数组很难处理。所以我想我可以将 byte[] 放入这样的列表中。
List<byte> list = waveBytes.ToList<byte>();
这将使对文件逐字节的操作变得更加容易,但我担心我可能会遗漏 System.IO namespace 中的类之类的东西,这将使所有这一切变得更加容易。我是在正确的轨道上,还是有更好的方法来做到这一点?我还应该提到我不太关心性能,并且不想处理指针或不安全的代码块,如 this guy .
如果有帮助的话,这里是a good article关于 RIFF/WAV 文件格式。
最佳答案
我不是用 C# 写的,但可以指出一些我认为不好的地方:
1) 不要读取内存中的整个 WAV 文件,除非这些文件是您自己的文件并且有意将其缩小。
2) 不需要在内存中插入一个数据。例如,您可以简单地执行以下操作:分析源文件,存储 block 的偏移量,并在内存中读取元数据;在对话框中显示用于编辑的元数据;在保存写入 RIFF-WAV header 、fmt block 的同时,从源文件传输音频数据(通过读写 block ),添加元数据;更新 RIFF-WAV header 。
3) 尝试将元数据保存在文件尾部。这将导致仅交替标记不需要重写整个文件。
似乎存在一些关于在 C# 中使用 RIFF 文件的资源 here .
关于c# - 需要帮助在字节级操作 WAV (RIFF) 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2618861/
RIFF WAV文件中的格式参数的字节序是否得到保证?我对此有heard conflicting answers,包括对RIFX文件格式的引用。 最佳答案 是的。 如果文件以RIFF开头,则为小端。
所以我以前从未真正使用过二进制文件,而且我是 C++ 新手。我想读取一个 wav 文件并将其数据部分输出到一个 txt 中(用逗号分隔每个样本的值)。我还设法阅读了标题部分,但这段代码在这里并不重要,
根据WAV / RIFF文件规范:http://www.topherlee.com/software/pcm-tut-wavformat.html header 中的5-8个字节是整个文件的大小减去8
我正在编写一个简单的录音实用程序,我还希望能够使用元数据标记生成的文件。很容易找到用 ID3 标签标记 MP3 文件的库,但我对 WAV 和可能的 FLAC 等无损编解码器更感兴趣。 据我所知,WAV
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我正在用 C# 编写一个应用程序,它将录制音频文件 (*.wav) 并自动标记和命名它们。波形文件是 RIFF 文件(如 AVI),除了波形数据 block 之外,它还可以包含元数据 block 。所
我正在尝试将原始音频数据从一种格式转换为另一种格式,以便进行语音识别。 音频是从 Discord 接收的服务器以20ms block 的格式:48Khz,16位立体声签名BigEndian PCM。
我有一个 ogg 音频文件和一些保存为字节序列的信息。我需要将这些音频和信息打包到一个容器中,例如 RIFF 或其他容器。我正在寻找可以在 .NET 下编写的解决方案。 最佳答案 Ogg 是一种容器格
我正在尝试在 perl 中解码和播放 WAV 文件以进行进一步的操作,我找到了一些关于格式的引用资料,以及一些有趣的 q+a What does a audio frame contain? erro
friend 们 我刚刚从该位置开始使用WaveContainer.as文件来使用actionscript和Im https://code.google.com/p/wami-recorder/sou
所以,我正在编写一个语音识别程序。为此,我从 TIMIT 下载了 400MB 的数据。当我打算阅读 wav 文件时(我尝试了两个库),如下所示: import scipy.io.wavfile as
更多关于我想做什么的信息; http://www.studiodust.com/riffmp3.html 我想要一种方法,使我的控制面板(用 Perl 和 Webmin 制作)可以自动执行此操作。现在
我正在尝试在 python 2.6 中将 16khz wav 文件下采样到 8khz。该文件具有 RIFF header 并且采用 mulaw 格式,并且必须保留该格式。 我浏览了 this big
如何生成包含 WAV/RIFF 声音文件频谱的文件? 我想使用 Linux 命令行。 我知道很酷SoX生成 PNG 频谱图的函数: sox sound.wav -n spectrogram 但我不需要
我的文件使用其哈希名称保存,没有扩展名。但我确定它是 RIFF 文件,如 WAV、MP3。我如何添加 MIME 取决于它使用 nginx 的 RIFF header ? 编辑:大多数文件是 mp3 格
我只想拥有 .wav 文件的数据 block 并排除所有其他 block ,即 riff header 。 let voiceData = try? Data(contentsOf:
我有一个包含 3 个 block 的 RIFF 容器文件; RIFF block 具有“WAVE”标识符。第一个 block 是“fmt”,第二个是“数据”,最后一个是“eink”(我自己的 bloc
我的任务是录制 wave 文件,将其转换为 ogg 并将其打包到 riff 容器中。前两部分已经完成,但我对第三部分有疑问。我找到了可以解决我的问题的源代码,但它不能正常工作。 #include #
如何将 RIFF block 数据写入 WAV 文件的结尾?是的,没错,写入 WAV 文件的结尾。为什么?因为我要替换的旧程序就是这样做的,集成程序就是这样准备的,它们不能被修改。 最佳答案 我个人会
尝试在 Python 中打开 RIFF 文件(据我所知,它是一种 WAV)时出现此错误。 Failed to open file file.wav as a WAV due to: file does
我是一名优秀的程序员,十分优秀!