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

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

ただいまの
回答率

90.34%

  • Processing

    286questions

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

processingで音声再生メニューを作りたい

受付中

回答 0

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 96

iwi

score 0

 前提・実現したいこと

現在processingで音声再生のメニュー画面を制作しています。

画面を開くとOPの音声再生→メニュー画面→クリックで音が再生→再生終了後またマウスクリックで再生できるようになる→3,6,9回選択すると強制イベントで音が再生する→メニュー画面に戻る

というものを作成したいのですが
・音を再生中に他のところをクリックすると音が再生してしまって被ってしまう
・強制イベントがうまく動かない

という問題点があります。
補足にありますのが現在のコードです。
汚いコードですが、やり方を教えてくださると嬉しいです。

 発生している問題・エラーメッセージ

 該当のソースコード

import processing.sound.*;

AudioDevice device;
SoundFile[] file;




int count=0;//日記ページから戻る回数
int article=0;//0は未選択状態
int cl=0;



long t0; //再生時間管理用


PImage selectPic;//選択画面背景
final int ARTICLE_NUM=18; //日記記事が3本
int value[] = {0, 0, 0};
PImage[] img=new PImage[ARTICLE_NUM];

void setup() {
  size(1024, 768);
  frameRate(30);




  selectPic= loadImage("menu.png");


  device = new AudioDevice(this, 48000, 32);
  file = new SoundFile[ARTICLE_NUM];

  file[0] = new SoundFile(this, "1.wav");
  file[1] = new SoundFile(this, "2.wav");
  file[2] = new SoundFile(this, "3.wav");
  file[3] = new SoundFile(this, "6.wav");
  file[4] = new SoundFile(this, "9.wav");
  file[5] = new SoundFile(this, "22.wav");
  file[6] = new SoundFile(this, "29e.wav");
  file[7] = new SoundFile(this, "40.wav");
  file[8] = new SoundFile(this, "50.wav");
  file[9] = new SoundFile(this, "51.wav");
  file[10] = new SoundFile(this, "74.wav");
  file[11] = new SoundFile(this, "3.wav");
}


void mouseClicked() {
  cl++;
  if (mouseButton == LEFT) {
    //左ボタンが押して離されたら処理する 
    if ( mouseX > 40 && mouseX < 250 &&
      mouseY > 110 && mouseY < 150 ) { 
      //押された座標が「ある範囲」なら
      //シーンを進める
      file[1].play();

    }else   if ( mouseX > 40 && mouseX < 250 &&
      mouseY > 180 && mouseY < 220 ) { 
      //押された座標が「ある範囲」なら
      //シーンを進める
      file[2].play();
    }else   if (mouseX > 40 && mouseX < 250 &&
      mouseY > 250 && mouseY < 290 ) { 
      //押された座標が「ある範囲」なら
      //シーンを進める
      file[3].play();

    }else   if ( mouseX > 40 && mouseX < 250 &&
      mouseY > 320 && mouseY < 360 ) { 
      //押された座標が「ある範囲」なら
      //シーンを進める
      file[4].play();
    }else   if (mouseX > 40 && mouseX < 260 &&
      mouseY > 390 && mouseY < 430 ) { 
      //押された座標が「ある範囲」なら
      //シーンを進める
      file[5].play();

    }else   if ( mouseX > 40 && mouseX < 260 &&
      mouseY > 460 && mouseY < 500 ) { 
      //押された座標が「ある範囲」なら
      //シーンを進める
      file[6].play();

    }else   if ( mouseX > 40 && mouseX < 260 &&
      mouseY > 530 && mouseY < 570 ) { 
      //押された座標が「ある範囲」なら
      //シーンを進める
      file[7].play();

    }else   if ( mouseX > 40 && mouseX < 260 &&
      mouseY > 600 && mouseY < 640 ) { 
      //押された座標が「ある範囲」なら
      //シーンを進める
      file[8].play();

    }else if ( mouseX > 380 && mouseX < 600 &&
      mouseY > 110 && mouseY < 150 ) { 
      //押された座標が「ある範囲」なら
      //シーンを進める
      file[9].play();

    }else   if (  mouseX > 380 && mouseX < 600 &&
      mouseY > 180 && mouseY < 220 ) { 
      //押された座標が「ある範囲」なら
      //シーンを進める
      file[10].play();

    }else   if (  mouseX > 380 && mouseX < 600 &&
      mouseY > 250 && mouseY < 290 ) { 
      //押された座標が「ある範囲」なら
      //シーンを進める
      file[11].play();

    }else   if (  mouseX > 380 && mouseX < 600 &&
      mouseY > 320 && mouseY < 360 ) { 
      //押された座標が「ある範囲」なら
      //シーンを進める
      file[12].play();

    }else   if (  mouseX > 380 && mouseX < 600 &&
      mouseY > 390 && mouseY < 430 ) { 
      //押された座標が「ある範囲」なら
      //シーンを進める
      file[13].play();

    }else   if (  mouseX > 380 && mouseX < 600 &&
      mouseY > 460 && mouseY < 500 ) { 
      //押された座標が「ある範囲」なら
      //シーンを進める
      file[14].play();

    }else   if (  mouseX > 380 && mouseX < 600 &&
      mouseY > 530 && mouseY < 570 ) { 
      //押された座標が「ある範囲」なら
      //シーンを進める
      file[15].play();

    }else   if (  mouseX > 380 && mouseX < 600 &&
      mouseY > 600 && mouseY < 640 ) { 
      //押された座標が「ある範囲」なら
      //シーンを進める
      file[16].play();

    }
  }
  if (cl==0) {//'b'が押されたら
   file[0].play();
   }else if(cl==6){
   file[6].play();
   }else if(cl==9){
   file[6].play();
   }else if(cl==12){
   file[6].play();
   }
}

int mode = 0;
void draw() {
  //file[0].play();
  noLoop();

  tint( 255.0, 84 );
  image(selectPic, 0, 0, 1024, 768);


}

 試したこと

ここに問題に対して試したことを記載してください。

 補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

まだ回答がついていません

同じタグがついた質問を見る

  • Processing

    286questions

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