質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Processing

Processingは、オープンソースプロジェクトによるCGのためのプログラミング言語です。Javaをベースにしており、グラフィック機能に特化しています。イメージの生成やアニメーションなど、視覚的なフィードバックを簡単に得ることが可能です。

Q&A

1回答

1509閲覧

Processing3初心者です。void drawで出力した画像をリアルタイムで読み込んで加工したいです。

hetareba

総合スコア4

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Processing

Processingは、オープンソースプロジェクトによるCGのためのプログラミング言語です。Javaをベースにしており、グラフィック機能に特化しています。イメージの生成やアニメーションなど、視覚的なフィードバックを簡単に得ることが可能です。

0グッド

0クリップ

投稿2020/02/26 11:49

音に合わせて動くアニメーションを作っています。出力されたフレームのピクセルを読み込んでリアルタイムで加工したいです。

以下に追加したい内容のコード、追加したけれど上手く行われない状態のコードを記します。
↓追加したい画像を加工する処理です。

Java

1int x, y, pos, i; 2 colorMode(RGB, 255, 255, 255, 255); 3 for (i = 0; i < (width*height); i++) 4 { 5 for(y=10; y<height; y=y+10) 6 { 7 for(x=10; x<width; x=x+10) 8 { 9 pos=(y*width)+x; 10 color c=get(x, y); 11 12 float r=red(c); 13 float g=green(c); 14 float b=blue(c); 15 16 //colorMode(RGB, 255, 255, 255, 255); 17 18 //translate(0,0); 19 stroke(r, g, b, 200); 20 strokeWeight(random(0.1, 10)); 21 point(x, y); 22 23 pixels[i]=pixels[y*width+x]; 24 } 25 } 26 }

↓下記のコードだと、エラーは出ないけれど真っ黒の画面から変わらないです

Java

1 2//OpenGLを使用する準備 3import processing.opengl.*; 4import com.jogamp.opengl.GL; 5 6//Minimを使用する準備 7import ddf.minim.analysis.*; 8import ddf.minim.*; 9 10//Minimの最大音量を設定 11int BUFSIZE=128; 12 13//Minimの変数を設定 14Minim minim; 15 16//オーディオ入力用の変数を設定 17AudioInput in; 18 19//音源再生用の変数を設定 20AudioPlayer player; 21 22//FFTの変数を設定 23FFT fft; 24 25//OpenGLの変数を設定 26GL gl; 27 28//プログラム開始時の事前準備 29void setup() 30{ 31 32 //キャンバスサイズを設定すると同時にOpenGLの使用を宣言する 33 size(600, 600, OPENGL); 34 35 //FrameRateを設定 36 frameRate(24); 37 38 //カラーモードをHSBに指定 39 colorMode(HSB, 360, 100, 100, 100); 40 41 //線を描画しないように設定 42 noStroke(); 43 44 //OpenGLを有効にする 45 PGL pgl = (PJOGL) beginPGL(); 46 gl=((PJOGL) pgl).gl; 47 gl.setSwapInterval(1); 48 49 //Minimを生成する 50 minim=new Minim(this); 51 52 //AudioPlayerの初期化 53 player=minim.loadFile("sample.wav"); 54 55 //minimからオーディオ入力源を取得する 56 in=minim.getLineIn(Minim.STEREO, BUFSIZE); 57 58 //ステレオオーディオ入力をFFTと関連づける 59 fft=new FFT(in.bufferSize(), in.sampleRate()); 60 61 62 63 //背景を黒く塗りつぶす 64 background(0); 65 66 loadPixels(); 67} 68 69//描画内容を設定 70void draw() 71{ 72 //背景を黒く塗りつぶす 73 background(0); 74 75 loadPixels(); 76 77 //音源を再生する 78 player.play(); 79 80 /*描画内容をフェードさせるように背景を塗りつぶす 81 backgroundFade(); 82 83 描画内容を画面中央に移動させる 84 translate(width/2, height/2);*/ 85 86 //OpenGLを用いて描画内容を加算混色する 87 gl.glBlendFunc(GL.GL_SRC_ALPHA, GL.GL_ONE); 88 89 /*左側の同心円を描画するために座標の位置を下のように変更する 90 x: 画面中央からキャンバスの8分の1左に 91 y: 画面中央に*/ 92 translate(width/2-width/8, height/2); 93 94 //FFTを実行する 95 fft.forward(in.left); 96 97 //左側の同心円を描画 98 for(int i=0; i<fft.specSize(); i++) 99 { 100 //周波数を色相にマッピングする 101 float h=map(i, 0, fft.specSize(), 0, 300); 102 103 //周波数を円の直径にマッピングする 104 float r=map(i, 0, fft.specSize(), 0, width); 105 106 //音量を透明度にマッピングする 107 float a=map(fft.getBand(i), 0, in.bufferSize()/2.0, 0, 255); 108 109 //塗りつぶし色を指定する 110 fill(h, 100, 100, a); 111 112 //円を描画する 113 ellipse(0, 0, r, r); 114 } 115 116 /*右側の同心円を描画するために座標位置を下のように変更する 117 x: キャンバスの4分の1右に 118 y: 画面中央に*/ 119 translate(width/4, 0); 120 121 //FFTを実行する 122 fft.forward(in.right); 123 124 //右側の同心円を描画 125 for(int i=0; i<fft.specSize(); i++) 126 { 127 //周波数を色相にマッピングする 128 float h=map(i, 0, fft.specSize(), 0, 300); 129 130 //周波数を円の直径にマッピングする 131 float r=map(i, 0, fft.specSize(), 0, width); 132 133 //音量を透明度にマッピングする 134 float a=map(fft.getBand(i), 0, in.bufferSize()/2.0, 0, 255); 135 136 //塗りつぶし色を指定する 137 fill(h, 100, 100, a); 138 139 //円を描画する 140 ellipse(0, 0, r, r); 141 } 142 143 int x, y, pos, i; 144 colorMode(RGB, 255, 255, 255, 255); 145 for (i = 0; i < (width*height); i++) 146 { 147 for(y=10; y<height; y=y+10) 148 { 149 for(x=10; x<width; x=x+10) 150 { 151 pos=(y*width)+x; 152 color c=get(x, y); 153 154 float r=red(c); 155 float g=green(c); 156 float b=blue(c); 157 158 //colorMode(RGB, 255, 255, 255, 255); 159 160 //translate(0,0); 161 stroke(r, g, b, 200); 162 strokeWeight(random(0.1, 10)); 163 point(x, y); 164 165 pixels[i]=pixels[y*width+x]; 166 } 167 } 168 } 169 updatePixels(); 170} 171 172//プログラム終了時の処理を設定する 173void stop() 174{ 175 minim.stop(); 176 super.stop(); 177}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

回答にはなっていないのですが、

まずどう考えてもループ回数が多すぎです。
600 * 600 * 59 * 59 = 1,253,160,000

color c=get(x, y);

これが遅いからloadPixels()するのだと思います。
color c=pixels[y*width+x];

point(x, y);

も同様ですがどうするのがいいのか。。。

pixels[i]=pixels[y*width+x];

iは一番外のループ変数ですから、内側が回っている間は変わりません。
結局pixels[i]=pixels[590*width+590]と、すべてのピクセルが右下のほうの同じ色(黒?)になってしまいます。

やりたい具体的な処理と参考にしたサイトやコードがあるなら、提示していただくとよいと思います。

投稿2020/02/26 14:15

編集2022/09/16 03:59
TN8001

総合スコア9326

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問