我目前正在尝试使用一些.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值,而无需监听检测声音的大部分变化。
答案 0 :(得分:3)
soundData
不是const
,因此您可以使用[]
运算符访问流的字节,并使用此数据执行任何操作。
答案 1 :(得分:1)
根据我的理解,您在需要更改的地方感到困惑,因此可以播放wav文件。 如果这是问题,您可以从以下链接
了解有关波形文件格式的所有信息Click here to learn Wave file format
您可以通过保留有关块大小等的其他详细信息来更改数据部分。
答案 2 :(得分:0)
使用soundData[byte]
说明符在for
循环中打印%d
时,您将打印soundData[byte]
中存储的字符的ASCII值。所以,你可以在任何时候轻松访问和修改soundData[byte]
中存储的数据,就像使用普通数组一样。除了它unsigned char *
之外,所以没有什么可以阻止你修改数组中的任何内容。
您可能需要考虑将byte
的数据类型从int
更改为long long
,因为5554944
循环中使用的for
超出了{int
1}}最大存储值限制。所以,基本上你会一遍又一遍地滚动。
一旦你理解了如何访问音频文件中的数据,你应该真正看到的是在你的输入流上实现的一个好的隐写算法。最简单的算法就是基于LSB的算法。