Hardware components | ||||||
![]() |
| × | 1 | |||
![]() |
| × | 1 | |||
Software apps and online services | ||||||
![]() |
| |||||
![]() |
|
A person's heart rate changes depending on the situation.
For example, your heart rate increases after running.
At times like that, you might want to listen to some soothing music to calm you down.
So I thought it would be fun to have a cute character that plays soothing music based on your heart rate.
With that in mind, I decided to create PulPulsey.
【PulPulsey Instructions】Seeing is believing! So let's take a look at the poster on how to use it.
…or rather, I’ve only ever glanced at it before.
• The sound changes based on your heart rate, allowing you to enjoy music that's unique to that moment (randomness)
• Visualizes your current heart rate
• A new experience that combines heart rate monitoring with comfort
• An endearing face design
#include <M5Core2.h>
#include <Wire.h>
#include "MAX30100_PulseOximeter.h"
#include <SD.h>
// --- 定数定義 ---
#define REPORTING_PERIOD_MS 300 // 更新周期 (0.5秒)
#define TIMEOUT_PERIOD_MS 5000 // タイムアウト時間 (5秒)
// グラフ描画エリアの定義
#define GRAPH_X 0
#define GRAPH_Y 120
#define GRAPH_W 320 // グラフの幅 (M5Core2の画面幅)
#define GRAPH_H 120 // グラフの高さ
// --- グローバル変数 ---
PulseOximeter pox;
uint8_t Heart_rate = 0;
uint32_t tsLastReport = 0;
// 表示モード管理 (false: 初期画像, true: 心拍数・グラフ表示)
bool showHeartRate = false;
// 最後に有効な心拍数を検出した時刻
uint32_t lastValidHeartRateTime = 0;
// 心拍数の履歴を保存する配列 (画面の幅と同じサイズ)
int heartRateHistory[GRAPH_W];
// --- 関数のプロトタイプ宣言 ---
void drawGraph();
// --- 初期設定 ---
void setup() {
Serial.begin(115200);
M5.begin();
// SDカードから初期画像を表示
// この処理はSDカードが接続され、"/s.jpeg"が存在する場合に機能します。
if (SD.begin()) {
M5.Lcd.drawJpgFile(SD, "/s.jpeg");
} else {
M5.Lcd.setTextSize(2);
M5.Lcd.println("SD Card failed or not present.");
delay(2000);
}
// センサーの初期化
if (!pox.begin()) {
M5.Lcd.fillScreen(BLACK);
M5.Lcd.setTextSize(3);
M5.Lcd.println("Sensor FAILED!");
for(;;);
}
pox.setIRLedCurrent(MAX30100_LED_CURR_7_6MA);
// 心拍数履歴配列を初期化 (すべて0で埋める)
memset(heartRateHistory, 0, sizeof(heartRateHistory));
}
// --- メインループ ---
void loop() {
M5.update();
pox.update();
// 心拍数が30を超えたら、心拍数・グラフ表示モードに切り替える
if (Heart_rate > 30 && showHeartRate == false) {
showHeartRate = true; // モードを切り替え
lastValidHeartRateTime = millis(); // タイマーをリセット
// --- 画面レイアウトの初期化 (モード切替時に一度だけ実行) ---
M5.Lcd.fillScreen(BLACK); // 画面を黒でクリア
// 上部にタイトルを表示
M5.Lcd.setTextColor(WHITE);
M5.Lcd.setTextSize(4);
M5.Lcd.setCursor(70, 20);
M5.Lcd.print("DOKIDOKI");
// グラフの枠線を描画
M5.Lcd.drawRect(GRAPH_X, GRAPH_Y, GRAPH_W, GRAPH_H, DARKGREY);
}
// REPORTING_PERIOD_MS ごとにデータを更新
if (millis() - tsLastReport > REPORTING_PERIOD_MS) {
tsLastReport = millis();
Heart_rate = (int)pox.getHeartRate();
// シリアルモニターに常に心拍数を送信
Serial.println(Heart_rate);
// 心拍数・グラフ表示モードの場合の処理
if (showHeartRate == true) {
// 有効な心拍数が取得できた場合 (ノイズを避けるため閾値を設ける)
if (Heart_rate > 30) {
lastValidHeartRateTime = millis(); // タイマーを現在時刻で更新
// --- 心拍数の数値を更新 ---
M5.Lcd.fillRect(40, 65, 240, 50, BLACK); // 古い数値の部分をクリア
M5.Lcd.setTextColor(RED);
M5.Lcd.setTextSize(7);
M5.Lcd.setCursor(75, 65);
M5.Lcd.printf("%3d", Heart_rate); // 3桁で表示(桁がずれないように)
// --- グラフデータを更新 ---
// 履歴データを1つ左にスクロール
memmove(&heartRateHistory[0], &heartRateHistory[1], (GRAPH_W - 1) * sizeof(int));
// 配列の末尾に新しい心拍数を追加
heartRateHistory[GRAPH_W - 1] = Heart_rate;
// --- グラフを描画 ---
drawGraph();
} else { // 有効な心拍数が取得できなかった場合
// 最後に有効な値を取得してからタイムアウト時間が経過した場合
if (millis() - lastValidHeartRateTime > TIMEOUT_PERIOD_MS) {
M5.Lcd.fillScreen(WHITE);
M5.Lcd.setTextColor(BLUE);
M5.Lcd.setTextSize(5);
M5.Lcd.setCursor(25, 100);
M5.Lcd.print("OGENKIDE!");
delay(2000);
ESP.restart(); // M5Core2を再起動
}
}
}
}
}
// --- グラフを描画する関数 ---
void drawGraph() {
// グラフエリアをクリア (枠線は残す)
M5.Lcd.fillRect(GRAPH_X + 1, GRAPH_Y + 1, GRAPH_W - 2, GRAPH_H - 2, BLACK);
// 履歴データを元に線を描画
for (int i = 1; i < GRAPH_W; i++) {
int hr1 = heartRateHistory[i - 1];
int hr2 = heartRateHistory[i];
// 有効なデータポイント(hr > 30)間のみ線を描画
if (hr1 > 30 && hr2 > 30) {
// 心拍数の範囲(例: 40-180bpm)をグラフの高さ(Y座標)にマッピング
// map(value, fromLow, fromHigh, toLow, toHigh)
// Y座標は画面の上が0なので、toLowとtoHighを逆に設定してグラフの上下を直感的にします
int y1 = map(hr1, 40, 130, GRAPH_Y + GRAPH_H - 2, GRAPH_Y + 2);
int y2 = map(hr2, 40, 130, GRAPH_Y + GRAPH_H - 2, GRAPH_Y + 2);
// グラフが描画エリアからはみ出さないように値を丸める
y1 = constrain(y1, GRAPH_Y + 2, GRAPH_Y + GRAPH_H - 2);
y2 = constrain(y2, GRAPH_Y + 2, GRAPH_Y + GRAPH_H - 2);
// 2点間に緑色の線を引く
M5.Lcd.drawLine(i - 1, y1, i, y2, YELLOW);
}
}
}
{
"patcher" : {
"fileversion" : 1,
"appversion" : {
"major" : 8,
"minor" : 6,
"revision" : 1,
"architecture" : "x64",
"modernui" : 1
}
,
"classnamespace" : "box",
"rect" : [ 81.0, 97.0, 1010.0, 783.0 ],
"bglocked" : 0,
"openinpresentation" : 0,
"default_fontsize" : 12.0,
"default_fontface" : 0,
"default_fontname" : "Arial",
"gridonopen" : 1,
"gridsize" : [ 15.0, 15.0 ],
"gridsnaponopen" : 1,
"objectsnaponopen" : 1,
"statusbarvisible" : 2,
"toolbarvisible" : 1,
"lefttoolbarpinned" : 0,
"toptoolbarpinned" : 0,
"righttoolbarpinned" : 0,
"bottomtoolbarpinned" : 0,
"toolbars_unpinned_last_save" : 0,
"tallnewobj" : 0,
"boxanimatetime" : 200,
"enablehscroll" : 1,
"enablevscroll" : 1,
"devicewidth" : 0.0,
"description" : "",
"digest" : "",
"tags" : "",
"style" : "",
"subpatcher_template" : "",
"assistshowspatchername" : 0,
"boxes" : [ {
"box" : {
"bgmode" : 0,
"border" : 0,
"clickthrough" : 0,
"enablehscroll" : 0,
"enablevscroll" : 0,
"extract" : 1,
"id" : "obj-46",
"lockeddragscroll" : 0,
"lockedsize" : 0,
"maxclass" : "bpatcher",
"name" : "bp.Sync Delay.maxpat",
"numinlets" : 2,
"numoutlets" : 2,
"offset" : [ 0.0, 0.0 ],
"outlettype" : [ "signal", "signal" ],
"patching_rect" : [ 200.0, 227.0, 265.0, 116.0 ],
"varname" : "bp.Sync Delay",
"viewvisibility" : 1
}
}
, {
"box" : {
"id" : "obj-9",
"maxclass" : "ezdac~",
"numinlets" : 2,
"numoutlets" : 0,
"patching_rect" : [ 186.0, 583.0, 119.0, 119.0 ]
}
}
, {
"box" : {
"id" : "obj-7",
"lastchannelcount" : 0,
"maxclass" : "live.gain~",
"numinlets" : 2,
"numoutlets" : 5,
"outlettype" : [ "signal", "signal", "", "float", "list" ],
"parameter_enable" : 1,
"patching_rect" : [ 194.0, 392.0, 48.0, 136.0 ],
"saved_attribute_attributes" : {
"valueof" : {
"parameter_longname" : "live.gain~",
"parameter_mmax" : 6.0,
"parameter_mmin" : -70.0,
"parameter_modmode" : 3,
"parameter_shortname" : "live.gain~",
"parameter_type" : 0,
"parameter_unitstyle" : 4
}
}
,
"varname" : "live.gain~"
}
}
, {
"box" : {
"id" : "obj-24",
"maxclass" : "newobj",
"numinlets" : 1,
"numoutlets" : 2,
"outlettype" : [ "signal", "signal" ],
"patcher" : {
"fileversion" : 1,
"appversion" : {
"major" : 8,
"minor" : 6,
"revision" : 1,
"architecture" : "x64",
"modernui" : 1
}
,
"classnamespace" : "box",
"rect" : [ 482.0, 97.0, 980.0, 797.0 ],
"bglocked" : 0,
"openinpresentation" : 0,
"default_fontsize" : 12.0,
"default_fontface" : 0,
"default_fontname" : "Arial",
"gridonopen" : 1,
"gridsize" : [ 15.0, 15.0 ],
"gridsnaponopen" : 1,
"objectsnaponopen" : 1,
"statusbarvisible" : 2,
"toolbarvisible" : 1,
"lefttoolbarpinned" : 0,
"toptoolbarpinned" : 0,
"righttoolbarpinned" : 0,
"bottomtoolbarpinned" : 0,
"toolbars_unpinned_last_save" : 0,
"tallnewobj" : 0,
"boxanimatetime" : 200,
"enablehscroll" : 1,
"enablevscroll" : 1,
"devicewidth" : 0.0,
"description" : "",
"digest" : "",
"tags" : "",
"style" : "",
"subpatcher_template" : "",
"assistshowspatchername" : 0,
"boxes" : [ {
"box" : {
"id" : "obj-30",
"maxclass" : "message",
"numinlets" : 2,
"numoutlets" : 1,
"outlettype" : [ "" ],
"patching_rect" : [ 565.0, 792.0, 29.5, 22.0 ],
"text" : "0"
}
}
, {
"box" : {
"id" : "obj-32",
"maxclass" : "newobj",
"numinlets" : 1,
"numoutlets" : 1,
"outlettype" : [ "signal" ],
"patching_rect" : [ 565.0, 827.0, 31.0, 22.0 ],
"text" : "sig~"
}
}
, {
"box" : {
"id" : "obj-28",
"maxclass" : "button",
"numinlets" : 1,
"numoutlets" : 1,
"outlettype" : [ "bang" ],
"parameter_enable" : 0,
"patching_rect" : [ 599.0, 919.0, 24.0, 24.0 ]
}
}
, {
"box" : {
"basictuning" : 440,
"data" : {
"clips" : [ {
"absolutepath" : "konchiwa.wav",
"filename" : "konchiwa.wav",
"filekind" : "audiofile",
"id" : "u107004225",
"loop" : 0,
"content_state" : {
}
}
]
}
,
"followglobaltempo" : 0,
"formantcorrection" : 0,
"id" : "obj-26",
"maxclass" : "playlist~",
"mode" : "basic",
"numinlets" : 1,
"numoutlets" : 5,
"originallength" : [ 0.0, "ticks" ],
"originaltempo" : 120.0,
"outlettype" : [ "signal", "signal", "signal", "", "dictionary" ],
"parameter_enable" : 0,
"patching_rect" : [ 515.0, 864.0, 150.0, 30.0 ],
"pitchcorrection" : 0,
"quality" : "basic",
"timestretch" : [ 0 ]
}
}
, {
"box" : {
"id" : "obj-76",
"maxclass" : "button",
"numinlets" : 1,
"numoutlets" : 1,
"outlettype" : [ "bang" ],
"parameter_enable" : 0,
"patching_rect" : [ 851.0, 890.0, 24.0, 24.0 ]
}
}
, {
"box" : {
"id" : "obj-74",
"maxclass" : "message",
"numinlets" : 2,
"numoutlets" : 1,
"outlettype" : [ "" ],
"patching_rect" : [ 753.0, 752.0, 29.5, 22.0 ],
"text" : "0"
}
}
, {
"box" : {
"id" : "obj-75",
"maxclass" : "newobj",
"numinlets" : 1,
"numoutlets" : 1,
"outlettype" : [ "signal" ],
"patching_rect" : [ 753.0, 787.0, 31.0, 22.0 ],
"text" : "sig~"
}
}
, {
"box" : {
"id" : "obj-73",
"maxclass" : "button",
"numinlets" : 1,
"numoutlets" : 1,
"outlettype" : [ "bang" ],
"parameter_enable" : 0,
"patching_rect" : [ 846.25, 724.0, 24.0, 24.0 ]
}
}
, {
"box" : {
"id" : "obj-71",
"maxclass" : "message",
"numinlets" : 2,
"numoutlets" : 1,
"outlettype" : [ "" ],
"patching_rect" : [ 751.0, 579.0, 29.5, 22.0 ],
"text" : "0"
}
}
, {
"box" : {
"id" : "obj-72",
"maxclass" : "newobj",
"numinlets" : 1,
"numoutlets" : 1,
"outlettype" : [ "signal" ],
"patching_rect" : [ 751.0, 614.0, 31.0, 22.0 ],
"text" : "sig~"
}
}
, {
"box" : {
"id" : "obj-70",
"maxclass" : "button",
"numinlets" : 1,
"numoutlets" : 1,
"outlettype" : [ "bang" ],
"parameter_enable" : 0,
"patching_rect" : [ 846.25, 555.0, 24.0, 24.0 ]
}
}
, {
"box" : {
"id" : "obj-68",
"maxclass" : "message",
"numinlets" : 2,
"numoutlets" : 1,
"outlettype" : [ "" ],
"patching_rect" : [ 750.25, 414.0, 29.5, 22.0 ],
"text" : "0"
}
}
, {
"box" : {
"id" : "obj-69",
"maxclass" : "newobj",
"numinlets" : 1,
"numoutlets" : 1,
"outlettype" : [ "signal" ],
"patching_rect" : [ 750.25, 449.0, 31.0, 22.0 ],
"text" : "sig~"
}
}
, {
"box" : {
"id" : "obj-67",
"maxclass" : "button",
"numinlets" : 1,
"numoutlets" : 1,
"outlettype" : [ "bang" ],
"parameter_enable" : 0,
"patching_rect" : [ 846.25, 359.0, 24.0, 24.0 ]
}
}
, {
"box" : {
"id" : "obj-65",
"maxclass" : "message",
"numinlets" : 2,
"numoutlets" : 1,
"outlettype" : [ "" ],
"patching_rect" : [ 749.5, 239.0, 29.5, 22.0 ],
"text" : "0"
}
}
, {
"box" : {
"id" : "obj-66",
"maxclass" : "newobj",
"numinlets" : 1,
"numoutlets" : 1,
"outlettype" : [ "signal" ],
"patching_rect" : [ 749.5, 274.0, 31.0, 22.0 ],
"text" : "sig~"
}
}
, {
"box" : {
"id" : "obj-64",
"maxclass" : "message",
"numinlets" : 2,
"numoutlets" : 1,
"outlettype" : [ "" ],
"patching_rect" : [ 748.0, 111.0, 29.5, 22.0 ],
"text" : "0"
}
}
, {
"box" : {
"id" : "obj-63",
"maxclass" : "newobj",
"numinlets" : 1,
"numoutlets" : 1,
"outlettype" : [ "signal" ],
"patching_rect" : [ 748.0, 146.0, 31.0, 22.0 ],
"text" : "sig~"
}
}
, {
"box" : {
"id" : "obj-62",
"maxclass" : "button",
"numinlets" : 1,
"numoutlets" : 1,
"outlettype" : [ "bang" ],
"parameter_enable" : 0,
"patching_rect" : [ 847.0, 229.0, 24.0, 24.0 ]
}
}
, {
"box" : {
"id" : "obj-60",
"maxclass" : "message",
"numinlets" : 2,
"numoutlets" : 1,
"outlettype" : [ "" ],
"patching_rect" : [ 515.0, 805.0, 29.5, 22.0 ],
"text" : "1"
}
}
, {
"box" : {
"id" : "obj-61",
"maxclass" : "button",
"numinlets" : 1,
"numoutlets" : 1,
"outlettype" : [ "bang" ],
"parameter_enable" : 0,
"patching_rect" : [ 515.0, 765.0, 24.0, 24.0 ]
}
}
, {
"box" : {
"id" : "obj-59",
"maxclass" : "newobj",
"numinlets" : 1,
"numoutlets" : 1,
"outlettype" : [ "" ],
"patching_rect" : [ 515.0, 725.0, 131.0, 22.0 ],
"text" : "if $i1 == 100 then bang"
}
}
, {
"box" : {
"id" : "obj-48",
"maxclass" : "message",
"numinlets" : 2,
"numoutlets" : 1,
"outlettype" : [ "" ],
"patching_rect" : [ 42.5, 679.0, 29.5, 22.0 ],
"text" : "1"
}
}
, {
"box" : {
"id" : "obj-47",
"maxclass" : "message",
"numinlets" : 2,
"numoutlets" : 1,
"outlettype" : [ "" ],
"patching_rect" : [ 277.25, 679.0, 29.5, 22.0 ],
"text" : "1"
}
}
, {
"box" : {
"basictuning" : 440,
"data" : {
"clips" : [ {
"absolutepath" : "22.aif",
"filename" : "22.aif",
"filekind" : "audiofile",
"id" : "u562007713",
"selection" : [ 0.947368421052632, 0.021052631578947 ],
"loop" : 0,
"content_state" : {
}
}
]
}
,
"followglobaltempo" : 0,
"formantcorrection" : 0,
"id" : "obj-46",
"maxclass" : "playlist~",
"mode" : "basic",
"numinlets" : 1,
"numoutlets" : 5,
"originallength" : [ 0.0, "ticks" ],
"originaltempo" : 120.0,
"outlettype" : [ "signal", "signal", "signal", "", "dictionary" ],
"parameter_enable" : 0,
"patching_rect" : [ 753.0, 828.0, 150.0, 30.0 ],
"pitchcorrection" : 0,
"quality" : "basic",
"timestretch" : [ 0 ]
}
}
, {
"box" : {
"id" : "obj-44",
"maxclass" : "message",
"numinlets" : 2,
"numoutlets" : 1,
"outlettype" : [ "" ],
"patching_rect" : [ 52.0, 537.0, 29.5, 22.0 ],
"text" : "1"
}
}
, {
"box" : {
"id" : "obj-43",
"maxclass" : "message",
"numinlets" : 2,
"numoutlets" : 1,
"outlettype" : [ "" ],
"patching_rect" : [ 48.25, 372.0, 29.5, 22.0 ],
"text" : "1"
}
}
, {
"box" : {
"id" : "obj-42",
"maxclass" : "message",
"numinlets" : 2,
"numoutlets" : 1,
"outlettype" : [ "" ],
"patching_rect" : [ 444.25, 378.0, 29.5, 22.0 ],
"text" : "1"
}
}
, {
"box" : {
"id" : "obj-41",
"maxclass" : "message",
"numinlets" : 2,
"numoutlets" : 1,
"outlettype" : [ "" ],
"patching_rect" : [ 245.0, 378.0, 29.5, 22.0 ],
"text" : "1"
}
}
, {
"box" : {
"basictuning" : 440,
"data" : {
"clips" : [ {
"absolutepath" : "26.aif",
"filename" : "26.aif",
"filekind" : "audiofile",
"id" : "u477006653",
"selection" : [ 0.094736842105263, 0.778947368421053 ],
"loop" : 0,
"content_state" : {
}
}
]
}
,
"followglobaltempo" : 0,
"formantcorrection" : 0,
"id" : "obj-40",
"maxclass" : "playlist~",
"mode" : "basic",
"numinlets" : 1,
"numoutlets" : 5,
"originallength" : [ 0.0, "ticks" ],
"originaltempo" : 120.0,
"outlettype" : [ "signal", "signal", "signal", "", "dictionary" ],
"parameter_enable" : 0,
"patching_rect" : [ 753.0, 657.0, 150.0, 30.0 ],
"pitchcorrection" : 0,
"quality" : "basic",
"timestretch" : [ 0 ]
}
}
, {
"box" : {
"id" : "obj-38",
"maxclass" : "message",
"numinlets" : 2,
"numoutlets" : 1,
"outlettype" : [ "" ],
"patching_rect" : [ 248.0, 528.0, 29.5, 22.0 ],
"text" : "1"
}
}
, {
"box" : {
"id" : "obj-37",
"maxclass" : "message",
"numinlets" : 2,
"numoutlets" : 1,
"outlettype" : [ "" ],
"patching_rect" : [ 447.0, 528.0, 29.5, 22.0 ],
"text" : "1"
}
}
, {
"box" : {
"id" : "obj-36",
"maxclass" : "message",
"numinlets" : 2,
"numoutlets" : 1,
"outlettype" : [ "" ],
"patching_rect" : [ 48.25, 204.0, 29.5, 22.0 ],
"text" : "1"
}
}
, {
"box" : {
"id" : "obj-35",
"maxclass" : "message",
"numinlets" : 2,
"numoutlets" : 1,
"outlettype" : [ "" ],
"patching_rect" : [ 248.0, 200.0, 29.5, 22.0 ],
"text" : "1"
}
}
, {
"box" : {
"comment" : "",
"id" : "obj-34",
"index" : 2,
"maxclass" : "outlet",
"numinlets" : 1,
"numoutlets" : 0,
"patching_rect" : [ 727.0, 948.0, 30.0, 30.0 ]
}
}
, {
"box" : {
"id" : "obj-33",
"maxclass" : "message",
"numinlets" : 2,
"numoutlets" : 1,
"outlettype" : [ "" ],
"patching_rect" : [ 447.0, 200.0, 29.5, 22.0 ],
"text" : "1"
}
}
, {
"box" : {
"basictuning" : 440,
"data" : {
"clips" : [ {
"absolutepath" : "Macintosh HD:/Users/miyakou/Music/Logic/tact_ongen/Bounces//Vintage Sci-Fi Ambience.wav",
"filename" : "Vintage Sci-Fi Ambience.wav",
"filekind" : "audiofile",
"id" : "u701008815",
"loop" : 0,
"content_state" : {
}
}
]
}
,
"followglobaltempo" : 0,
"formantcorrection" : 0,
"id" : "obj-31",
"maxclass" : "playlist~",
"mode" : "basic",
"numinlets" : 1,
"numoutlets" : 5,
"originallength" : [ 0.0, "ticks" ],
"originaltempo" : 120.0,
"outlettype" : [ "signal", "signal", "signal", "", "dictionary" ],
"parameter_enable" : 0,
"patching_rect" : [ 748.0, 177.0, 150.0, 30.0 ],
"pitchcorrection" : 0,
"quality" : "basic",
"timestretch" : [ 0 ]
}
}
, {
"box" : {
"basictuning" : 440,
"data" : {
"clips" : [ {
"absolutepath" : "Macintosh HD:/Users/miyakou/Music/Logic/tact_ongen/Bounces//Vintage Sci-Fi Ambience_2.wav",
"filename" : "Vintage Sci-Fi Ambience_2.wav",
"filekind" : "audiofile",
"id" : "u005002538",
"selection" : [ 0.673684210526316, 0.0 ],
"loop" : 0,
"content_state" : {
}
}
]
}
,
"followglobaltempo" : 0,
"formantcorrection" : 0,
"id" : "obj-29",
"maxclass" : "playlist~",
"mode" : "basic",
"numinlets" : 1,
"numoutlets" : 5,
"originallength" : [ 0.0, "ticks" ],
"originaltempo" : 120.0,
"outlettype" : [ "signal", "signal", "signal", "", "dictionary" ],
"parameter_enable" : 0,
"patching_rect" : [ 748.0, 309.0, 150.0, 30.0 ],
"pitchcorrection" : 0,
"quality" : "basic",
"timestretch" : [ 0 ]
}
}
, {
"box" : {
"basictuning" : 440,
"data" : {
"clips" : [ {
"absolutepath" : "Macintosh HD:/Users/miyakou/Music/Logic/tact_ongen/Bounces//Corroded Mechanism_1.wav",
"filename" : "Corroded Mechanism_1.wav",
"filekind" : "audiofile",
"id" : "u435001478",
"selection" : [ 0.0, 0.0 ],
"loop" : 0,
"content_state" : {
}
}
]
}
,
"followglobaltempo" : 0,
"formantcorrection" : 0,
"id" : "obj-27",
"maxclass" : "playlist~",
"mode" : "basic",
"numinlets" : 1,
"numoutlets" : 5,
"originallength" : [ 0.0, "ticks" ],
"originaltempo" : 120.0,
"outlettype" : [ "signal", "signal", "signal", "", "dictionary" ],
"parameter_enable" : 0,
"patching_rect" : [ 750.25, 493.0, 150.0, 30.0 ],
"pitchcorrection" : 0,
"quality" : "basic",
"timestretch" : [ 0 ]
}
}
, {
"box" : {
"id" : "obj-22",
"maxclass" : "button",
"numinlets" : 1,
"numoutlets" : 1,
"outlettype" : [ "bang" ],
"parameter_enable" : 0,
"patching_rect" : [ 280.0, 628.0, 24.0, 24.0 ]
}
}
, {
"box" : {
"id" : "obj-24",
"maxclass" : "newobj",
"numinlets" : 1,
"numoutlets" : 1,
"outlettype" : [ "" ],
"patching_rect" : [ 280.0, 589.0, 123.0, 22.0 ],
"text" : "if $i1 > 119 then bang"
}
}
, {
"box" : {
"id" : "obj-17",
"maxclass" : "button",
"numinlets" : 1,
"numoutlets" : 1,
"outlettype" : [ "bang" ],
"parameter_enable" : 0,
"patching_rect" : [ 48.0, 628.0, 24.0, 24.0 ]
}
}
, {
"box" : {
"id" : "obj-19",
"maxclass" : "newobj",
"numinlets" : 1,
"numoutlets" : 1,
"outlettype" : [ "" ],
"patching_rect" : [ 48.0, 589.0, 197.0, 22.0 ],
"text" : "if $i1 > 109 && $i1 < 120 then bang"
}
}
, {
"box" : {
"id" : "obj-8",
"maxclass" : "button",
"numinlets" : 1,
"numoutlets" : 1,
"outlettype" : [ "bang" ],
"parameter_enable" : 0,
"patching_rect" : [ 447.0, 485.0, 24.0, 24.0 ]
}
}
, {
"box" : {
"id" : "obj-9",
"maxclass" : "newobj",
"numinlets" : 1,
"numoutlets" : 1,
"outlettype" : [ "" ],
"patching_rect" : [ 447.0, 446.0, 196.0, 22.0 ],
"text" : "if $i1 > 100 && $i1 < 110 then bang"
}
}
, {
"box" : {
"id" : "obj-11",
"maxclass" : "button",
"numinlets" : 1,
"numoutlets" : 1,
"outlettype" : [ "bang" ],
"parameter_enable" : 0,
"patching_rect" : [ 248.0, 485.0, 24.0, 24.0 ]
}
}
, {
"box" : {
"id" : "obj-12",
"maxclass" : "newobj",
"numinlets" : 1,
"numoutlets" : 1,
"outlettype" : [ "" ],
"patching_rect" : [ 248.0, 446.0, 190.0, 22.0 ],
"text" : "if $i1 > 89 && $i1 < 100 then bang"
}
}
, {
"box" : {
"id" : "obj-14",
"maxclass" : "button",
"numinlets" : 1,
"numoutlets" : 1,
"outlettype" : [ "bang" ],
"parameter_enable" : 0,
"patching_rect" : [ 48.0, 485.0, 24.0, 24.0 ]
}
}
, {
"box" : {
"id" : "obj-16",
"maxclass" : "newobj",
"numinlets" : 1,
"numoutlets" : 1,
"outlettype" : [ "" ],
"patching_rect" : [ 48.0, 446.0, 183.0, 22.0 ],
"text" : "if $i1 > 79 && $i1 < 90 then bang"
}
}
, {
"box" : {
"id" : "obj-5",
"maxclass" : "button",
"numinlets" : 1,
"numoutlets" : 1,
"outlettype" : [ "bang" ],
"parameter_enable" : 0,
"patching_rect" : [ 447.0, 322.0, 24.0, 24.0 ]
}
}
, {
"box" : {
"id" : "obj-6",
"maxclass" : "newobj",
"numinlets" : 1,
"numoutlets" : 1,
"outlettype" : [ "" ],
"patching_rect" : [ 447.0, 283.0, 183.0, 22.0 ],
"text" : "if $i1 > 69 && $i1 < 80 then bang"
}
}
, {
"box" : {
"id" : "obj-3",
"maxclass" : "button",
"numinlets" : 1,
"numoutlets" : 1,
"outlettype" : [ "bang" ],
"parameter_enable" : 0,
"patching_rect" : [ 248.0, 322.0, 24.0, 24.0 ]
}
}
, {
"box" : {
"id" : "obj-4",
"maxclass" : "newobj",
"numinlets" : 1,
"numoutlets" : 1,
"outlettype" : [ "" ],
"patching_rect" : [ 248.0, 283.0, 183.0, 22.0 ],
"text" : "if $i1 > 59 && $i1 < 70 then bang"
}
}
, {
"box" : {
"id" : "obj-18",
"maxclass" : "button",
"numinlets" : 1,
"numoutlets" : 1,
"outlettype" : [ "bang" ],
"parameter_enable" : 0,
"patching_rect" : [ 48.0, 322.0, 24.0, 24.0 ]
}
}
, {
"box" : {
"id" : "obj-20",
"maxclass" : "newobj",
"numinlets" : 1,
"numoutlets" : 1,
"outlettype" : [ "" ],
"patching_rect" : [ 48.0, 283.0, 183.0, 22.0 ],
"text" : "if $i1 > 49 && $i1 < 60 then bang"
}
}
, {
"box" : {
"id" : "obj-21",
"maxclass" : "button",
"numinlets" : 1,
"numoutlets" : 1,
"outlettype" : [ "bang" ],
"parameter_enable" : 0,
"patching_rect" : [ 447.0, 161.0, 24.0, 24.0 ]
}
}
, {
"box" : {
"id" : "obj-23",
"maxclass" : "newobj",
"numinlets" : 1,
"numoutlets" : 1,
"outlettype" : [ "" ],
"patching_rect" : [ 447.0, 122.0, 183.0, 22.0 ],
"text" : "if $i1 > 39 && $i1 < 50 then bang"
}
}
, {
"box" : {
"id" : "obj-13",
"maxclass" : "button",
"numinlets" : 1,
"numoutlets" : 1,
"outlettype" : [ "bang" ],
"parameter_enable" : 0,
"patching_rect" : [ 248.0, 161.0, 24.0, 24.0 ]
}
}
, {
"box" : {
"id" : "obj-15",
"maxclass" : "newobj",
"numinlets" : 1,
"numoutlets" : 1,
"outlettype" : [ "" ],
"patching_rect" : [ 248.0, 122.0, 183.0, 22.0 ],
"text" : "if $i1 > 29 && $i1 < 40 then bang"
}
...
This file has been truncated, please download it to see its full contents.
Comments