processingにはオーディオ関係のプログラムが書けるsoundというライブラリがあります。
しかし、利用できるまで詰まりどころがあったので、soundに関するプログラムを実行する方法を共有します。
全体像
下記の流れでsoundライブラリを動かします。- 利用したコードの紹介
- サウンドライブラリの読み込み
- alsaの設定変更
- soundのプログラム実行成功
利用したプログラムの紹介
動作確認にはprocessingのsoundチュートリアルで使われているシンセサイザーのプログラムを利用しました。https://processing.org/tutorials/sound/
/** * Processing Sound Library, Example 1 * * Five sine waves are layered to construct a cluster of frequencies. * This method is called additive synthesis. Use the mouse position * inside the display window to detune the cluster. */ import processing.sound.*; SinOsc[] sineWaves; // Array of sines float[] sineFreq; // Array of frequencies int numSines = 5; // Number of oscillators to use void setup() { size(640, 360); background(255); sineWaves = new SinOsc[numSines]; // Initialize the oscillators sineFreq = new float[numSines]; // Initialize array for Frequencies for (int i = 0; i < numSines; i++) { // Calculate the amplitude for each oscillator float sineVolume = (1.0 / numSines) / (i + 1); // Create the oscillators sineWaves[i] = new SinOsc(this); // Start Oscillators sineWaves[i].play(); // Set the amplitudes for all oscillators sineWaves[i].amp(sineVolume); } } void draw() { //Map mouseY from 0 to 1 float yoffset = map(mouseY, 0, height, 0, 1); //Map mouseY logarithmically to 150 - 1150 to create a base frequency range float frequency = pow(1000, yoffset) + 150; //Use mouseX mapped from -0.5 to 0.5 as a detune argument float detune = map(mouseX, 0, width, -0.5, 0.5); for (int i = 0; i < numSines; i++) { sineFreq[i] = frequency * (i + 1 * detune); // Set the frequencies for all oscillators sineWaves[i].freq(sineFreq[i]); } }
サウンドライブラリの読み込み
processing3ではsoundに関するライブラリはcoreに入っていないため、プログラムを実行すると下記のようなエラーが出ます。The package "processing.sound" does not exist. You might be missing a library. No library found for processing.sound Libraries must be installed in a folder named 'libraries' inside the 'sketchbook' folder.
クラス "AudioDevice" は存在しません。
soundを利用するにはsoundライブラリの追加が必要です。
ライブラリの追加は、下記の流れで行えます。
「スケッチ」->「ライブラリをインポート」->「ライブラリを追加」を選択します。
contribution managerが開くので、Filterに「sound」と入力してsoundライブラリを検索し、「インストール」をクリックしてライブラリを読み込みます。
ダウンロードとjarファイルの作成が行われるため、10分位かかります。
soundの設定が終わったら、プログラムを実行してみてください。
macの場合はこれでうまくいくと思います。
ubuntuの場合はalsaに関するエラーが出ることがあるので、その場合は次の「alsaの設定変更」をご参考ください。
参考: How to install the “sound” library for Processing in a simple way?
alsaの設定変更
ubuntuの場合は下記のエラーが出て動きませんでした。terminate called after throwing an instance of 'std::runtime_error' what(): RtApiAlsa::probeDeviceOpen: pcm device (hw:0,3) won't open for input. Could not run the sketch (Target VM failed to initialize). For more information, read revisions.txt and Help → Troubleshooting.
このエラーは下記の方法でalsaの設定を変更することで回避できました。
alsaの設定ファイルをsudo権限で開きます。
sudo gedit /etc/modprobe.d/alsa-base.conf
下記の行を末尾に追加します。
/etc/modprobe.d/alsa-base.conf
options snd-hda-intel index=-2
再起動します。
sudo reboot
参考:
How can I solve a conflict between openFrameworks and other audio applications?
https://github.com/processing/processing-sound/issues/81
soundのプログラム実行成功
soundライブラリの読み込みとalsaの設定ができたら、soundのシンセサイザープログラムが動きました。
右上にマウスカーソルを置くと「ボー」という音が鳴ります。
左下にマウスカーソルを置くと「チョー」という音が鳴ります。
右上にマウスカーソルを置くと「ボー」という音が鳴ります。
左下にマウスカーソルを置くと「チョー」という音が鳴ります。
以上の方法で自分の環境では動作しました。
alsaに関する設定方法など、他の解決方法があれば共有していただけると嬉しいです。
0 件のコメント :
コメントを投稿