Java 处理,can';使用电影库听不到视频的声音

Java 处理,can';使用电影库听不到视频的声音,java,video,processing,video-processing,Java,Video,Processing,Video Processing,嗨,伙计们, 当我想用处理播放一部电影时,我遇到了问题,因为当我抓取一帧应用卷积掩模的过滤器时,我会丢失声音。一切都很好,但我听不懂,因为我只能听到一秒钟的声音,然后其余的声音就消失了。 这是我的密码: import processing.video.*; //DECLARATION OF OBJECT MOVIE Movie myMovie; //DECLARATION OF IMAGE SOURCE AND IMAGE FILTERED PImage imgOriginal, imgFil

嗨,伙计们, 当我想用处理播放一部电影时,我遇到了问题,因为当我抓取一帧应用卷积掩模的过滤器时,我会丢失声音。一切都很好,但我听不懂,因为我只能听到一秒钟的声音,然后其余的声音就消失了。 这是我的密码:

import processing.video.*;
//DECLARATION OF OBJECT MOVIE
Movie myMovie;

//DECLARATION OF IMAGE SOURCE AND IMAGE FILTERED
PImage imgOriginal, imgFilterContornos;

// CONVOLUTION MASK TO DETECT EDGES
float[][] matrixContorno = { 
{ -1, -1, -1 }, 
{ -1, 8, -1 }, 
{ -1, -1, -1 } };

// DIMENSION OF CONVOLUTION MASK
int matrixsizeContorno = 3;

// OFFSET
int offsetContorno = 128;

final int RED=0, GREEN=1, BLUE=2;

void setup() {
  //LOAD THE VIDEO
  myMovie = new Movie(this, "cartell_cine.mov");
  myMovie.noLoop();
  size(1280, 720);

  myMovie.play();
  frameRate(30);
}

void draw() {

}

// Called every time a new frame is available to read
void movieEvent(Movie m) {
    m.read();
    //GET THE FRAME
    imgOriginal=m; 
    // I CREATE A NEW IMAGE WITH SAME DIMENSIONS AS ORIGINAL
    imgFilterContornos = createImage(imgOriginal.width, imgOriginal.height, RGB);

    // LOADING PIXELES TO ALLOW ACCESS TO ARRAY pixels[]
    imgOriginal.loadPixels();
    imgFilterContornos.loadPixels();

    for (int x = 0; x < m.width; x++) {
      for (int y = 0; y < m.height; y++) {

        // CALCULATING CONVOLUTION
        int r = convolution(x, y, matrixContorno, matrixsizeContorno, offsetContorno, imgOriginal,RED);
        int g = convolution(x, y, matrixContorno, matrixsizeContorno, offsetContorno, imgOriginal,GREEN);
        int b = convolution(x, y, matrixContorno, matrixsizeContorno, offsetContorno, imgOriginal,BLUE);
        // I GET THE NEW PIXEL
        int loc = x + y * imgOriginal.width;
        imgFilterContornos.pixels[loc] = color(r,g,b);

      }
    } 

    imgFilterContornos.updatePixels();
    set(0,0,imgFilterContornos);


}

// METHOD TO CALCULATE DE SPACIAL CONVOLUTION
int convolution(int x, int y, float[][] matrix, int matrixsize, int offset, PImage img, int canal) {
      float result = 0.0;
      int half = matrixsize / 2;

      // Recorremos la matriz de convolución
      for (int i = 0; i < matrixsize; i++) {
        for (int j = 0; j < matrixsize; j++) {
        // Cálculo del píxel sobre el que estamos trabajando
        int xloc = x + i - half;
        int yloc = y + j - half;
        int loc = xloc + img.width * yloc;

        // We make sure that we take a pixel within the valid range. In this case we are
        // applying replication of nearby pixel values ​​to pixel locations
        // coming out of the image
        loc = constrain(loc, 0, img.pixels.length-1);

        // Calculation of the convolution operation
        // Check the value of the corresponding channel
        if (canal==RED)
          result += ((imgOriginal.pixels[loc] >> 16 & 0xFF) * matrix[i][j]);
        else if (canal==GREEN)
          result += ((imgOriginal.pixels[loc] >> 8 & 0xFF) * matrix[i][j]);
          else if (canal==BLUE)
            result += ((imgOriginal.pixels[loc] & 0xFF) * matrix[i][j]);
        }
      }

      // OFFSET
      result += offset;


      result = constrain(result, 0, 255);


      return (int)result;
}
导入处理。视频。*;
//目标影片的声明
电影我的电影;
//图像源和图像过滤的声明
PImage IMGORIGNAL、imgFilterContornos;
//卷积掩模检测边缘
float[][]矩阵xcontorno={
{ -1, -1, -1 }, 
{ -1, 8, -1 }, 
{ -1, -1, -1 } };
//卷积掩模的维数
int matrixsizeContorno=3;
//抵消
int offsetContorno=128;
最终整数红色=0,绿色=1,蓝色=2;
无效设置(){
//加载视频
myMovie=新电影(这是“cartell_cine.mov”);
myMovie.noLoop();
规模(1280720);
我的电影;
帧率(30);
}
作废提款(){
}
//每次有新帧可读取时调用
无效电影事件(电影m){
m、 read();
//拿到镜框
imgOriginal=m;
//我创建了一个与原始图像尺寸相同的新图像
imgFilterContornos=createImage(imgOriginal.width,imgOriginal.height,RGB);
//加载像素以允许访问阵列像素[]
imgOriginal.loadPixels();
imgFilterContornos.loadPixels();
对于(int x=0;x>16&0xFF)*矩阵[i][j]);
否则如果(运河==绿色)
结果+=((imgOriginal.pixels[loc]>>8&0xFF)*矩阵[i][j]);
否则如果(运河==蓝色)
结果+=((imgOriginal.pixels[loc]&0xFF)*矩阵[i][j]);
}
}
//抵消
结果+=偏移量;
结果=约束(结果,0,255);
返回(int)结果;
}

提前谢谢你

只有在计算卷积过程中,声音才会断掉吗?如果您对这5行代码进行注释,会发生什么情况?还可以尝试调整视频大小/位置,并将编辑过的版本并排放置,以查看视频部分发生了什么(您只读取像素,因此如果视频本身未播放,则不会有声音)。嗨,VC。正如您所问,如果我对for中的5行进行注释,声音效果会很好,那么:这可能是卷积过程吗?另一方面,在处理网站上,我读到“如果你想根据新图像立即绘制,那么就使用Movie.available()方法。”因此,如果我使用Movie.available in draw()方法更改我的程序,并使用自身的迭代,那么它可以工作,但存储的帧较少,差不多一半了/