转换图像 - >声音--->录制声音---->图像

时间:2013-05-18 16:26:47

标签: java image audio javasound

我正在创建一个执行以下操作的程序:

  1. 将图像(png)转换为声音(wav)。
  2. 播放和录制声音。
  3. 从声音中重现图像。
  4. 程序仅使用图像的红色(来自RGB)值并将它们放在如下的波形文件中:

    将以下单词视为图像中的红色像素值:

    A1 A2 A3 A4
    
    B1 B2 B3 B4
    
    C1 C2 C3 C4       (I am using a square image)
    
    D1 D2 D3 D4
    

    它将它们放在wave文件中:

    A1 A2 A3 A4 B1 B2 B3 B4 C1 C2 C3 C4 D1 D2 D3 D4
    

    问题是当声音播放并录制时,录制的开始时间和结束时间需要与程序产生的声音完全相同(这是永远不可能的)否则像素会像:

    XX XX A1 A2
    
    A3 A4 B1 B2
    
    B3 B4 C1 C2
    
    C3 C4 D1 D2
    

    你的想法是对的!!

    这是我用来将Image转换为Sound的部分代码:

    imgBuffer = ImageIO.read(new File("D:\\Sound_To_Image.png"));
    int[][][] pixels = new int[width][height][3];
    LOOP
    (
    c = new Color(imgBuffer.getRGB(i,j));
    pixels[i][j][0] = c.getRed();
    )
    

    // --------------从2D阵列创建长一维阵列

    byte buf[]=new byte[width*height+1];
    LOOP
    (
    buf[ptr]=(byte)(pixels[x][y][0]);
    )
    
    ByteArrayInputStream bais =new ByteArrayInputStream(buf);
    AudioFormat format = new AudioFormat(20000f, 8, 1, true, false);
    File file = new File("D:\\Image_To_Sound.wav");
    long length = (long)(buf.length / format.getFrameSize());
    AudioInputStream audioInputStreamTemp = new AudioInputStream(bais, format, length);
    AudioSystem.write(audioInputStreamTemp, Type.WAVE, file);
    

    声像的代码是:

    AudioInputStream ais=AudioSystem.getAudioInputStream(wavFile);
    byte[] data=new byte[ais.available()];
    ais.read(data);
    

    // ----------------制作广场图像和图像写作的一面

    int oneSide = (int)Math.ceil(Math.sqrt((double)data.length));
    int temp = data.length;
    System.out.println("lnght="+data.length+"and sqr="+oneSide*oneSide);
    BufferedImage img= new BufferedImage(oneSide, oneSide, BufferedImage.TYPE_INT_RGB);
    
    LOOP
    (
    Color c2=new Color(Math.abs(data[ptr]),0, 0 );
    img.setRGB(i, j, c2.getRGB());
    )
    

    任何帮助将不胜感激。 我坚持了一个多月。

0 个答案:

没有答案