0

我目前正在尝试使用一些 .wav 文件进行隐写术。

我想要做的是编写一个程序,将声音文件打开到一个数组中,然后修改所述数组,但这就是我卡住的地方。

目前我有:

#include <stdio.h>
#include "scc110wav.h"

int main ()
{
    unsigned char *soundData = LoadWavAudioFile("3stepoct.wav");

    int byte;

    for (byte = 0; byte <= 5554944; byte++){
        printf("%d\n", soundData[byte]);
    }
}

我目前所能做的就是打印数组,但无法更改数组的值。我知道我不需要在最后打印数组,特别是因为它太大了,但我只是想感受一下文件,这样我就可以将数组值更改为 ASCII 值,而无需监听检测到声音的大部分变化。

4

3 回答 3

3

soundDatais not const,因此您可以使用[]运算符访问流的字节并对这些数据执行任何操作。

于 2012-12-12T11:44:01.180 回答
1

根据我的理解,您对需要更改的地方感到困惑,以便 wav 文件可以播放。如果这是问题,您可以从以下链接了解有关波形文件格式的所有信息

点击此处了解 Wave 文件格式

并且您可以通过保留有关块大小等的其他详细信息来更改数据部分。

于 2012-12-12T12:33:05.707 回答
0

当您使用说明符soundData[byte]for循环中打印时%d,您正在打印存储在 .so 中的字符的 ASCII 值。因此,您可以像使用普通数组一样soundData[byte]轻松访问和修改存储在任何时间点的数据。此外soundData[byte]它只是unsigned char *没有什么能阻止你修改数组中的任何东西。

您可能需要考虑更改bytefrom intto的数据类型,long long因为5554944for循环中使用的数据类型超出了int最大存储值限制。所以,基本上你会一遍又一遍地滚动。

一旦你了解了如何访问音频文件中的数据,你真正应该看看的是一个很好的隐写算法,可以在你的输入流上实现。最简单的一种是基于 LSB 的算法。

于 2012-12-12T12:33:47.930 回答