2024年11月25日月曜日

「使用中止」と発表されたRolandのMA-4の再生?に挑戦する〜まずは下準

今までもときどきこのBlogで登場している古い電子楽器たち(例えばこんな過去記事で)ですが、これらの楽器たち用のモニタスピーカーとして、RolandのMA-4(公式より使用中止のお願いが出ていました)を使っていました。
#構成としては、Soundtracs(←公式Webサイトが見つからず…)のTopaz Macro 14ch Mixer(←Sound On Soundの記事)に各電子楽器からの信号を入れてモニタスピーカーに出力しています。

公式Webサイトで「使用中止」と言われてしまうと、使い続けるのが怖くなってきて、ちょっと中身を確認してみることにしました。

このモニタスピーカーは、右側のスピーカーにアンプが内蔵されていて、そこから左側のスピーカーにケーブルをつないでステレオで鳴らすことができるというものです。構造的には、あまり複雑でもなく高級感のあるものでもないので、左右それぞれ数本のネジを外してしまえば中身にアクセスすることができます。

アンプ基板の入っている右側のスピーカーには大きなトランスが入っていて、これが重量の大部分をしめている感じでした。「使用中止」を言われる理由が「電解コンデンサの問題ではないか」と思って開けてみたのですが、基板上の電解コンデンサの頭は膨れておらず、大きな問題は感じませんでした。しかしよく見てみると、1つだけ電解コンデンサの側面に白い粉のようなものが付着しているものがありました。粉を拭き取ってみると、側面に小さなひび割れがあるように見えました。やはり使わない方が良いと判断し、まずは使えそうなスピーカーユニットを取り出すことにしました。

スピーカーユニットには、「P3DUC-12(4Ω5W)」と書かれていました。Google先生に聞いても情報が見つからなかったので詳しいことはわかりませんが、大きなマグネット(内磁型磁気回路なのでマグネット自体は外からは見えない)で見た目は良い感じ。古いので減磁していなければよいのですが、以前に自作したPAM8610デジタルアンプICモジュールとMT3608 DC-DCコンバータICモジュールなどを組み合わせたパワーアンプにつないで音が出るか試してみました。すると、モニタ用のスピーカに使われていただけあって素直な感じの音が出たので、これなら使えると思いました。

MA-4に内蔵されていたトランスには、「HKSP-96877」との刻印がありましたが、これも情報が見つかりませんでした。(MA-4に使われていたトランスであることだけは情報として見つけましたが、「知っとるがな」ということで)INPUT AC 100V(50/60Hz)でOUTPUT AC 11V/1.5Aと刻印されているので、このトランスでAC100VをAC11Vまで落として、基板側で電子部品(ダイオードや抵抗、コンデンサなど)で直流にしているのだと思います。
#トランスからの電気(AC11V)を、4つのダイオードに通すような設計になっていました。三端子レギュレータのようなものは見当たりませんでした。

MA-4の基板に載っていたアンプICはJRC(日本無線)の4558DD(←Datasheet)というデュアルオペアンプICとSANYOLA4597(←Datasheet)という2chパワーアンプICが使われていました。Roland独自のものではなく汎用的なIC部品を使っているので、これらのICは何かに使えるかもしれないと思って基板から外して部品としてストックしておくことにしました。

さて、本格的にMA-4の再生?を目指してスピーカーユニットを使えるようにするとなると、別のアンプを用意しなければなりません。

これまでも紹介してきた「PAM8403(←Datasheet)」というデジタルアンプICを載せたモジュール(GF1002)を使えば一応音の確認くらいはできそうですが、低音・高音のバランス調節もすることができたMA-4より単純なものになってしまいます。そこで、NE5532Texas Instruments)を載せたプリアンプモジュールを購入して、PAM8403と組み合わせて使ってみたらどうなるか、実験をしながらプリメインアンプを作ってみることにしました。

ここまで準備したところで、長くなってしまったので続きは次回にします。

【次回記事】「使用中止」と発表されたRolandのMA-4の再生?に挑戦する〜筐体に収めて完成させる

2024年11月17日日曜日

Raspberry Pi Picoのプログラミングに挑戦〜ビジュアルプログラミングで音楽演奏ができるのか

以前の続きです。Raspberry PiでプログラミングをしてRaspberry Pi Picoをコントロールすることにチャレンジしていますが、これまで、MicroPythonThonnyを使用)でのプログラミングに挑戦して、Lチカの次に音楽演奏までやってみました。次のステップとして、Lチカのときと同じようにビジュアルプログラミングでも音楽演奏ができるのか試してみたいと思います。今回もRPi 3RPi 400を使ってやってみようと思ったのですが、普段使っているMacBook Proで確認してからRaspberry Piでやってみることにしました。

〈Piper Makeの場合〉
Picoのビジュアルプログラミングに特化した「Piper Make」ならばきっとできると思い込んで、半ば楽観的な気持ちで試し始めたのですが、それらしいブロックを探していくうちに段々と雲行きが怪しくなってきました。「#Value」の中に「note[A4]」(音階を選ぶことができる)を発見してぬか喜びをしてみたり、「duration[sixteenth]」(音符(音の長さ)を選ぶことができる)と組み合わせてできることがないかと試行錯誤してみたりしましたが、どれもうまくいきませんでした。いくら探してもGPIO PinにOUTする方法が見当たらないのです。

もしかしてと、いつも使っている「CREATIVE」モードではなく「STORY」モードにそれらしいものがあるのではないかと考えて探してみました。Piper Makeを開いた画面の下側に「EXPEDITION TELEPORT MENU」というメニュー一覧があり、デフォルトが「BASE」となっているのですが、その中から「SENSORS」を選ぶと音楽に関係しているようなSTORYが現れます。(「SHOW ALL」をクリックしても見つけられます)これを使って音楽を演奏させてみると、MacBook Pro(PCなどでやっても同じです)から音が出ました。この方法だと、Picoはセンサーとして働くようにプログラムするようになっていて、Picoにスピーカーをつないで音を出すという当初の目的は達成できないことになります。

どうもこの辺りで手詰まりとなってしまいました。

〈BIPESの場合〉
気を取り直して、Picoのビジュアルプログラミングで以前使ったことのある、「BIPES」でスピーカーから音を出すプログラムが作れないかやってみます。BIPESは、Picoに限らずさまざまなマイコンボードに対応しているビジュアルプログラミング環境です。ESP8266系のマイコンボードやESP32系のマイコンボードにも対応しているし、中には、私も持っているものもあります。(そのうち動作確認してみたいと思っています。思っています)また、M5Stackmicro:bitにも対応しているので、英語表記の精神的な壁を乗り越えてしまえば、かなり使えるツールだと思います。

そう思って確認していくと、選択するマイコンボードによって使えるメニューやブロックが変わるということがわかってきました。マイコンボードを選択する窓で、先述のESP…やM5…などのマイコンボードを選んだときには、「Outputs/Actuators」というメニュー項目が現れて、「Sounds」メニューから音(音楽)を鳴らすブロックを選択することが可能になるのですが、Arduino系のマイコンボードやPicoを選ぶと、「Actuators」だけのメニュー項目に変わってしまい、「Sounds」メニューは出てこなくなります。うぅむ、一筋縄ではいかないですね。

仕方がないので、Thonnyで作ったMicroPythonのプログラムを基に、GPIO PinにPWMを出力するブロックがないか探しました。「Machine」メニューの中に「In/Out Pins」というメニューがあり、その中に「RPi Pico PWM…」というそれらしいものが見つかりました。とりあえずこれを並べてみれば音楽演奏っぽいことができそうだと当たりをつけてやってみました。作ったプログラムは、以下のとおりです。

第一段階として、こんなプログラムで音楽演奏ができることはわかりました。とは言え、プログラムとしては、正直にいうとスマートとは言えないなぁと思ってしまいました。また、Frequencyに入力する数値は、整数値しか受け付けないようで、無理やり整数の近似値を入れているので、出てくる音にも違和感があります。これをベースにしながら、よりスマートに応用範囲の広いプログラムに改良していきたいと考えています。

〈関連情報〉
下準備として、PicoでMicroPythonが使えるようにするファームウェアの設定作業は、過去の拙Blogの記事を参考にしてください。公式WebサイトのPicoでMicroPythonの情報もご確認ください。

2024年11月10日日曜日

自作スピーカーと2.1chアンプでスピーカーシステムを組んでみる

これまでいろいろなスピーカーを作ってきましたが、はじめの頃に作った試作品はあまり使うこともないし邪魔なので処分してしまおうかとか、バラして使えそうな部品だけ取ってしまおうかとかと思いながら、しばらく思案しておりました。周波数分割器や2.1chアンプ(ZK-MT21YouTube動画)があるので、これらと組み合わせたらどんなものができあがるだろうかということが気になってしまい、とりあえずやってみることにしました。

着想のスタート地点は、以前の記事で紹介した(3番目のスピーカー=5cm,8Ω,0.5W)「低音すかすか」なスピーカーが「ツイーターとしてなら使えるのではないか」と思ったところでした。これに在庫しているスピーカーユニットを適当な箱に入れたものを組み合わせて2 Wayスピーカーのように組んでみてはどうかと思いました。さらに、これも以前の記事で紹介したサブウーファーを組み合わせて2.1chのスピーカーシステムにするという計画です。使用するスピーカーユニットは以下のとおりです。

  • Amazonuxcell←Amazonのストアページ)で購入した、詳細不明のフルレンジ(8Ω0.5W)を謳った薄っぺらいスピーカーユニット(2個1,100円税込)をツイーターとする。
  • 秋月電子通商の店舗で購入した、「F02408H2(8Ω10W)」という北日本音響製の広帯域用(フルレンジ)77mmスピーカーユニット(1個300円税込を2個)を中低音域用とする。
    #YouTubeでもよく取り上げられているコスパのよいスピーカーです。
  • Amazonで4,300円くらいで購入した、Dayton Audioの「TCP115-4(4Ω40W)」をサブウーファーとする。

2.1chのアンプ=ZK-MT21には、サブウファー用の出力は独立してありますが、左右のスピーカー出力は、それぞれ1つずつしかありません。ここに、Amazonで見つけた2 Wayスピーカー用の周波数分割器(クロスオーバーフィルター)をつないで高音と中低音に分割することにしました。Amazonの商品ページに書かれていた情報は、以下のとおりです。

周波数応答:48Hz〜20KHz
インピーダンス:4-8オーム
定格電力:80W

以前の記事で取り外し可能なエンクロージャーを作ったときに使ったものと同じ周波数分割器です。素性や詳しい仕様がよくわからないので具体的な商品紹介は控えます。

結論としては、「低音すかすか」スピーカーでもツイーターとしては使えそうだけれど、そこまで劇的に変化するほどの効果はなくて、高音の音の広がりをちょっとだけ足したい場合に追加するのもありかな程度と感じました。例えば、音域が広く音数の多いオーケストラのような楽曲を聴く場合には、あった方が良いかなと思いました。
#ツイーター専用を謳ったスピーカーユニットを使った場合は、どうなるのかを聴き比べたいところです。

#2.1chのアンプ=ZK-MT21(右側)からの出力を周波数分割器に入力して、Bassと Trebleに分割して、それぞれのスピーカーへ出力しています。

副産物的な気づきとして、それぞれのスピーカーをバラバラに設置できるので、置き方や向きなどの要素を変化させて聴き比べることができることもわかりました。配線がごちゃごちゃして見た目が悪いところは難点ではありますが…。

2024年11月2日土曜日

Raspberry PiでRaspberry Pi Picoのプログラミングに挑戦〜圧電スピーカーをつないで音を出す

以前の続きです。Raspberry Piでプログラミングをして、Raspberry Pi PicoをコントロールしてLチカする実験をしましたが、次のステップとして、「音を出す」ことに挑戦したいと思います。今回もRPI 3RPi 400を使ってやってみます。まずは、MicroPythonでできるかやってみようと思いますが、RPi 3では「Visual Studio Code」が使えなかったので、「Thonny」だけでやってみることにします。
#下準備として、PicoでMicroPythonが使えるようにするファームウェアの設定作業は、過去の拙Blogの記事を参考にしてください。公式Webサイトの情報もご確認ください。

まずは、Thonnyを起動して作業開催。既に様々な設定が終わっているので、すぐにプログラムを書き始めます。今回は、@undo0530さんの「Raspberry Pi PicoでMicroPythonでPWM信号でスピーカーでメロディー演奏」を参考にしながら、曲を演奏するMicroPythonプログラムを書きました。内容は以下のとおりですが、ファイル名は任意で決めていただいて構いません。

from machine import Pin, PWM, Timer
speaker = PWM(Pin(17, Pin.OUT))
led = Pin(25, Pin.OUT)
ahz = 440
A4 = ahz
B4 = ahz * (2 ** (2/12))
C5 = ahz * (2 ** (3/12))
D5 = ahz * (2 ** (5/12))
E5 = ahz * (2 ** (7/12))
F5 = ahz * (2 ** (8/12))
G5 = ahz * (2 ** (10/12))
A5 = ahz * 2
mspb = 400
melody = [C5,0,C5,0,G5,0,G5,0,A5,0,A5,0,G5,0,0,0,F5,0,F5,0,E5,0,E5,0,D5,0,D5,0,C5,0,0,0]
i = 0
def beat(timer):
global melody
global led
global i
global speaker
if i >= len(melody):
speaker.deinit()
led.value(0)
timer.deinit()
elif int(melody[i]) == 0:
speaker.duty_u16(0)
led.value(0)
else:
speaker.freq(int(melody[i] + 0.5))
speaker.duty_u16(0x8000)
led.value(1)
i += 1
tim = Timer()
tim.init(period=mspb, mode=Timer.PERIODIC, callback=beat)

ScratchMicrosoft MakeCodeのように、はじめから音階が用意されていないので、PWMで作らなければなりません。そのために、使う音名に12平均律の各音の周波数を計算して入れて、メロディとして並べて演奏するプログラムにしています。「0」は、休符です。

このプログラムを作る過程で、MicroPythonでの「べき乗」や「累乗根」の計算式の書き方を学びました。各音の周波数値を決めるために近似値を使わずに計算式で計算をさせるプログラムにしたのは、(内部処理によって計算精度が微妙に違うかもしれませんが)できるだけ「正しい12平均律」に近づけたいと思ったからでした。実験した圧電スピーカーとPicoは以下のとおりです。(Seriaで購入した小さなモニタスピーカー模型?に圧電スピーカーを仕込んであります)

プログラムを書き終えてから、PicoをUSBケーブルでRPiにつなぎ、認識された(認識がうまくいかない場合は、一度「Stop/Restert backend」ボタンをクリックすると認識される)ところでRUNボタンをクリックすると、無事にメロディが鳴ってくれました。(「きらきら星」です)RPi 400でもRPi 3でも問題なく、音程も思った通りで「楽器」としても面白いものができた感じになりました。今回取り組んだ「周波数から音階を作る」という作業は、とても面白いと思いました。一方で、もう少しスマートな書き方ができないものかと思案しています。

〈参考資料〉

【追記】これまでのPicoでのプログラミング(フィジカル・コンピューティング)に関する拙Blogの記事もご覧ください。(2024.11.4←これからも適宜更新していきます)