電子趣味の部屋

電子系のガジェットやアプリ開発等の趣味の話題を書いてます

音源作りに持っておきたい本 サウンドプログラミング入門

スイッチサイエンスで買い物をした時についでにM5Stack ATOM Echoも買ったので、久しぶりにPSG音源でも作って遊ぼうかなと思ってます。
過去にArduinoやmbedでPSG音源やファミコン音源を作って遊んでたことがありました。
その頃に結局実現する前に飽きて止まってしまってますがFM音源を作ってみたいなと思い、仕組みを理解するために買って今でも音源関係で役に立っている本があります。

サウンドプログラミング入門 - 音響合成の基本とC言語による実装

初版は2013年3月10日発行ですが、現在でも現行商品として販売されています。

章の構成を見てもらえればわかると思いますが、波形を出力する基本からPSG音源やFM音源等の仕組みも解説されていて1冊で一通りのことがコンパクトに書かれています。
この手の本は他になかなか無いので、重宝しています。

章の構成

第1章 サウンドプログラミングの基礎知識
 1.1 サンプリング
 1.2 標本化
 1.3 量子化
 1.4 メディアの規格
 1.5 WAVEファイル
 1.6 C言語によるサウンドプログラミング
 コラム1 サウンドレコーダー

第2章 サイン波を鳴らしてみよう
 2.1 サイン波
 2.2 波形と周波数特性
 2.3 12平均律音階
 コラム2 フェード処理

第3章 サイン波を重ね合わせてみよう
 3.1 サイン波の重ね合わせ
 3.2 ノコギリ波
 3.3 矩形波
 3.4 三角波
 3.5 位相
 3.6 白色雑音
 コラム3 音の三要素

第4章 周波数特性を分析してみよう
 4.1 周波数分析
 4.2 フーリエ変換
 4.3 窓関数
 4.4 楽器音の周波数分析
 4.5 スペクトログラム
 4.6 高速フーリエ変換
 コラム4 バーチャルピッチ

第5章 加算合成 ~ 足し算で音を作ってみよう
 5.1 加算合成
 5.2 サイン波の重ね合わせ
 5.3 時間エンベロープ
 5.4 オルガン
 5.5 ピアノ
 コラム5 分析合成

第6章 周波数特性を加工してみよう
 6.1 フィルタ
 6.2 FIRフィルタ
 6.3 IIRフィルタ
 6.4 DFTフィルタ
 コラム6 インパルス応答

第7章 減算合成 ~ 引き算で音を作ってみよう
 7.1 減算合成
 7.2 原音のフィルタリング
 7.3 周波数エンベロープ
 7.4 音声合成
 7.5 ボコーダ
 コラム7 パルス列

第8章 PSG音源 ~ 電子音を鳴らしてみよう
 8.1 PSG音源
 8.2 時間エンベロープ
 8.3 ゲームミュージック
 8.4 効果音
 8.5 オーバーサンプリング
 コラム8 MMLとMIDI

第9章 アナログシンセサイザ ~ 楽器音を鳴らしてみよう
 9.1 アナログシンセサイザ
 9.2 LFO
 9.3 トレモロ
 9.4 ビブラート
 9.5 ワウ
 9.6 ADSR
 9.7 オルガン
 9.8 バイオリン
 9.9 ピアノ
 9.10 ドラム
 9.11 アナログ信号とディジタル信号
 コラム9 デチューン

第10章 FM音源 ~ 金属音を鳴らしてみよう
 10.1 FM音源
 10.2 変調指数
 10.3 周波数比
 10.4 時間エンベロープ
 10.5 チューブラーベル
 10.6 エレクトリックピアノ
 10.7 ディジタルシンセサイザ
 コラム10 モジュレーション

第11章 PCM音源 ~ サンプリングした音を鳴らしてみよう
 11.1 PCM音源
 11.2 タイムストレッチ
 11.3 ピッチシフト
 11.4 Log-PCM
 11.5 DPCM
 11.6 ADPCM
 コラム11 ループシーケンサ

第12章 リアルタイム処理のサウンドプログラミング
 12.1 サウンドデバイスとサウンドドライバ
 12.2 録音処理
 12.3 再生処理
 12.4 ループバック再生
 12.5 ボイスチェンジャ
 コラム12 Pure DataとSuperCollider

Sipeed Maix Amigo のメモ

Sipeed Maix Amigo を買ったので、初めに用意したものをメモとして残しておきます。

MaixPyドキュメント

https://wiki.sipeed.com/soft/maixpy/en/

ファームウェア

https://dl.sipeed.com/shareURL/MAIX/MaixPy/release/master

2021年6月25日の最新
https://dl.sipeed.com/shareURL/MAIX/MaixPy/release/master/maixpy_v0.6.2_54_g897214100
maixpy_v0.6.2_54_g897214100_amigo_ips_defaults.bin

スイッチサイエンスで2021年6月21日に購入したバージョンはIPSの方だった。
説明にはTFTと書いてあったので、最初にTFTの方を入れたら色が反転したりラインがズレたりした。
IPSとTFTが混在している可能性がある。

kflash_gui

https://github.com/sipeed/kflash_gui
ファームウェアを書き込むもの。
ファームウェアを書き換える場合はEraseが必要 。(デフォルトはサイズが1MBだが上手く消されないので、16MBに変更する。)

モデル

https://dl.sipeed.com/MAIX/MaixPy/model

実行するときに別途モデルが必要な時がある。
何が必要かはドキュメントを参照する。

サンプルスクリプト

https://github.com/sipeed/MaixPy_scripts

MaixPy IDE

https://dl.sipeed.com/shareURL/MAIX/MaixPy/ide

最終更新が2020年7月とバージョンが古く、ボードの選択でAMIGOがない。
選択しなくても使えるが、詳細は不明

Thonny(https://thonny.org/)でもMicroPython(generic)で使用可能
フラッシュにソースを保存するときにエラーメッセージが表示されるが、問題なく保存して実行される。
サブディレクトリは作成不可

ついに HP-16C を手に入れました。

過去に HP-16C の互換機の SwissMicros DM16 を買った話をしたのですが、ついに本物の HP-16C を入手しました。

実は本物ではないDM16は飽きてすでに手放してます。

この度電子工作関連で10進数と2進数と16進数を変換しながら見たいことがありまして、普通のCASIOの関数電卓(fx-JP500)のn進計算モードを使ってました。
そこで同じようにn進数の変換がワンタッチですぐにできる HP-16C が欲しくなりました。

SwissMicros DM16を大型化して本物に近づけたDM16Lも考えたのですが、送料を考えると2万円に近くなるので、結局本物を狙うことにしました。

国内外のオークションやフリマで相場は2~3万円なのですが、1ヵ月ほどウォッチして運よくかなりの美品を2万円で手に入れることができました。
もう30年以上前のものなので、大抵のものは写真でもわかるくらいの傷や汚れがあるのですが、年代物とは思われないくらいの新品に近い状態でした。恐らく今までのオーナーはあまり使わずにコレクションとして保管してあったものと思われます。

HEXボタンで16進数へ、DECボタンで10進数へ、OCTボタンで8進数へ、BINボタンで2進数へすぐに変換できます。

使用目的の99%はn進数の変換ですが、相当な美品だったこともあり、コレクションとしても大変満足しいます。

DM16L

DM16L

  • SwissMicros
Amazon

3D CADの入門に最適 Fusion360 マスターズガイド ベーシック編

3Dプリンタにも慣れ、最近は自分でも簡単なケースやホルダーのようなものを自作してるのですが、定番のFusion360を使用しています。
いざ使ってみると、操作方法が全く分かりませんでした。
BlenderやShade等の3Dソフトはある程度使えるのですが、3D CADは思ったより全く違いました。
そこで入門書で定番のFusion 360 マスターズガイド ベーシック編を買ってみました。

始めのペン立ての制作を本書に添って進めるだけで操作の基本がわかり、色々と自分で作れるようになりました。全体の10%以下のページ数の内容です。
3Dソフトがある程度使えることもあると思いますが、未経験者でもわかりやすく書かれている本だと思います。

久しぶりに読んでみて効果があった本だったので、同じように3D CAD (Fusion360)の使い方に戸惑ってる方には間違いなくお薦めできる本だと思います。

Arduino UNO互換機を購入する際の注意事項


Arduino UNOを購入する際に価格が安い互換機も探す場合に注意事項を紹介します。
特にUNOの互換機にはUSB-Serial変換チップに純正品と同じATmega16U2ではなく、CH340Gが使われている場合があります。
これはArduino開発環境のドライバとは別にドライバのインストールが必要になり面倒なので、避けたほうが良いです。

コストを下げるためにCH340Gが使われており、この手の物は他の部分でも作りが雑で同じ互換機でもATmega16U2が使用されているものより質が悪いことが多いです。
AliExpress等で中華互換機を探すと全体的にATmega16U2と比較して極端に安いものが多いですが、手間と質を考えるとATmega16U2の方が色々と楽になります。
(ATmega16U2の物は安くても1000円前後するのに対して、CH340Gのものは300円ほどからある。)

またCH340Gは機能ICでUSB-Serial専用チップです。プログラムの書き換えができるのATmega16U2と違い、ファームウェアを書き換えてAVRライタにしたり、USB-MIDIで遊んだりはできません。

始めは割り切って買ったとしても、後から色々と不具合が出るので、ATmega16U2が使われていることをチェックして購入することをお勧めします。

UNOと同じくATmega16U2を使用しているMega等にも言えることですので、気を付けてください。

レトロPCコレクション 2021年5月

現在のレトロPCのコレクションです。気が付けば3年連続で書いているエントリーですが、ここ数か月で他に欲しい機種もなく、所有する機種も安定したので、今後はそんなに変化は無いと思います。
PC98ノートは一時修理で動かすことが楽しく数台ありましたが、実際にはそんなに使うことも無く、メンテも面倒になってきたのでOriginal Prusa mini+を買う際にPC-486note au以外は全て手放してしまいました。


X68000 Compact XVI

https://blog-e.uosoft.net/entry/20200318/1584463840 参照
2020年入手
やっと手に入れたX68000。
コンデンサ交換等の整備品を約10万円で購入
X68000は発売以来約30年ずっと憧れのPCをやっと入手しました。
各解像度を表示させるため、モニタ設定をいろいろ苦労しましたが、結局XPC-4を使用して安定しました。
結構金がかかってます。

PC-9821Xa16/R12

https://blog-e.uosoft.net/entry/20200124/1579804390 参照
2018年入手
PC98のメインマシン。
コンデンサ交換等の整備品を約2万円で購入
色々追加して結構フル装備になりました。
80286以前にしか対応していないゲームや速すぎて遊びにくいゲームはPC-286Cで遊ぶとして、それ以外のことはDOS環境では大抵できるようになってます。

PC-286C

http://blog-e.uosoft.net/entry/20190612/1560265878 参照
2019年入手
80286搭載で古いゲーム用。
動作品で約8000円。
MSXと同等の手軽さでPC98のゲームができることは自分のなかでポイントが高く、実は名機種だと思っています。
SC-98IIIPに50ピンの内蔵用コネクタを追加して変換番長でHDD(CF)内蔵にしましたが、用途が古いFDベースのゲームのため使用することが無くあまり意味がありませんでした。

PC-486note au

https://blog-e.uosoft.net/entry/20200421/1587449084 参照
2020年入手
動作品で約3万円。
FDドライブが2台でPC-9801-26互換FM音源搭載のノート。640x480のTFT液晶
PC-9821Nxから乗り換えたノート環境です。FDドライブが2台なので、遊べるゲームが増えました。
DOS環境保存用のノートでは最適な機種だと思います。

FS-A1ST

2014年頃入手
当時約4万円
元MSXユーザである以上、ずっと憧れていた機種であり、いつか手に入れたいと思った機種でした。
MSX現役当時はMSX2だったので、入手したときは最高の機種がやっと手に入った気持ちでした。
FS-A1GTはディスプレイケーブルが専用なので、普通のケーブルが使用できるFS-A1STを選択しました。
音声にノイズが乗る様になったのを機に電解コンデンサを全部交換しています。その他に2年ほど前にメモリ512KBに増設、ベルトレスFDドライブに換装をしました。
その後将来入手できなくなる可能性も考え、3年ほど前に予備機としてもう1台同等処置を施した整備品を初回より倍近い金額で入手しました。

HB-F1XV

https://blog-e.uosoft.net/entry/20120909/1347177543 参照
2012年頃入手
もう9年も前にS端子の改造についてブログに書いた機種です。
2012年はまだ今より高騰してなく、動作品が1万円以下で手に入りました。
その後、2年後にFS-A1STを入手して実家に置いてたのですが、実家の荷物を整理した際に持って帰りました。
FS-A1STが2台あるので特に必要性は無いですが、RGB出力が故障していたり、簡素なS端子追加や強引にベルトレスドライブ化したりして中は結構グチャグチャで売ることは躊躇し、コレクション兼予備機として置いておくことにしました。

Libretto 70

2005年頃入手
MS-DOSが手に入るうちにと思いPC-DOS2000を購入してMS-DOS専用環境にした機種。
昔所有してたLibretto SS1000が欲しかったが、結構高かったので、手ごろな値段で入手できた旧デザインのLibretto 70を選択したような記憶があります。

Vaio type W

2009年頃入手
当時流行したネットブック。他のネットブックが軒並み解像度が1024x600でしたが、その中で1366x768だったのでこれにしました。ネットブックの中では少々高価でしたが、それでも購入時5万円以下だったと思います。
これは現在も持ち続けてWindowsXP保存環境として使用しています。
Windows95時代のゲームは大抵WindowsXPでも動作するので、古いWindowsゲームでは重宝しています。


Raspberry Pi Pico で MicroPython

Raspberry Pi Picoを入手したので、MicroPythonで遊んでみました。
C/C++で開発してネイティブで動作させることもできるのですが、MicroPythonの方が手軽に遊べるのでRaspberry Pi PicoはMicroPythonで遊ぶことにします。

この手物のはインタプリタは遅くてコンパイルされたネイティブなバイナリコードを直接動作させるイメージがあるのですが、それは一般的に組み込み用のCPUがPCと比較して非力で動作が遅いというのが原因だと思います。
その点Raspberry Pi PicoはARMベースで動作クロックも133MHzもあるので、使用してみると思ったより快適で十分だと思います。まだそんなに高度なことはしていないので、ArduinoでC/C++で動作させるのと感覚的に同等で速度的にも気にならなさそうです。
PHPやJavaScriptからプログラミングを始めた人はわかりませんが、昔のPCでBASICから始めた人はコンパイル言語は憧れでどうしてもC/C++の速度に頼りがちになりますが、十分な速度で動作する場合はインタプリタの方が手軽で良いですね。
Raspberry Pi PicoでMicroPythonを動作させると、0.23W前後で動作しています。

開発環境はThonnyを使用します。
Thonny, Python IDE for beginners
個別にMicroPythonのファームウェアを書き込んでシリアル通信でソースを転送して実行という使い方もできると思いますが、Thonnyだとファームウェアの書き込みからソースの編集、実行まで簡単に出来るので便利です。

ソースファイルはRaspberry Pi Pico内のフラッシュROMに書き込まれます。ファイル単位なので、複数管理できます。
ファイル名を"main.py"とすると、電源投入時に実行されます。

Pythonシェルも使用できるので、リアルタイムにピンや接続したモジュールの値も確認出来て便利です。
例としてGP16にタクトスイッチを接続したとして、

sw1 = machine.Pin(16, machine.Pin.IN, machine.Pin.PULL_DOWN)
sw1.value()

で押下状態を確認できます。

参考にThonnyでMicroPythonを書き込むまでの手順です

Thonnyを起動してから、Raspberry Pi PicoのBOOTSELボタンを押しながらUSBを接続してください。
メニューの[ツール]-[Options...]を選択して開いたダイアログで[インタプリタ]タブを選択してください。
ここで"MicroPython (Raspberry Pi Pico)"を選択すると、MicroPythonのインストールダイアログが開いてインストールできます。

Raspberry Pi Pico

Raspberry Pi Pico

  • メディア: エレクトロニクス