書き終わってから思ったけど、かなり置いてけぼりな内容になってますね、これ。^^;

Max(プログラム言語)
01 /19 2018
みなさま、どうもです。

180119_1.jpg
※画像をクリックすると拡大写真が見れます。


何かとネタにしているミキサーくんもやっとゴールが見えてきました。

今で全体の8割ぐらいまでは設計できたのではないかと思います。
正直、そんなに本格的な物を作るつもりは全くなかったのに...(苦笑)。
(こういうの、一度やり始めると自分なりの完璧を求めてしまうんですよね。^^;)

以前書いていた『マルチトラックレコーディング機能』ですが、全然問題なく実装することができました。
CPUとハードディスクの頑張り次第ですけど、理論的にはメインアウトとモノラル10チャンネル分で最大11ファイル分を同時録りすることができると思います...まだ試せていないけど。^^;
(メインアウト含む4チャンネル分ぐらいの同時録音までしか試せていない。)

ただ、Max/MSPの仕様(というか、同時処理ができない都合上)の問題で少し違和感を生じることがありますが...これは使う人じゃなければまったく訳わかめな話なのでやめときます(笑)。


まあ、そんな感じなんですけども、ついでなのでこのツールの中身(ソース)を少し公開したいと思います。
ちょっとサイズがでかすぎるのでかなり縮小させてますけどもご了承くださいませ。^^;

180119_2.jpg
180119_3.jpg
※画像をクリックすると拡大写真が見れます。

拡大画像を見たところで???ではあるんですけども、上のツールの中身(ソース)はこんな感じなんですね。
これでも一つ一つの機能を一個の箱(オブジェクト)に詰め込んで、ある程度はスッキリさせてるんですけど、まともに全部公開しようもんなら20枚近くは撮らなければいけないぐらいのボリュームになってます。
少なくとも簡単なシーケンスツール(リズムマシン系)を作るようなノリのボリュームではないということを言いたいわけです。

当初の予定では上の2枚ぐらいのサイズの量で作れるボリュームのもののはずやったんやけどなあ。
(少なくともプレイヤーやらサンプラーは全く考えていなかった。)

...うん、ほんま、どうしてこうなった?(笑)


あと、先日書いていたオーディオプレーヤーと簡易サンプラー(ポン出し)機能について。

180119_4.jpg
※画像をクリックすると拡大写真が見れます。

サンプラーは5個のオーディオファイルを読み込めます。
再生範囲やら再生速度も変更したりすることもできます。
ただし、ポン出し的な機能にしたかったのでベロシティ(音の強弱)やらループ機能は対応してません。
音のボリューム調整(ノーマライズ含む)ぐらいで直接の音色加工はできない(※)仕組みになってます。
うん、本当にただの『ポン出し』機能。
(※インサートエフェクターとセンドエフェクターを通すことはできます。)

オーディオプレーヤーは無駄にDJ仕様(Eqとフィルター内蔵)にしてみたりと。
ただ単にプレイヤーの音をいじって遊びたかっただけなんですけども。

フィルターのスライダーをいじってたら気分は無駄にクラブDJ的な感じになれる...かもしれないです。
...いや、僕がなりたいだけやな。^^;


そんな感じで、使い方によってはハードのミキサーを使わずにこれを使ってライブをすることもできるかもしれないです...今の時代、ライブで使えるDTMソフトはなんぼでもあるんでわざわざそんな暴挙をやるメリットはあまりないですけどね(笑)。

でも、外部のエフェクターソフトを読み込めるんで音作りをしたうえでデモを作成するにはいいかもしれないです。
簡易プリアンプやらオーディオプレイヤーもついてるからいわゆる「歌ってみた」系の録音とかにはいいかも。
(メインアウトとチャンネルを別々に録音することもできるし!)

うん、僕は一体何がしたいんやろ?(笑)

今回もこのような記事にお付き合いして頂き、本当にありがとうございます。

メンテナンスとバックアップは定期的に...。

機材関連
12 /25 2017
みなさま、どうもです。

171225.jpg


忘れた頃にやってくるシンセのメモリのバックアップバッテリーの電池切れ。
...ちょっと「の」が多いですけども(笑)。

まあ、よく考えてみればシンセを一度修理に出した時にバッテリー交換をしてもらったとは言えど、それから約10年(!)近く経ってるわけで...。
そら、バッテリーがいつなくなってもおかしくはないわな、と。^^;

知らない方からすると「バックアップバッテリーとは何ぞや?」な話なんですけども、簡単に説明しておくと一般的なシンセにはユーザーが作った音色を保存/管理できる領域(※大抵「ユーザープリセット」と呼ばれとります。)があるんですね。
ユーザーはそこに自分が作った音色を保存することができるんですけど、そこの保存している音色を消さないようにするためのバッテリー(電池)がこの「バックアップバッテリー」というものなんです。
つまり、このバッテリーがなくなってしまうと自分が作った音色が全部消えてしまう(保存できなくなる)っていうわけです。
シンセで音づくりをしている人には非常に恐ろしい話なのでございます...あばばばばば。((( ;゚Д゚)))
(※ちなみにバッテリー寿命は機材の使用頻度にもよるけれど、大体5~10年ぐらいだと言われてます)

で、本日、このシンセ(Roland XP-60)
XP60_L.jpg
にローバッテリーのアラートが出てしまったので交換したいと思います。

当然のことながら、バッテリーは中の基盤にあるんでふたを開けます。
底板のネジを抜いて底板をはずすとこんな感じなんですね。
171225_1.jpg

分かりますかね?真ん中あたりにボタン電池があるんですけど、これが「バックアップバッテリー」でございます。
まあ、パソコンのマザーボードにも同じような物がありますよね。

171225_2.jpg
大半のシンセはCR2032/3Vだと思います。
例外もあるのかもしれないからすべてとは断言できないですけど、最寄りの100均で購入しておけば問題ないかと思います。

171225_3.jpg
外して...、

171225_4.jpg
...交換する。

あとは底版を戻してネジ止めして電源つけて問題がなければOK!
わっふ~!おつした~!!Σd(≧ω≦*)


って、簡単に思えるでしょ?
でも、ぶっちゃけ、やってる人間は物凄くビビりながらやってるのですよ(笑)。

この機材がたまたまホルダー式のバッテリーだからラッキーなのです。
中にはバッテリーとホルダーが一体化してるものもあって、はんだごてがなければ交換できないものもあります。
あのタイプの交換ははっきり言って恐ろしいです。
はんだごてを使いこなす技術以前に(高価な)シンセにはんだごてを当てなければいけないので恐怖以外の何でもありません。
下手すりゃ、はんだの熱で基板(というか、シンセ)自体壊しかねないので。^^;

もしこれを見て「やってみよう」と思ったのであれば、あまりお勧めはしないです。
変にいじって壊すぐらいならメーカーや楽器店に「直してけろ~!(´;д;`)」って泣きついたほうがいいです。
うん、悪いこと言わんから...。(※遠い目)
(変にさわってから修理に出してメーカーさんに怒られたことのある経験者は語る(笑)。)

真似して交換してみて、「ぎゃー!!」なことになっても僕は責任取れないよ?
ゆえに、やるなら自己責任で!嫌なら修理に出す!...OK?
...記事のネタにしておきながらこういう事を言っちゃうのもアレなんですけども。^^;
※注:うちに置いてあるシンセは全てメーカーサポートが完了してメーカーにすら見放された古い機材しかないので自分でやらざるを得ないのです。(あと、古いシンセを直してくれそうな楽器店が近くにない。)
メーカーサポートが生きているうちはメーカーに救いの手を求めましょう!!メーカーがダメなら楽器店に泣きつきましょう!!
(シンセ、高いんやから自分で直すつもりが破壊してしまったら笑えないっしょ?)



あと、もう一つ、バッテリー交換をやるうえで重要なこと...

バッテリー交換する前にユーザープリセットのバックアップを忘れない!!

重要なことなのでもう一度言っておきます。

バッテリー交換する前にユーザープリセットのバックアップを絶対に忘れない!!

何が言いたいかと言いますと、

バッテリー交換したら当然ながらユーザープリセットは初期化されます!!
(工場出荷時の状態になります。)


これは機材によるのかもしれないけど、消えると思っておいた方が絶対にいいです。
だって電池抜てるんやもん。そりゃ普通に考えて消えるやろ(笑)。


なんでそんなことを強調して言ってるかというと...やらかしちゃったんですよね。^^;

バックアップとり忘れて交換しちゃったから、10年分のデータが全部消えて、今、泣きそうな状態になってるんですよ...テヘペロ(๑´ڡ`๑)
(10年前に修理に出した時のバックアップFDが生きてたからそこまで被害は大きくなかったけれど...(苦笑)。)

うん、やっぱりこういうことにもなりかねないので、何かあったらできるだけメーカーへ泣きつきましょう(笑)。

今回もこのような記事にお付き合いして頂き、本当にありがとうございます。

動画をアップロードするのってこんなに怖いのね。^^;

Max(プログラム言語)
07 /05 2017
みなさま、どうもです。


人生初マイ動画


ここ最近、ブラックな記事が続いていてなんかすみません。^^;

とういうわけで、生まれて初めて動画を作ってYoutubeにアップロードしてみました。

うん、恐いですね。
こんな稚拙な動画を世に出してしまってええのか?と...そんな感じで投稿し終わってからの後悔が半端ないです。
改めて動画を作っている人はすごいなと痛感した次第です(笑)。


元々は別のアプリケーションの紹介動画をちゃんと(?)作ろうと思って色々とやっていたのですが、如何せん動画作成のノウハウや映像編集ソフトの使い方が全く分からずお手上げ状態。\(^o^)/
埒が開かないので、できるところから挑戦してみようと思って奮闘した結果がこの動画です。

動画でいじってるソフトはこのブログでも何度か紹介していたd-process(通称、デプロ)の最新版です。
(まだ工事中のため、このバージョンはサイトにはアップロードしていません。)

過去に何度か音声データの形式としてブログでも公開はしていたんですが、やってることがやってることだけに映像が無いとなかなか伝わらないので、これをきっかけに映像として見せれるものを作ってみました。
『破壊系ランダム・シーケンサー』と一言で言うのは簡単ですけど、実際にそれを頭の中でイメージして頂くには言葉足らずな部分が多すぎるので難しいですから。^^;
(「ちゃんと説明して」って言われてもできる自信がないですね(苦笑)。)

あと、なぜかテロップが英語ですが、Max/Mspに興味持っているのは国内よりも国外の方の方が多いだろうということで今回は(できもしないくせに)英語にしています。
おそらく動画内の英語はどこか間違っているような気がします。
正直、ツッコミが来るのが物凄く怖いです。投稿し終わってからずっと胃が痛いです。^^;

...とまあ、とりあえずはそんな感じです。


Max/Mspを使ったネタや動画を上手い事ブログに活かしたいんですけど...思った以上に難しそうですね。
とりあえずは目先の事をどうにかしよう。^^;


【追記】
改めて動画を見直して思ったけど、意味の無い無駄な行動が多すぎ(苦笑)。
(操作ミスとかそういう意味で。)

今回もこのような記事にお付き合いして頂き、本当にありがとうございます。

こういうの一般向きと言いながら実は自分用に作っている人が多いんだって。ww

Max(プログラム言語)
10 /01 2016
みなさま、どうもです。

20161001.jpg


うーん、なんか久々にちゃんとした記事を書くような気がする...。
別に前回までの記事があかん記事を書いていたわけではないんですが、ああいうノリはあまり得意ではないですな。
というか、見苦しいイラストを何枚も公開してすみませんでしたと(笑)。
(ただし、前回のはあかん記事やなとは思っている(苦笑)。)

...まあ、今さらな話なんですけども。^^;

さて、ブログじゃなくてWebサイトの方の連絡なんですが、生意気にもMaxのTips集なるコンテンツを作ってみました。
とは言っても、まだ記事が1個しかできておりませんが。^^;

Maxで色々と作業用エディター的なパッチを何個も作っていくうちに残しておきたい処理が何個もあるのでTips集的なコンテンツを作ろうと思った次第です。

ぶっちゃけ、Tips集とは名ばかりで実質的にはハタヤマが自分がまた使いそうな処理を忘れないための備忘録的な感じだったりします。
オブジェクト単位として個別にソースファイルとしては残しているんですけども、いざ再利用しようと開いたときには処理の流れを忘れてしまっているということが結構あったりしますので...。^^;

ほんと、Tips集とか生意気なタイトルをつけてしまってすみません。

まあ、だいぶ昔にブログでもMax講座的な記事を何個か書いていたんですが、ああいうノリで書いています。
かなり適当です。僕、本職エンジニアじゃないんでそこまで詳しくないっていうか、キレイなプログラムを書くことに命をかけている人間でもないんで。^^;
(正直、悪さ(メモリーリークとかいったPCにダメージを与える動き)をせずに動けばええねん。ぐらいにしか思っていなかったりする訳で...。)

なので、「この方がもっとよくね?」なコーディングとかあると思いますけど、ただ、嘘は書いていないとは思います...たぶん。
まあ、さわれる人はまずこんなの頼らない(見ない)でしょ(笑)。

と、冗談はともかく、まあゆるい感じでやってます。
ちなみに第1回目はdropfileオブジェクト(※↑の画像)の基礎的な使い方について書いています。
興味がございましたらどうぞ。
こちらから。

今回もこのような記事にお付き合いして頂き、本当にありがとうございます。

言ってもライターズブロック・リバビリなうやからなあ...。

機材関連
05 /09 2016
みなさま、どうもです。

160509.jpg


ディストーション2台目。
前回作ったのとは少し違うディストーションです。

言葉で違いを言うのは難しいんですが、前回作ったのは「ファズに近いような音のディストーション」で、今回のはいわゆるよくあるディストーションの音...なんて言ってもこんな文章じゃ分かりませんよね。
書いている僕もよく分かりません。ダメですね。^^;

まあ、違いについては近いうちにオーディオファイルとして載せるとします...気が向いたら(笑)。

しかし、アレですね。
こういうものを作ってしまうとやっぱり実際に使いたくなってしまうんですよね。
そんなに興味もないのにロックっぽいリフばっかり弾いてみたりとか。
(オフスプとかそういうものを弾いてみたり。)

これがきっかけになるとありがたいんですけど...これを機にロックっぽい音楽を作れるようになったらええなあ。
(まあ、頑張ってもなんちゃって似非ロックどまりやと思います(苦笑)。)

今回もこのような記事にお付き合いして頂き、本当にありがとうございます。

疲れてる時に細かい数字を見るのはあまりよろしくない。

機材関連
05 /01 2016
みなさま、どうもです。

160501_02.jpg


ディストーションです。
ロンバケに突入したのでなんとなく作ってみました...GW中、あまり外に出たいと思わないので(笑)。
(※人が多いから)

どうでもいい話ですが、最近、メガネがないとPCが触れないということに気づきました。
1年ぐらい前まではメガネがなくてもある程度はいけたんですけど、最近は全然ダメで、メガネがないとPCの文字が見えないという...ああ、切ない。

同じようなことで、本を読んでいてもコンマ(.)が見えづらいこともよくあります。
小数点が辛くて、例えば、47uFやと思ったら、4.7uFやったとか...そのおかげで一度完成させたものが一瞬でご臨終したので再度作り直す羽目になったりと。
...まあ、これは自分の不注意なだけですが。^^;

まあ、とりあえず完成したのでギュインギュインさせときます...そんなにロックは興味ないですけども(笑)。

今回もこのような記事にお付き合いして頂き、本当にありがとうございます。

...で、何が書きたいのか?

機材関連
04 /11 2016
みなさま、どうもです。

160411.jpg


昨日の続きで、完成させたもの。
どこぞの本に載っていたパワーサプライです。

ありがたいことに画像は自然とぼかされていますので分かりづらいですが、見た目以上に汚い仕上がりです(笑)。
自分でも笑えてくるぐらいの不器用っぷりが...なんと言いますか。^^;

まあ、それでも問題なく動いてますので全然いいですけど。

しかしまあ、高倉健さんみたいに「自分、不器用ですから...。」と言う言葉が似合う人間になれたらええな、と。
僕みたいな人間が「不器用ですから」って言ったところで「バカじゃねえの?」って嘲笑されたうえスルーされるだけなので。^^;

高倉さん...カッコいいですもんね(笑)。

今回もこのような記事にお付き合いして頂き、本当にありがとうございます。

simple_st_comp

Max(プログラム言語)
04 /08 2016
みなさま、どうもです。

exsample_patch_160408.jpg

Maxで作ったシンプルなコンプレッサー。
あくまでも今作ってるドラムサンプラーの一機能として作成。

と言っても、MAXのリファレンス(チュートリアル)に載ってたコンプレッサーを基にステレオコンプ化させただけのものなので全くのオリジナルとは言えませんが。^^;

Battery3に付いてるコンプ機能を自分なりに真似したかったので準備してみました。
NI社には申し訳ないんですけど、Battery3のコンプ機能、いまいち好きじゃないんで。
(注:ハタヤマが使いこなせないだけです。)

Maxでコンプだったらomx.comp~オブジェクトを使うべきなんでしょうが、あれはどうもあまり好きにはなれません。
多機能すぎるし、何よりもアタックとリリースの調整がいまいちよく分からないので。
(あれ、タイム(ms)じゃなくて効きらしいんですよね。)

多機能すぎるのは処理も無駄に重たくさせてしまいますからね。処理数も多くなるし。
うん、そこが一番嫌。

そんなわけで、別の方法で準備をしてみませた。
ぶっちゃけ、チュートリアルに載っていたことをほぼまんま使っているだけなので、後先問題にならないかビビりものです(笑)。

というわけで、完成具合はこんな感じ。

・心臓部分(simple_st_comp.maxpat)
simple_st_comp.jpg
(載せたところで分かる人にしか???な話ですけども。^^;)

・原音
simple_st_comp-bypass.mp3&autoreplay=1&volume=80" />
(※音量にはご注意を)

・コンプ後(※わざとエグくコンプかけてます。)
simple_st_comp-processed.mp3&autoreplay=1&volume=80" />
(※音量にはご注意を)

うむ、なかなか良い感じじゃ...と、自画自賛しておきます(笑)。

こういうオブジェクトって使いまわしができるように作っていった方が後々ラクだったリするんですよね。
C言語みたく関数化さえしておけば、関数をインクルードしてしまえばその都度一から作る必要も無いわけだし。
(というか、それはプログラムを組む上での常識なんですけどね...。^^;)

そんな感じで最近は共通関数というか、パッチ(疑似オブジェクト)を作ることに力を入れてます。
パーツさえ作ってしまえば、あとは少し修正するぐらいで済むので。

つか、そっちをフリーでダウンロードできるようにしようかな?
まさに「Who does that !?(※誰得だよ!?)」な話ではございますが (笑)。


今回もこのような記事にお付き合いして頂き、本当にありがとうございます。

MAX7 : buffer~を復習する(その4(groove~オブジェクト))

Max(プログラム言語)
07 /10 2015
みなさま、どうもです。
今回もMAX7に関する記事です。

■目標■
「buffer~オブジェクトについて復習をする。」

今回はbuffer~オブジェクトに突っ込んだオーディオファイルを流します。
録音(サンプリング)まで書けたらいいなあ...。
(そんな体力残ってるかな?^^;)

※注意※
基本的なこと(パッチングの手法、メッセージやインスペクターなど)については省略していますのでご注意ください。
(その辺はお手数ですが各自でお調べください。)

音を鳴らすよ。(groove~オブジェクト)

前回、buffer~オブジェクトで領域の確保とオーディオファイルの読み込み方等基本的なことを書きました。

領域を確保してオーディオファイルを読み込んだのはいいけど、再生しないことには意味がない。
ということで、今回は再生することについて書きます。

今回、groove~オブジェクトをメインに書きます。
他にもplay~オブジェクトなるものもありますが、今回はこれについてはふれません。
(単に僕が使いこなせないのと、使い勝手があまり好きじゃないっていうのが理由です。)

今回はこれを基に説明します。
buffer.jpg

まず、
my_buffer.jpg
でmy_bufferという名のバッファー(サイズ:5000ms、チャンネル数:2ch)が確保され、その中にpiano_2.wavが格納されています。

で、再生については、
groove.jpg
が担当しています。

このgroove~オブジェクトの中身ですが、上記の場合だと、
「my_bufferを2chで出力しろ。」となります。

このgroove~オブジェクトですが、数学の公式みたいな感じで書くと下記みたいになります(笑)。
■groove~オブジェクト■
groove~ [バッファー名] [チャンネル数(※指定なければ1ch)]



もちろん、これだけでは何もしてくれませんので、指示(メッセージ)を与える必要があります。
指示については前回のbuffer~オブジェクトと同様にメッセージを送ります。

下記には基本的なメッセージだけ紹介しておきます。

startloop.jpg
再生(ループ再生)開始させるためのメッセージ。
決して、『play』ではないので注意。

stop.jpg
言わずもがな停止するためのメッセージ。

loop_mes.jpg
ループ再生するかどうかを設定するところ。
✕みたいなものはトリガーボタンで、反転状態で0(off状態),1(on状態)が出力されます。
メッセージ自体は下の「loop $1」がループするかどうかを決めます。
「$1」にはトリガーボタンから送られてくる数値が入れられます。C言語でいう引数みたいなものです。

初めからループすることを前提にするのであれば『loop 1』のメッセージボックスのみで大丈夫です。

playspeed.jpg
ここの部分は再生速度を設定するためのメッセージとなります。
今までと違うのはメッセージボックスではなくオブジェクトがメッセージを送るということです。
メッセージボックスだけがメッセージを送るという訳ではないということです。

上の数字の箱(実数)の値がsig~オブジェクトに送られて再生速度を送る仕組みです。

ここで異なるのが出力される形が他のメッセージと異なるということです。
sig~オブジェクトの場合、
signal_line.jpg
がでてますが『シグナル』という音の信号が出力されています。
なお、このシグナルについてはオブジェクトに「~(ティルダ記号)」がついていたらシグナルが出力されると思っておいてください。
(※某書に書かれていることをまんま引用するのであれば「シグナルを受け取ったり出力するオブジェクトは名前の最後にティルダ記号「~」が付いている。」ということです。)

ちなみに、
data_line.jpg
は数値や文字列といったデータが流れています。

しかし、なんでこの部分だけ『シグナル』でやりとりをする仕様にしたのかは謎です。
さすがにそこは僕には分からないので、開発者に聞いてください...ただし、英語で(笑)。

さて、オブジェクトの上にある
inlet.jpg
この部分を『インレット』と呼ぶんですが、インレットの入れる場所によって処理が異なります。
(※ちなみに出口については『アウトレット』と言います。)
真ん中と右(第2インレット、第3インレット)については再生開始位置(※第2インレット)と再生終了位置(※第3インレット)を入力することができます。

例えば、こんな感じ。
start_end.jpg
やっと一番初めの話に戻ってきたような気がしますが、こんな感じで開始位置と終了位置を入力することができます。
あとはwaveform~オブジェ(波形が書かれてるオブジェ)やその下の数値の箱(ナンバーボックス)をいじることで変更することができます。
(やりようによってはランダムで範囲をしてすることもできます。(←後にこれが重要となります。))

蛇足(loadbangについて)

過去の記事や、上の内容ではあえて無視してましたけど、
loadbang.jpg
ってなんやねん?と。
そろそろつっこまれそうなので書きます。

loadbangは「パッチを開いた(読込んだ)時にbangメッセージを送ります」という文字通りのオブジェクトです。
ちなみにbang(bangメッセージ)っていうのは「オブジェクトに何らかの動作のきっかけを与えるメッセージ(※某書の文を引用)」とのことやけど、僕にはこれをうまく説明することができません。
とりあえず『「お前、やれ!」コール(just do it!コール)』を送っているもんだと思ってもらえれば何の支障も出ません...たぶん(笑)。
(ふざけたことを書いてるようで、本当のことだし...。)

まあ、難しく考えずにloadbangオブジェクトはパッチを読込んだ時に設定(初期化)するためのオブジェクトと思ってくれたら問題ないです。

例えば、
buffer.jpg
の場合だと、loadbangの下に「-4.」というメッセージがあって、live.gain~ってところにつながっています。

live.gain~は音量スライダー(音量調整)みたいなものなので、
「パッチを読み込んだ時点で-4dBにしときます。」ということになります。

loadbangで設定しておかなければ、初期状態の0dBのままなので、そのまま再生したときがうるさくて気分が萎えます(笑)。

まあ、そんな感じで初期化させておきたいものに関してはloadbangを使います。


やっぱり、サンプリングまではいけませんでしたね。^^;

自分向けで外のこと(読む人側)は気にしないとか言いつつ、まだ丁寧に書いているような気がします。
正直、書いてるこちら側からすると効率悪いんでもうすこし雑に書いてもいい気がします(笑)。

まあ、そんなことはさておき、次の記事でサンプリングについて書きます。それでは。
(丁寧に書く部分も次で終わりやと思います。(ここで基本が終わるから。))

今回もこのような記事にお付き合いして頂き、本当にありがとうございます。

MAX7 : buffer~を復習する(その3(buffer~_01))

Max(プログラム言語)
07 /03 2015
みなさま、どうもです。
今回もMAX7に関する記事です。

■目標■
「buffer~オブジェクトについて復習をする。」
buffer_01.jpg
※画像をクリックすると拡大写真が見れます。

さて、今回から本格的にbuffer~オブジェクトについて入っていきたいと思います。

※注意※
基本的なこと(パッチングの手法、メッセージやインスペクターなど)については省略していますのでご注意ください。
(その辺はお手数ですが各自でお調べください。)

まずは領域を確保せよ。

前回、「『buffer~オブジェクト』は波形(音声データ)をメモリーに置いて作業を行う。」と書きました。
つまり、『メモリー・ベース』で波形を扱うにはメモリーのどっかにそれ用の領域が必要になるということです。

領域なんて言い方をすると難しく聞こえますが、単純に作業場というか自分の場所を作ってあげるようなものです。
例えば、オフィスの中に自分の作業をするための机(スペース)を置くようなものです。
自分の机がなければ何の作業もできませんからね(笑)。

以下、前回の記事で出したパッチ(↓)で話を進めていきます。。
buffer.jpg

まず初めにこのパッチ内でオーディオファイルを扱うためにメモリーに領域(作業スペース)を確保してやります。
上記のパッチの場合だと、これがそのスペースを確保するための宣言になります。
my_buffer.jpg

buffer~については何度も説明しているから良しとして、じゃあ、その隣の「my_buffer piano_2.wav 5000 2」はなんじゃ?という話になります。

これらはアーギュメントと言いまして、オブジェクトの動作方法を定めたり、初期パラメータを指定するのに用いります。
「my_buffer piano_2.wav 5000 2」は正確には「my_buffer」、「piano_2.wav」、「5000」、「2」に分けられます。

では、「my_buffer」、「piano_2.wav」、「5000」、「2」は何を意味しているかというと、
「my_buffer」:バッファー名(作業スペースの名前) ※バッファー名は必須
「piano_2.wav」:バッファーにあらかじめ置いておく音声データ
「5000」:バッファーのサイズ(ms) ※5000ms = 5秒
「2」:チャンネル数 (2ch = ステレオ ※1ch = モノラル)
※バッファー名以外は必須ではない。
(アーギュメントで指定しなくても問題は無い。(メッセージで設定可能(※後述))
※チャンネル数は宣言しなければ1chで設定される。


以上のことをまとめると以下のとおりになります。
■buffer~オブジェクト■
buffer~ [バッファー名] [あらかじめ読み込むファイル名] [バッファー・サイズ(msec)] [チャンネル数]
※アーギュメントの区切りは半角スペース


まあ、そんな感じで「今からこの領域使わせてもらうかんね。」と宣言します。

別に初めから全てを設定しなくてもいい。

上では最初の内にある程度設定をした状態で準備をしましたが、絶対にここまでやらなくてはいけないということもないです。
というか、扱っているうちに「あ、音声ファイル変えよっと。」とか「サンプリングしなおそう。(※これは後日説明)」とかいうこともありますし。
そうなると、バッファーサイズが変わったりもしますからね。

そういう場合、buffer~オブジェクトの場合ならこんな感じメッセージ・ボックスに書かれたメッセージを送って指示を与えます。
message.jpg
『read』『clear』『replace』など書かれているものがメッセージになります。
メッセージはボタンみたいなもので、このメッセージボックスをクリックすることで表記されているメッセージがオブジェクトに送信されます。
例えば、『read』のメッセージを押すとオーディオファイルを開くダイアログが表示されるし、『clear』を押すとバッファー内の音声データがいったん消されたりと...まあいろいろ。
(その辺はf1を押してリファレンスを読みましょう(笑)。)

ちなみにメッセージボックスはクリックするだけじゃなくてbangというメッセージでもメッセージを送信することはできるけど...そういうことはここでは書きません。
まあ、そういうこともできるということだけ知っといてください。機会があれば後日書きます。

とにかく、何でもかんでも一番初め(buffer~オブジェクト内)に宣言しなくても問題ないということです。
正直、バッファー名とチャンネル数を除いては後からでも設定できるので、その辺は使用目的に応じて臨機応変に宣言しましょう。
(※バッファー名もメッセージで変更することもできるようです。→『set』)

バッファーの中身は?

バッファーにオーディオファイルを読み込むのはいいけど、中身はどうなっているの?それって見れないの?

いえいえ、ちゃんと見れますよ。

方法は2つありまして、
1.『buffer~オブジェクト』をダブルクリックする。
2.『waveform~オブジェクト』に波形を描画させる。
の方法で中身を見ることができます。
(このほかにも手段はあると思いますが、とりあえず今はこれだけでいいっしょ。)

1.の方法はただバッファーの中身を見るだけ。
2.はバッファーの中身を描画させて、そこからいろいろな情報を抜き出すことができるのでメインはこちらになります。

2.の方法は下記のような感じで描画可能です。
waveform.jpg
『set my_buffer』と書かれたメッセージ・ボックスによってwaveform~オブジェクトにバッファーの中身が描画されます。
この『weveform~オブジェクト』には波形だけではなくその波形の情報(「長さ」など)も含まれてますのでそこからいろんなデータを持ってきて次の処理につなげることができます。

例えば、こんな感じ。
waveform_2.jpg
この場合、『waveform~オブジェクト』から再生範囲(とりあえず頭から最後まで)の長さを取得して『groove~オブジェ』で再生する流れになってます。
(見た目の問題上、一部処理を省略していますが...。^^;)

とりあえず、今回はここまで。
次回は『buffer~オブジェクト』が何をしているのかを書きます。

今回もこのような記事にお付き合いして頂き、本当にありがとうございます。

top