Generate sound with data bending

Music by C. HUTCHINS » Blog Archive » Headerless Data No.1
Music by C. HUTCHINS » Blog Archive » Virtual Memory (Excerpt)
AIFFファイルのヘッダに適当なデータ(psdファイルとか)をくっつけて再生する、というのをyoupyさんから教えてもらってそれをWAVでやってみた。適当なWAVヘッダにBMPデータくっつけて再生してみたんだけどBMPだと構造が単純なので用意した画像から音がある程度想像できるようになるかもしれない。

WAVヘッダはWave File Format - The Sonic Spotを見ながら適当なファイルから適当にコピペしたのを使っている。

#include <stdio.h>

#define SZ_WAV_HEADER (4 * 10 + 3)
unsigned long* wav_header[] = {
    0x46464952, 0x00a17fe4, 0x45564157, 0x20746d66,
    0x00000010, 0x00020001, 0x0000ac44, 0x0002b110,
    0x00100004, 0x61746164, 0x00a17fc0
};

int main(int argc, char* argv[]) {
    char* filename = argv[1];
    FILE* fp_in;
    int size_in;
    FILE* fp_out;
    unsigned char* buff;
    char out_filename[256];

    fp_in = fopen(filename, "rb");
    fseek(fp_in, 0L, SEEK_END);
    size_in = ftell(fp_in);
    fseek(fp_in, 0L, SEEK_SET);

    buff = malloc(sizeof(unsigned char) * (size_in + SZ_WAV_HEADER));
    memcpy((void*)buff, (void*)wav_header, SZ_WAV_HEADER);
    fread(&buff[SZ_WAV_HEADER], size_in, sizeof(unsigned char), fp_in);
    fclose(fp_in);

    strcpy(out_filename, filename);
    strcat(out_filename, ".out.wav");
    fp_out = fopen(out_filename, "wb");
    fwrite(buff, size_in + SZ_WAV_HEADER, sizeof(unsigned char), fp_out);
    fclose(fp_out);
    free(buff);

    return 0;
}

lameなんかのmp3エンコーダにそのまま適当なデータつっこむ方法もあるみたいです(via kkshow)
.xxx-aiff -Box.net - Free Online File Storage, Internet File Sharing, Online Storage, Access Documents & Files Anywhere, Backup Data, Send Files