Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 转换图像-->;声音-->;录制声音-->;形象_Java_Image_Audio_Javasound - Fatal编程技术网

Java 转换图像-->;声音-->;录制声音-->;形象

Java 转换图像-->;声音-->;录制声音-->;形象,java,image,audio,javasound,Java,Image,Audio,Javasound,我正在创建一个具有以下功能的程序: 将图像(png)转换为声音(wav) 播放和录制那个声音 从声音中复制图像 该程序仅使用图像的红色(来自RGB)值,并将其放入如下波形文件中: A1 A2 A3 A4 B1 B2 B3 B4 C1 C2 C3 C4 D1 D2 D3 D4 将以下文字视为图像中的红色像素值: A1 A2 A3 A4 B1 B2 B3 B4 C1 C2 C3 C4 (I am using a square image) D1 D2 D3 D4 它将它们放在w

我正在创建一个具有以下功能的程序:

  • 将图像(png)转换为声音(wav)
  • 播放和录制那个声音
  • 从声音中复制图像
  • 该程序仅使用图像的红色(来自RGB)值,并将其放入如下波形文件中:

    A1 A2 A3 A4 B1 B2 B3 B4 C1 C2 C3 C4 D1 D2 D3 D4
    
    将以下文字视为图像中的红色像素值:

    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
    
    你的想法是对的

    下面是我用来将图像转换为声音的部分代码:

    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();
    )
    
    //--------------从二维阵列创建长一维阵列

    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());
    )
    
    任何帮助都将不胜感激。
    我在这个问题上纠结了一个多月。

    “你的想法是对的!!”不是真的。为了更快地得到更好的帮助,发布一条消息。我不明白这个问题!它似乎与实时管理音频有关,因此这里有一个链接,指向Java音频“实时”问题的一般背景。也许会有帮助。“Java实时低延迟音频处理”。