Tag Archives: C

bmp→wav変換をしてみたけど……

何をしたのか

bmpファイルのヘッダ以外のデータの部分をそのまんまwav化した.
wavファイルのチャンネル数は1, 量子化ビット数は8bitとした. サンプリング周波数は自由に決められるがとりあえず44100kHzにした.
言語はC#. 本体データの読み取りにBinaryReader.ReadBytes()を使った. リトルエンディアンとかはとりあえず気にしないこととした.

ソースコード

usingとかは省く.

static void Main(string[] args)
{
    string name = "bitmap_name";
    BinaryReader br = new BinaryReader(File.OpenRead(name + ".bmp"));

    // ファイルヘッダ
    ushort  bfType = br.ReadUInt16();
    uint bfSize = br.ReadUInt32();
    ushort bfReserved1 = br.ReadUInt16();
    ushort bfReserved2 = br.ReadUInt16();
    uint bfOffBits = br.ReadUInt32();

    // 情報ヘッダ
    uint biSize = br.ReadUInt32(); // 今回は40前提でやる. 
    int biWidth = br.ReadInt32();
    int biHeight = br.ReadInt32();
    ushort biPlanes = br.ReadUInt16();
    ushort biBitCount = br.ReadUInt16();
    uint biCompression = br.ReadUInt32();
    uint biSizeImage = br.ReadUInt32();
    int biXPixPerMeter = br.ReadInt32(); // 水平解像度[ppm]
    int biYPixPerMeter = br.ReadInt32(); // 垂直解像度[ppm]
    uint biClrUsed = br.ReadUInt32();
    uint biCirImportant = br.ReadUInt32();

    byte[] bytemap = br.ReadBytes((int)bfSize);
    double[] doublemap = new double[bytemap.Length];
    for (int i = 0; i < bytemap.Length; i++ )
    {
        doublemap[i] = ((double)bytemap[i] / 255.0);
    }

    // 自作wav管理クラスと書き込み関数 つまりうまい具合にwavにしてください(投げやり)
    // コンストラクタの引数は sampleRate, channels, bitDepth(Eight(8) or Sixteen(16)), sampleRate
    // Write関数の引数は, filename, volume(0.0 ~ 1.0)
    new WaveFile(44100, 1, BitDepthChoices.Eight, doublemap).Write(name + ".wav", 0.1);
    br.Close();
}

結果

音声試聴時の注意 不意に大きな音が流れます. 音量を絞って聞いてください.

画像1
(24bit Color)

画像2
(24bit Color)

画像3
(8bit モノクロ)

改良, 発展案

wav→bmpをしてみる.
頑張ってきれいな絵になる音を探してみると面白そう?
色の割り当てとかどうしようか.

感想

周波数領域のお絵かき(参考 – サウンドスペクトログラムに画像を埋め込む – 人工知能に関する断創録)
があったのでやってみたのだが何とも言えなかった. でも音として聞こえただけマシだったとは思う
3枚目の画像みたいなモノクロだと意外とそれっぽくなる???
画像としても綺麗で, なおかつ, 音声としてもまともに聞こえるような画像は果たしてこの世にあるのか