chakokuのブログ(rev4)

日々のごった煮ブログです

お越しいただきありがとうございます。

このブログでは主に以下の内容を記載しています。

  • 何か作った話(自分は何かを作るために生きている..できたらクスっと笑えるものや、アートと絡みたい)
  • 音楽(AerophoneやDTM(FL-Studio))
  • 趣味のロードバイク(坂道をひーこら走ると結構大変な人生(笑)と重なる。。仕事のストレスが軽いと走らなくなる。。いかん)

記事が渾然一体となってカオス状態ですが、マイコンのプログラムも、ちゃりで走るのも、料理するのも、自分の中ではそれぞれが繋がっているので、カオスな日常をそのまま反映させています。リンクや引用はご自由にどうぞ。質問等ありましたらコメントに書いてください。微力ながら自分の分かる範囲で回答します。
とにかく、、人に「あほやなぁ」と言われる事に精進するのが我が人生。

2019/1/26 追記
長らくお世話になった「はてな」様ですが、はてなダイアリーがサービス終了となり、はてなブログに移しましたが、宣伝がちょっと辛いのでbloggerに引っ越す予定です。引っ越し先は以下
https://chakoku.blogspot.com/

2019/7/20
ひっこしたbloggerですが、どうにもUIが使い慣れないのと、なんか寂しい。ネット空間で寂しいとはどういうことなのか?自分でもよくわからないが、bloggreはなんか寂しい。。記事を書く気がおきない。で、Hatena Blogは無料だと広告がかなり邪魔なんだけど*1長年使い慣れたHatenaに戻ることにしました。Hatenaはほっとする~


まとめ:https://sites.google.com/site/chakokumatome/

*1:有料が高すぎるので払えない

前回ブルースクリーンになったが、戻ってこれるのか・・・

頼まれ仕事があって、PCをフリーズさせるわけにいかないので、WindowsUpdateをずっと止めていた。当初のUpdateしない期限が切れたので再起動しろと言ってくる。前回ブルースクリーンになってえらいことになったけど、今回は戻ってこれるのだろうか。。

021-06 .NET Framework 3.5 および 4.8 の累積的な
更新プログラム (x64 向け Windows 10 Version 20H2 用) 
(KB5003254)

では一旦失礼して再起動・・
20H2は正しくパッチ適用できた。次は、21H1なのであった。

21H1は当たってるようなのだが、、

ダウンロードして更新しろと催促が出ている。

2021-06 x64 ベース システム用 Windows 10 Version 21H1 の
累積更新プログラム (KB5004476)

6/16時点での最新状態となった

シンセ教育アプリ Syntorialでシンセの音作りを学ぶ

シンセのボタンやスイッチの使い方が分かっても自分が聴きたいと思う音をどうやったら作り出せるのかが分からない。試行錯誤しても全然違う音になる。。HowTo本を少し読んだけど、説明の音にならない。。というわけで、、シンセの音作りを学ぶSyntorialというアプリがあり、これを買ってみた。
アプリは全33のコースから成っていて*1、まず機能と出てくる音についてデモがあり、デモの後は実際に音だけが再生されて、それをシンセを使って作り出す。最後に答え合わせをして、同じ音が出る正しい設定かどうか、間違っていたら間違った設定が赤く表示される。このような、、(1)機能説明とデモ->(2)音を聴く->(3)同じ音になるよう操作する->(4)答え合わせを、繰り返して、使える機能を増やして最後は、Syntorialのシンセの全機能を使って音を作れるようになるという、よく考えられたStepByStepで学ぶソフト。

コースの最初は、矩形波(Pulse波?)でdutyを変えながらどう音が変わるのか、2つのOSC(同じ矩形波)の組み合わせかた、次は、矩形波とノコギリ波、波形とエンベロープと、コースが進むにつれて機能の組み合わせが変わります。今は4番目のレッスン中(レッスン時間は4時間ぐらい)。音色を聞き分けるのは非常に難しい。
33のコースなので、全部終わるにはそれなりに時間がかかりますが、全部終えたらかなり力が付くと期待。
扱ってるのは減算方式のシンセ(と自分は理解)で、今風のシンセが持っている機能のうち、どれだけが身につくのか(今風シンセの機能に対するカバー率)は不明。だけど、、Syntorialで勉強していると、(減算方式の)シンセの基本は、OSCで生成する波形として、(矩形波、ノコギリ波、三角波)のどれを使うか、倍音にするのか、混ぜる比率はどうか、そういった事が基本中の基本で、この機能を十分に使いこなることが最重要では?と思うに至りました。だから。。。2つのOSCと、3つの波形と混ぜ方と、LPFだけで、どれだけ音のバリエーションを生み出せるのか、単純に組み合わせて音を出してみたい。手でやると大変なので、、CircutPythonでMIDI信号を生成して、Spireを自動演奏させて、パラメータを5次元ぐらいでループを回すと。。スクリプトを使うことで単純作業が秒単位で正確に実施できるので助かる。

■ご参考URL
SyntorialのWebページ、お試しレッスンは無料(ツールを使ってどんな風に勉強するのかが分かる)
https://www.syntorial.com/

*1:カタログには、129 CHALLENGES、147 VIDEOSとあります。これだけ見てもまぁ、教材の充実っぷりは分かるかと。音の違いは実に微妙なので、全てを習得できるかどうかは分かりません。ちなみに、全部英語なので、自分は細かい説明は聞き取れません。オッシレータ1は矩形波で、、ぐらいは分かりまますが、、追加説明や注意点が分からない

CirtuitPythonでMIDI Controllerを作る

CircuitPythonの組み込みライブラリには、USB MIDIがあり、AdaruitBundleも使うと簡単にMIDI Controllerが作れる。以下は、ボリュームの操作に応じて、MIDIのControl Changeを送信するアプリ

import time
import random
from analogio import AnalogIn

import usb_midi
import adafruit_midi 
from adafruit_midi.note_off import NoteOff
from adafruit_midi.note_on import NoteOn
from adafruit_midi.control_change import ControlChange

USB_MIDI_channel = 1 
usb_midi = adafruit_midi.MIDI(midi_out=usb_midi.ports[1], out_channel=USB_MIDI_channel - 1)


# MIDI Channel (from Adaruit: [Code USB MIDI in CircuitPython])
# 0 Bank Select
# 1 Modulation Wheel
# 2 Breath Controller
# 3 Undefined
# 4 Foot Controller
# 5 Portamento time
# 6 Data Entry Most Significant Bits
# 7 Volume
# 8 Balance
# 9 Undefined
# 10 Pan
# 11 Expression
# 12 Effect Controller 1
# 13 Effect Controller 2
# 14 Undefined
# 15 Undefined


CC_EXPRESSION=11

# range 0-127
MAX_VALUE = 127

knob0 = AnalogIn(board.A0)  # e0 - 0xffff


def ctrl_knob():
    prev_val = 0
    while True:
        level = knob0.value
        val = int(MAX_VALUE * level / 0xffff )
        if prev_val == val :         # or  abs(prev_val - val) < 2:
            pass
        else:
            usb_midi.send(ControlChange(CC_EXPRESSION, val))
            print(" cc:",val,end="")
        prev_val = val
        time.sleep(0.1)

ボリュームを操作すると、Control ChangeがPCに送信される。PC側ではDAWFL Studioが走っていて、Control ChangeがSpireのLowPassFilterのCut Off 周波数ボリュームに割り当てられている。ボリュームを操作すると、SpireのCut Off ボリュームが連動して動く。だから、ボリュームを回すとシンセの音が変わる。
普段だとマウスの上下操作でGUIのボリュームを操作するのだけど、どうも慣れないし、直感的ではない。だけど本物のボリュームをグリグリ回すと微妙な匙加減が可能にるし、自分の指で音色を作っている実感が沸いてくる。
システムの外観:Raspbery Pi Pico上でCircuitPythonを動かしていて、USB経由でPCと接続、PC上ではDAWFL Studioが動いている。FL Studio内で先日買ったSpireが動いている。

ご参考:
FL-Studioには、MIDIコントローラと、シンセのボリューム類とを紐づけるための機能(Multilink機能とか)があって、ボリュームボタンを押して、シンセのボリュームを操作ー>MIDIコントローラを操作 すると、2つの間で紐づけがなされる。一度学習させると、MIDIコントローラを操作すると、紐づけたシンセのボリュームが連動して動く。赤枠で囲んだ部分がマルチリンクのボタン

USBだとケーブルがぶらぶらするのがちょっとアレですが、、BLE MIDIと比べるとソースコードも極端に短いし(CircuitPythonとAdafruitのライブラリのお陰なのですが)、応答遅延も感じられないので、無理してBLEにしなくてもいいかと思うのでした。


参考記事
Adaruit: [Code USB MIDI in CircuitPython]
Code USB MIDI in CircuitPython | Grand Central USB MIDI Controller in CircuitPython | Adafruit Learning System

CirtuitPythonで作った自動作曲アプリ

サンプルを見たところ、USB MIDIを使うことで、MIDIのNoteOn/NoteOffを送ることが簡単にできることが分かった。そこで、、ドミソの和音からランダムに音を選択して自動演奏するソフトを作ってみた。以下のアプリを走らせて、FL StudioMIDI INに設定すると、勝手に、延々と、ドミソドの中から音を拾って再生する。ドミソの和音から選んでいるのでメロディーの破綻はない。アルゴリズムが超簡単なので、問題は聴いていて飽きないかどうか。。

#
# test for USB MIDI
#
#

import time
import random

import usb_midi
import adafruit_midi 
from adafruit_midi.note_off import NoteOff
from adafruit_midi.note_on import NoteOn

scale = {
'C5' : 60,
'D5' : 62,
'E5' : 64,
'F5' : 65,
'G5' : 67,
'A5' : 69,
'B5' : 71,
'C6' : 72,
'D6' : 74,
'E6' : 76,
}

CC = ('C5', 'E5', 'G5', 'C6', 'E6')

USB_MIDI_channel = 1 
usb_midi = adafruit_midi.MIDI(midi_out=usb_midi.ports[1], out_channel=USB_MIDI_channel - 1)

VELOCITY=64

def auto_play(code,velocity=VELOCITY):
    while True:
        note = code[int(random.random()*len(code))]
        usb_midi.send(NoteOn(scale[note], velocity))
        print("{:s} ".format(note),end="")
        time.sleep(0.5)
        usb_midi.send(NoteOff(scale[note], velocity))


def all_off():
   global VELOCITY
   for note in scale.values():
       usb_midi.send(NoteOff(note, velocity))

FL Studioとソフトシンセを使って、USB MIDIが出力するランダムなNoteを再生する

自動再生している音楽(単にドミソドのランダムです。シンセのアルペジェータが動いているので多少はそれらしくなっていますが)
https://soundcloud.com/dune-geek/automatic-composition-test001

こんな感じで最終的にはIBIZA風のハウスを自動で延々と流したいのだが・・・

30分程度で、USB MIDIで自動再生する試作アプリが作れた。他人の褌状態だけど、、CircuitPythonのバンドルライブラリの威力はすごい。。

MIDI コントローラを作りたい

Spireでボチボチ音作りをやってるけど、マウスでボリュームを動かすのはなかなか慣れない。できたら、本物のボリュームやらスイッチをグリグリ動かして音色を調整したい。だから、、抵抗とマイコンMIDIコントローラを作りたい。
CircuitPythonならUSB MIDIのライブラリが組み込まれているので、PIcoとボリュームがあればUSB接続のMIDIコントローラができるはず。。
できたらUSBが不要なBLEで接続したいところだが、、前回、ESP32を使ってBLEで繋がるMIDIコントローラを試作したけど、MicroPythonだとWindowsとのペアリングができず、Arduinoか、SDKでないとだめだった。

■参考URL
Adarfuit社の開発紹介
Code USB MIDI in CircuitPython | Grand Central USB MIDI Controller in CircuitPython | Adafruit Learning System
CircuitPythonのAPI仕様書
usb_midi – MIDI over USB — Adafruit CircuitPython 6.2.0 documentation

シンセの音作りを学ぶにはどうすればいいのか

先日 Spireを買って、一気に理解したいので、オンラインのビデオチュートリアルを契約して大体見終わった。
ビデオは英語だったので細かい部分がちょっと分かっていませんが、スイッチやらボリュームやらを動かしながら、音を出して説明されているので、何をどうさわったら音がどう変わるのか?までは分かった。
しかし、、自分が聴きたいと思う音をどうやって作ればいいのか??オッシレータとかフィルタとかエンベロープとかをどう選択したら望む音になるのか、その過程が分からない。HOWが分からないというやつ。

そこで、、音作りのチュートリアルを探し出して、望む音に到達するまでを解説してくれるサイトでHOWを学ぶことにする。
例えば、以下はAbetonのシンセチュートリアル。これで音作りの過程が学べるだろうか。。

https://learningsynths.ableton.com/ja

Web上のチュートリアル(Baseのページ)
Learning Synths

https://www.edmprod.com/10-best-sound-design-resources-net-today/


Syntorialというアプリがあって、これは動画とシンセと教育システムがワンセットになったアプリで、step by stepで少しずつ機能を学ぶことができる。それに、、耳で聴き分けて、セッティングして採点してもらうようなシステム。確かに高いのだけど、これをみっちりやると耳の能力が上がって、どう組んだらこの音になるのかがかなり分かるようになるのではないかと期待。値段は1万以上する。しかも英語。。
Syntorial: The Ultimate Synthesizer Tutorial | Syntorial


プリセットの向こう側へ。シンセサイザーの音作りを体系的に演習できる「Syntorial」を制覇者がレビュー | ロゴスとレンマのI/O