脳波のミニ実験で分かったこと

はじめに

 こんにちは、アンです。2022年10月、簡易脳波計を用いてミニ実験を2回行いました。この実験で分かったことを紹介します。

図1:Pulse Wave - Samuel YAN, 2022(脳波データのcsvファイル使用)

簡易脳波計と脳波データ

 今回使用した簡易脳波計はFocus Calmです。脳波データの取得に使ったアプリはGoodBrainです。Focus Calmを使ってGoodBrainのアプリからalpha、beta、delta、theta、gammaの5種の脳波データのcsvファイル(図2)が得られます。

図2:csvファイルのスクリーンショット

実験1

概要

 ノイズが人間の脳に与える影響を分析するため、簡易脳波計を使って、三つのシーンで、5分間ずつ自分の脳波を測りました。

実験日

 2022.10.13 (5pm)

実験時間

 15 min(5 min * 3つのシーン)

騒音の音源

 無料で使用可、ダウンロード可(図3)の音源データを使用しました。[1]

図3:実験中使用した音源

音源の加工

 3つの音のファイルからそれぞれ1分間を切り取ってつなぎ、前後に各1分間の空白を加えて5分間のテスト音源ファイルを制作しました。

実験内容

 下記のそれぞれの場合に、加工した騒音の音源を流し、実験を行います。

  • ミュージックビデオを見るとき

  • 本、文章を読むとき

  • 集中したい作業(コーディング)のとき

実験結果

 図1のような計測した生データに基づいて、Excelを使って下記の図4、図5、図6を制作しました。

図4:実験1-ミュージックビデオを見るときの脳波データ
図5:実験1-本を読むときの脳波データ
図6:実験1-コーディングのときの脳波データ

データ分析
  • 動画を見るとき、本を読むときの場合、騒音と静音の変化の間に脳波のデータに激しい変化(図4と図5のなかのオレンジ色の部分)がありました。作業するときの場合は、そのような変化がないです。

  • リラックスできるとき(図4)より、脳が働くとき(図5と図6)脳波の信号が強い(特に図6のなかでのgamma波とbeta波)です。

問題点

 実験の時間が短いので、データを見るだけでは、騒音環境と静音環境が区別されないです。

実験2

概要

 実験1の問題点を解決ため、実験2で、静音、音楽、騒音の3つの音環境と、3つのシーン、それぞれの場合を組み合わせて、9回の5分間の自分の脳波を計測しました。

実験日

 2022.10.23

実験時間

 45 min(5 min * 3つの音環境 * 3つのシーン)

騒音の音源

 実験1と同じ

音環境の設定
  • 音環境1:静音(通常)

  • 音環境2:音楽

  • 音環境3:騒音

実験内容

 3つの音環境で下記のそれぞれの場合で、実験を行います。

  • 集中したい作業(コーディング)のとき

  • 本、文章を読むとき

  • ゲームをするとき

実験結果

 計測した生データに基づいて、Excelを使って下記の図7のなかにある9個の折れ線グラフと図8の集中力についてのグラフを制作しました。

図7:実験2-9個の折れ線グラフ
図8:実験2-集中力

データ分析
  • 図7を見ると、作業とゲームの場合より読書のときに、音楽、騒音の環境で脳にあきらかな影響があります。

  • 図7を見ると、読書の場合より作業とゲームのときに、脳のgamma波とbeta波の信号が強いです。

  • 図8を見ると、読書とゲームをするとき、静音環境と比べて、音楽環境と騒音環境での集中力が低下しています。

実験1と実験2を総合的に分析した結果

  • 作業などの集中しやすいときに比べ、リラックスできるときの場合で、騒音の音環境で脳波の変化が簡易脳波計で計測されやすいです。

  • この分析結果だけでは、ノイズと人間の感情の関係は曖昧で判明できないです。

さいごに

  2回のミニ実験で計測したデータを分析した結果を紹介しました。自分の脳を使って測ったデータを簡単に分析したので、厳密な結果ではありませんが、ノイズが人間に与えた影響が脳波計で計測できました。これから、簡易脳波計を用いて、ノイズと人間の関係の考察や実験を引き続き行います。

参考資料

[1] 実験に使った音源:

OpenCVで画像にモザイクかけてみた

はじめに

こんにちは,光岡です.

久しぶりの投稿になってしまいました. 最近はレコメンドシステムの勉強をやっている関係でPythonに触れています.講義の課題に対して,Pythonで何か作れないかな~と思っていたところ,OpenCVが使えそう!となり,簡単なモザイク処理を試してみたので,この内容について書いてみたいと思います!

OpenCVとは

OpenCVとは,画像・動画に関する処理機能をまとめたオープンソースのライブラリになります. Intelが開発したOSSで,画像・動画の中に存在する物体の位置情報・パターン・動きをプログラムで識別することが可能です.

モザイクのかけ方

モザイクをかける手順としては,まずモザイク処理をしたい領域を一度小さいサイズに縮小します.今回は画像全体に対してモザイクをかけたかったので,画像全体を縮小します.縮小する際は,cv2.resize()を利用しました.
縮小する際には,最近傍補間が行われます.不要な画素を削る間引き処理を行うことで,見た目が粗い状態になります.

次に縮小した画像を元のサイズに拡大することで,モザイクがかかった粗い状態で出力することができます.拡大する際にもcv2.resize()を利用します.

実装

今回の実装では,O-DANで検索して見つけた画像をダウンロードして利用しました.

import cv2

def mosaic(img, ratio=0.1):
  h, w = img.shape[:2]
  reduced_img = cv2.resize(
    img,
    dsize=None,
    fx=ratio,
    fy=ratio,
    interpolation=cv2.INTER_NEAREST,
  )
  enlarged_img = cv2.resize(
    reduced_img,
    dsize=(w, h),
    interpolation=cv2.INTER_NEAREST,
  )
  return enlarged_img

img = cv2.imread('./shibuya.jpg')

ratio = float(input())
mosaic_img = mosaic(img, ratio=ratio)
cv2.imwrite("./shibuya_{}.jpg".format(ratio), mosaic_img)

結果

モザイク度合いを標準入力できるようにし,いくつかモザイク処理を施した画像を出力してみました.

  • 元画像

  • 0.01

  • 0.005

  • 0.001

まとめ

ライブラリを使うことで簡単に実装することができました! 現状,講義の課題で少し使うぐらいしか予定がありませんが,今後機械学習の勉強を進めていく際にOpenCVも使っていきたいと思いました.
以上になります.最後まで読んでいただきありがとうございました.

参考記事

【OpenCV】できることや特徴をわかりやすく解説 | 侍エンジニアブログ

OpenCV - 画像にモザイク処理を行う方法について - pystyle

C言語で画像の拡大縮小(最近傍補間編) | だえうホームページ

画像の拡大縮小・リサイズの原理、アルゴリズムによる違いを解説! | だえうホームページ

Python, OpenCVで画像にモザイク処理(全面、一部、顔など) | note.nkmk.me

「質問力を鍛える」ことを決意しました-02

はじめに

こんにちは。ネットワークデザインスタジオM1の及川です。
今回は、前回( 「質問力を鍛える」ことを決意しました - ネットワークデザインスタジオのブログ )に引き続き、「質問力」に関して書こうと思います。

本を読んでみて

前回紹介した、ひきたよしあき『博報堂クリエイティブプロデューサーが明かす 「質問力」って、じつは仕事を有利に進める最強のスキルなんです。 』(大和出版)を読み終えました。
本自体の感想としては、会話ベースで書かれているため、大変読み進めやすかったです。
内容に関して印象に残っていることは、深い答えを引き出すためには、「現状」「理想」「そのギャップを埋めるためには」の順で質問を立てるということです。
この順番で質問することで、相手も答えやすい状況を作り出すことができ、通常よりも深い質問を掘り出せるそうです。
実際に、近頃受けた面接にて、「現在のスキル」「理想のエンジニア像」「そのために必要なステップ」という順番で質問をされました。
この順番で質問に答えることで、自分の頭の中が整理されることを実感しました。
今回は自分が質問される側でしたが、今後は、自分が質問する際や自分自身に対して3つの質問を順番に立てることを意識しようと思います。

質問をする機会が増えて

最近は、就職活動が活発になり、面接・面談を受ける機会が多々ありました。
質問をする機会が増えていくに伴って、自分の中でいくつかの発見がありました。
その中でも強く感じるのが、相手の体験を引き出すように質問をすることが大切であるということです。
例えば、「御社の強みはなんですか。」ではなく、「○○さんが入社前に考えていた御社の強みと、入社後に感じる強みにはギャップがありますか。」と質問をするようにしています。
前者の質問方法で聞ける「強み」は、その企業が掲げている一般的な強みであることが多いと気づきました。また、個人的な考えですが、「またこの質問か…」と思われていると感じます。 一方後者の質問方法だと、その人ならではのエピソードを聞き出すことができると感じています。
例えば、「入社前は◯◯だと思っていたんだけど、入ってみると実際そんなことはなくて〜。例えば〜〜みたいなことがあったんだよね。」と実体験を伺えることが多く、より質問に対する答えを引き出すことができると感じます。

おわりに

この1ヶ月間で、少しは「質問力」が身についたのではないかと思います。
今後は、ここで学んだことを内省にもいかし、研究や自身の成長にもつなげていけるよう意識したいと思います。
今後も「質問力」を鍛えられるよう努力します!

参考文献

daiwashuppan.com

csvファイルを読み込んだLED点滅回路の開発

-ArduinoとProcessingを連携させて脳波データのcsvファイルを読み込む-

目次

はじめに

 こんにちは、アンです。

 今年から、簡易脳波計による脳波のデータを用いた、ジェネラティブアートやインタラクティブアートについての表現を研究しています。最近、新しい簡易脳波計が研究室に届きました。10分ほど自分の脳波を測り、データのcsvファイルを手に入れました。ArduinoとProcessingを連携させて、脳波データのcsvファイルを読み込んだLED点滅回路を作ってみました。今回は、その回路の作り方を紹介します。

簡易脳波計と脳波データ

 今回使用した簡易脳波計はFocus Calmです。脳波データをやり取りするときに使用したアプリはGoodBrainです。Focus Calm を使うことで、GoodBrainのアプリからalpha、beta、delta、theta、gammaの5種の脳波データのcsvファイル(図1)を取り込めます。今回は、研究室にて英語の文献を読んだ時に10分ほど計測した、alpha波のデータを使用します。

図1:csvファイルのスクリーンショット

Arduino上のLED点滅

 これまで、電子工作の経験がなかったため、ゼロからArduinoについての知識を勉強しました。基本的な物理学の知識とプログラミングの経験があったため、Arduinoの入門や基本的な操作方法はそれほど難しくありませんでした。

  • 回路のデザインと部品のつなぎ

     今回の回路は、Arduino IDE 2.0.0のソフトウェアにある内蔵のスケッチ例のBlinkInputPullupSerialをもとにデザインしました。下の表のなかの部品を図2のように繋ぎます。

部品名 数量
ARDUINO UNO 1
ブレットボード 1
LED (5mm) 4
抵抗 (200R) 4
タクトスイッチ 1
USBケーブル 1
ジャンパーワイヤー 13

図2:Arduino回路

  • プログラミング

     下のように書きました。

boolean pushButton;
void setup() {
  pinMode(2, INPUT_PULLUP);
  pinMode(8, OUTPUT); // green
  pinMode(9, OUTPUT); // yellow
  pinMode(10, OUTPUT); // red
  pinMode(12, OUTPUT); // white
}
void loop() {
  int  myLightNow;
  if (!pushButton ) {
    myLightNow = int(random(0, 5));
  } else {
    myLightNow = 0;
  }
  switch (myLightNow) {
    case 1: // white
      digitalWrite(12, HIGH);
      delay(100);
      digitalWrite(10, LOW);
      digitalWrite(9, LOW);
      digitalWrite(8, LOW);
      break;
    case 2: // red
      digitalWrite(12, LOW);
      digitalWrite(10, HIGH);
      delay(100);
      digitalWrite(9, LOW);
      digitalWrite(8, LOW);
      break;
    case 3: // yellow
      digitalWrite(12, LOW);
      digitalWrite(10, LOW);
      digitalWrite(9, HIGH);
      delay(100);
      digitalWrite(8, LOW);
      break;
    case 4: // green
      digitalWrite(12, LOW);
      digitalWrite(10, LOW);
      digitalWrite(9, LOW);
      digitalWrite(8, HIGH);
      delay(100);
      break;
    default:
      digitalWrite(12, LOW);
      digitalWrite(10, LOW);
      digitalWrite(9, LOW);
      digitalWrite(8, LOW);
      break;
  }
}

  • デモ動画

     USBケーブルを使ってPCと繋げます。プログラミングをマイコンボードに書き込んだら、タクトスイッチを押しながら、4つのLEDをランダムで点滅させます。

csvファイルを読み込む方法

 次に、脳波データのcsvファイルを上記にあるランダムのデータと入れ替える方法を紹介します。調べてみたところ、直接にArduinocsvファイルを読み込むのは難しいと感じました。そのため、他のツールを探しました。今回使っていたのはProcessingです。主にProcessingにおけるTableを使います。

 次のようにProcessingでコードをを書くことで、csvファイルのデータを読み込めます。

Table a;
int[] lightIndex;
int data_Row;
int count;
void setup() {
  size(300, 300);
  a = loadTable("name.csv", "header");
  data_Row = a.getRowCount();
  lightIndex = new int[data_Row];
  count = 0;
  for (int i = data_Row - 1; i >= 0; i--) {
    lightIndex[i] = a.getFloat(i,0);
  }
}

(具体的な説明は参考資料[1]をご覧ください)

 そして、ProcessingのライブラリーのSerialを用いることで、Processingに読み込んだデータをArduinoに読み込めます。下にあるのはコードの例です。

import processing.serial.*;
Serial port;
Table a;
int[] lightIndex;
int data_Row;
int count;
void setup() {
  size(300, 300);
  port = new Serial(this, "/dev/cu.usbmodem14101", 9600);
  a = loadTable("BrainWaveData_0912_01_Samuel.csv", "header");
  data_Row = a.getRowCount();
  lightIndex = new int[data_Row];
  count = 0;
  for (int i = data_Row - 1; i >= 0; i--) {
    lightIndex[i] = int( a.getInt(i,0))/2;
 }
}
void draw() {
  if (count < data_Row) {
    port.write(lightIndex[count]);
    count ++;
  }
}

(具体的な説明は参考資料[2]をご覧ください)

  • Arduinoのコード

     Arduino側にもSerialを使ってprocessingからのデータを読み込めます。

boolean pushButton;
void setup() {
  Serial.begin(9600);
  pinMode(2, INPUT_PULLUP);
  pinMode(8, OUTPUT); // green
  pinMode(9, OUTPUT); // yellow
  pinMode(10, OUTPUT); // red
  pinMode(12, OUTPUT); // white
}
void loop() {
  int  myLightNow;
  if (Serial.available() > 0) {
    char data = Serial.read(); // データを読み込む
    if (!pushButton ) {
      myLightNow = int(data);
    } else {
      myLightNow = 0;
    }
    switch (myLightNow) {
      case 1: // white
        digitalWrite(12, HIGH);
        delay(100);
        digitalWrite(10, LOW);
        digitalWrite(9, LOW);
        digitalWrite(8, LOW);
        break;
      case 2: // red
        digitalWrite(12, LOW);
        digitalWrite(10, HIGH);
        delay(100);
        digitalWrite(9, LOW);
        digitalWrite(8, LOW);
        break;
      case 3: // yellow
        digitalWrite(12, LOW);
        digitalWrite(10, LOW);
        digitalWrite(9, HIGH);
        delay(100);
        digitalWrite(8, LOW);
        break;
      case 4: // green
        digitalWrite(12, LOW);
        digitalWrite(10, LOW);
        digitalWrite(9, LOW);
        digitalWrite(8, HIGH);
        delay(100);
        break;
      default:
        digitalWrite(12, LOW);
        digitalWrite(10, LOW);
        digitalWrite(9, LOW);
        digitalWrite(8, LOW);
        break;
    }
  }
}

  • デモ動画

     動画のように脳波データのcsvファイルを使ってLED点滅をさせました。

さいごに

  今回、脳波データのcsvファイルを使用したLED点滅回路の開発を簡潔に紹介しました。「電子工作」、「IoT」、「Arduino」の魅力を感じました。これからも、ジェネラティブアートやインタラクティブアートの表現についての機能などを開発し続けたいと思います。

参考資料

競プロ入門 - 探索問題の解法テンプレ-

はじめに

こんにちは,光岡です.

最近少しだけですが,競技プログラミングを始めました. コンテストに参加しているわけではなく,現状だとコーディングテスト対策がメインになっていますが,慣れてきたら参戦してみたいです.

まずは基本の全探索から始めてみるか〜と思い,AtCoderの問題を解いているのですが,単純にfor文を回すと時間切れ(TLE: Time Limit Exceeded)になる問題あたりから,すんなり正解できなくなってきました..

そこで,探索系の問題が出たときの自分用の解法のテンプレ集を作ってみました!

解き始めに確認すること

実行回数を見積もる

問題を解き始める際に最初に確認することは, ズバリ,単純にfor文を回すだけでOKな問題か確認することです!

AtCoderでは,処理の制限時間は1~2秒,1秒あたり108回程度の計算が可能と言われています.

つまり,単純なfor文を回した際に,2 * 108を超えないか,実行時間を見積もることが大事です.

自分は最初なんとなくコードを書き始めてしまっていたので,コードを提出してみたらTLE→修正のサイクルでやってしまってました..

工夫

単純にfor文を回すとTLEになってしまう...そんな時は,問題文を注意深く読み,処理が減らせないか考えます. そのために,全探索問題に出会った時に,使える可能性のあるテクニックをまとめてみます.

for文で考慮すべき上限を確かめる

atcoder.jp

問題文
正整数 X が与えられます。 X 以下の最大のべき乗数を求めてください。 ただし、べき乗数とは、ある 1 以上の整数 b と 2 以上の整数 p を使って bpとかける整数のことを指すこととします。

制約
1 ≤ X ≤ 1000
X は整数

この問題の制約では,べき乗数がいくつまでかの記載はありませんが,1以上の整数(1は何乗しても1のため,2で考える)と記載あるため,2x が1000を超える時が,べき乗数pの最大値になります.
つまり,210 = 1024 より,2 ≤ X ≤ 10を考慮して,for文を回すと余計な処理を行わずに,実装することができます.

条件から残りの変数を導き出す

atcoder.jp

問題文
2 つの整数 K,S が与えられます。
3 つの変数 X,Y,Z があり、0≦X,Y,Z≦K を満たす整数の値を取ります。
X+Y+Z=S を満たす X,Y,Z への値の割り当ては何通りありますか。

制約
2≦K≦2500
0≦S≦3K
K,S は整数である。

何も考えずに解き始めると,for文でX, Y, Zの3回分回そうとしてしまいがちですが,
X+Y+Z=Sより,for文2回で,X, Yを指定した段階で,Z=S-X-Yにより,for文2回のままZを導き出すことができます.

実行時間の見積もりも,for文3回だと,
2500^3 = 2.5^3 * 10^9 > 2 * 10^8
となりTLEしますが,for文2回だと,
2.5^2 * 10^6 < 2 * 10^8
となり,TLEしなくなります!

bit全探索

一回の操作が2通り(スイッチのON/OFF,硬貨が表/裏,...)の時,つまり*2N通りを全探索する際は,二進数を使います!

使える問題
複数ある商品(最大 2020 個程度)それぞれについて『買う』『買わない』とか、複数ある整数をそれぞれについて『選ぶ』『選ばない』といった、2 種類の選択肢が複数ある問題

bit全探索でやること
そのタイプの問題で、『ありえる選択肢の組み合わせ方を全てもれなく列挙』して、『一つ一つの組み合わせに対して計算や判定を行う』ことで、答えを見つけるアルゴリズム

こわくないbit全探索1 入門編: bit全探索ってなに?【競プロ解説】 - Qiita

bit全探索が主題された時のテンプレとしては下記の記事がとてもわかりやすく,参考にしています.論理積&, ビットシフトに関しての記載はここでは割愛しますが,気になったらぜひ確認してみてください!

bit全探索で沼った!! - Qiita

参考コード

for i in range(2**N):
    for j in range(N):
        if (i>>j) & 1:

bit全探索の注意点
組み合わせは2N通り.指数関数的に増えるため,実装時間の見積もりに注意が必要です.

Python3 → PyPy3 で提出

これはPythonを利用している方限定ですが,言語指定をPyPyにするだけで処理速度が速くなり,フィボナッチ数列の出力では約2.4倍速いそうです.ギリギリTLEしていたら,正解(AC: Accepted)になる可能性あります!


PyPyの説明については下記記事で確認してみてください!

www.sejuku.net

おわりに

まだまだ色々な全探索の解法があり,今回取り上げたのは一部ですが,今後もまとめたいものを追記していきたいと思います!

参考記事

atcoder.jp

qiita.com

atcoder.jp

atcoder.jp

atcoder.jp

www.sejuku.net

qiita.com

qiita.com

qiita.com

「質問力を鍛える」ことを決意しました

はじめに

こんにちは。ネットワークデザインスタジオM1の及川です。
更新が遅れてしまいました。
今回は、「質問力」に興味を引かれた理由と、「質問力を鍛えるぞ」という決意について書こうと思います。

なぜ質問力が欲しくなったのか

私が質問力に興味を引かれたのには、2つのエピソードが大きな影響を及ぼしています。

1つ目のエピソードは、大学および大学院の前期期末公開発表です。
前期期末公開発表とは、前期に進めてきた卒業制作や修士論文について発表し、学科の先生方から意見や質問をもらうことで研究を深める場です。この発表会を通して2つのことを感じました。

まず1つ目、学科の先生方はつい1分前に聞いたことに対して、どうしてすぐに質問を投げかけられるのだろうという疑問。

次に2つ目は、学科の先生から投げられた質問(そこまで深い質問ではない)に「それは考えられていませんでした、今後検討します。」と回答する学生の多さです。

これらの状況を見て、私は自分の研究に対する質問にはしっかりと自信を持って答えたいし、他の人の研究にももっと質問をしたいと思いました。質問を出せる、質問に回答をできるというのは、密接に関係しているのではないかと思います。質問を投げかけられる人は、おそらく自分の研究についても自問自答によって質問を投げかけていますし、答えを考えているのではないでしょうか。

2つ目のエピソードは、就活に向けたサマーインターンのための面接です。
企業の面接では、「逆質問の時間」が10分から20分程度設けられることが多いと思います。しかし、私は面接に向けて準備をする中で、質問が全く浮かび上がってきませんでした。

そこで、「面接 逆質問」と検索をしました。すると、「逆質問が思いつきません。どんなことを聞けばいいのでしょうか。」と言う内容の質問がYahoo!知恵袋にありました。この質問者に対する回答は厳しいものでした。「興味があるなら自ずと思い浮かぶはずだ。思い浮かばないなら受けるな。」などという回答が多いのです。その回答を見て、私としては興味を持ってその企業を見ているつもりなんだけどなあ、もしかしてどこにも就職できないのでは…と、悲しくなりました。

これら2つのエピソードから、私は「質問力を鍛える」ことを決意しました。

おわりに

まずは、質問力に関する本を読んでいくことにしました。ひきたよしあき『博報堂クリエイティブプロデューサーが明かす 「質問力」って、じつは仕事を有利に進める最強のスキルなんです。 』(大和出版)と、北村 良子『1日1問! 面白いほど地頭力がつく思考実験』(PHP研究所)を購入したので、実践していきたいと思います。そして、その経過を自分の記録用としてこちらのブログに残せればと思います。 daiwashuppan.com www.php.co.jp 今回は決意表明のみでした。私は3日坊主になりがちなので、この場で皆さんに見張ってもらえればと思います。

ノイズとアートの間にはどんな関係があるのか

目次

はじめに

 こんにちは、アンです。

 最近、私の博士前期の研究テーマやタイトルについて悩んでいます。社会や他者からの「ノイズ(騒音)」が私たち人間に及ばす影響に興味があります。その影響に対する人間の脳の反応に着目し、ジェネラティブアートの制作を研究したいです。そこで、ノイズとアートに関連性がある概念や事例を調べました。

ノイズとは

 ノイズの概念は、分野によって違います。情報処理の分野では、ノイズは処理対象となる情報以外の不要な情報のことです。一方、日常生活のノイズは、日本騒音制御工学会によると、ノイズあるいは騒音、雑音とは、身の周りの様々な音のうち、人に好ましくない影響を及ぼす音、不必要な音、邪魔な音を指します[1]。しかし、ノイズ(騒音)は主観的な概念として定義されています。つまり、音の印象は聞く人とその人の状態によって大きく左右されます。ある人にとっては、快い音楽であっても、別の人には騒音になりかねません。たとえば、電車やバスのなかで隣の人のヘッドフォンから漏れた音などがそうです。さらに、ノイズ(騒音)は聞く人にとっての個人的問題であるばかりでなく、聞く人が属する社会や文化にも関わっています[2]。つまり、ある音がノイズかどうかを判断する基準は、主観的な基準であり、同時に、社会的あるいは文化的な基準でもあります。

ノイズとアート

 ノイズは、それぞれの分野で定義が違います。しかし、必ず不要、邪魔、余計などの意味を含んだ定義がされています。つまり、どんな分野においても、ノイズは良くないものです。

 一方、アートまたは芸術とは、作品の創作と鑑賞によって精神の充実体験を追求する文化活動を指します。精神の充実体験として、アートは人間に良い影響を与えるといえます。

 このように意義が対立している二つの概念には、密な関係があります。音楽、ジェネラティブアートの二つの分野で、ノイズとアートの関連性を検討します。

  • ノイズと音楽(ノイズ・ミュージック)

 もともと、音楽美学の分野では、音楽にふさわしい音、ふさわしくない音の区別を研究されていました。たとえば、ジゼール・ブルレは、「楽音」と「騒音」を対比させて以下のように論じます。「騒音は私たちを世界へとつなぎとめるが、音楽は私たちを世界から解放してくる。騒音は動揺を引き起こすのに対して、楽音は安らぎを与える」[2]。しかし、イタリア未来派ルイージルッソロがノイズに美的な価値を見出しました[3]。そのさい『騒音の芸術(The Art of Noises)』という宣言を発表しました。自動車のエンジン音など日常生活のなかでのノイズ(騒音)は抽象的な素材となり、音楽の作品が作られます。ルッソロはノイズを用いた表現と電子音楽の先駆者と考えられています。

  • ノイズとジェネラティブアート

    3D Noise_colorful(https://openprocessing.org/sketch/1609947)
     ジェネラティブアートとは何かを前回のブログで紹介しました。私の場合は、p5.js、processing、glslなどのプログラミング言語を使ってジェネラティブアートの表現を研究しています。これから、p5.jsを使用して作れた例を挙げながら、ジェネラティブアートでのノイズを紹介します。

     p5.jsでのnoise関数とperlin noise 

     p5.jsのnoise関数の説明によれば、noise()関数は指定された座標での パーリンノイズ(Perlin noise)値、あるいはランダムの値を返します。random() 関数と比較すると、より自然な順序で調和のとれた一連の数値を生成するランダムシーケンスジェネレータです。パーリンノイズは、1980年代にKen Perlinによって発明され、手続き型のテクスチャ、自然な動き、形状、地形などを生成するためにグラフィカルアプリケーションで使用されています。

     パーリンノイズは、無限のn次元空間で定義されます。p5.jsには、指定された座標の数に応じて、1D、2D、および3Dノイズを計算できます。結果の値は常に0.0 から 1.0 の間になります[4]。

     p5.jsで、一次元のnoise(x)、二次元のnoise(x, y)と三次元のnoise(x, y, z)それぞれを使って1D、2D、3Dの例(下の図)を作りました。

    noise関数の例(左から右までは1D2D3Dの表現)

    池田亮司と《test pattern》

     池田亮司は、日本の電子音楽実験音楽のミュージシャン、現代美術作家として知られています[5]。超音波、周波数、そして音そのものの持つ本質的な特性の細部に徹底してこだわる池田の作品は、音の物理的特性や人間の知覚との因果関係、音楽としての数学的類推、時間、空間を活用する[6]といわれています。2008年から、代表的なシリーズ制作の《test pattern》が始まりました。《test pattern》は、あらゆる種類のデータ(テキスト、サウンド、写真、映画)を2つの形式「バーコード」と「0/1バイナリー」に変換するシステムです。下の写真は、2017年の「test pattern [nº13]」です。

    「test pattern [nº13]」(photo: Martin Argyroglo)[7]
     私の感想

     シリーズ作品の《test pattern》は、私にとってはじめて理解できた池田の作品であり、また一番印象的な作品でもあると思います。《test pattern》では、ノイズのような実験的な音楽と、白黒のパターンが長年試行錯誤されています。音の持つ本質的な特性を細部まで検討、音だけではなく画像や映像のノイズに活用していることを池田の作品から学びました。

さいごに

 今回はノイズの定義、音楽とジェネラティブアートの分野でのノイズについての概念を簡潔に紹介しました。同時に、池田亮司の代表作とそれに対する私の感想を書きました。私のこれからの研究と制作に参考にしたいと思います。

参考文献