2012-12-12 44 views
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值,而無需傾聽檢測到很多聲音變化。

+2

那麼,是不是'soundData [index] = 42;'夠好了? – 2012-12-12 11:47:04

+0

我愛「int byte;」這就像「長串」 –

+0

我很困惑,究竟是什麼問題?有沒有理由不能用'soundData [byte] = 50;'或者一些unsigned char值寫入它? – Mike

回答

3

soundData不是const,所以你可以使用[]運算符來訪問你的流的字節,並做任何你想要的數據。

1

根據我的理解,你很困惑你需要改變,以便wav文件可以播放。 如果是這樣的問題,你可以從下面的鏈接

Click here to learn Wave file format

所有有關的波形文件格式學習,你可以在數據部分留下關於塊大小等完整的其他細節變化。

0

當您使用%d符打印soundData[byte]for循環,要打印存儲在soundData[byte]。所以字符的ASCII值,你可以輕鬆地訪問,並在任何時間點修改存儲在soundData[byte]數據就像你用普通數組做的一樣。除了它僅僅是unsigned char *,所以沒有任何東西阻止你修改數組中的任何東西。

你可能要考慮從int改變byte的數據類型爲long long因爲for循環使用5554944,是超越int最大存儲值上限。所以,基本上你會一遍又一遍地翻滾。

一旦您瞭解瞭如何訪問音頻文件中的數據,您應該真正關注的是在您的輸入流中實現的良好隱寫算法。最簡單的是基於LSB的算法。