電子趣味の部屋

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

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

Arduino UNO R4にDACがあるので何か音源を作ってみたいと思いました。
過去に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

Steam Deck OLED (512GB)に買い換えました。

Steam Deckを入手して以来気に入ってしまい毎日のように起動してます。
色々調べると次のモデルも1年以上先になりそうなので、Steam Deck OLED買い換えてしまいました。
たまたま再入荷のタイミングで販売サイトを見たらしく、数時間後に確認するともう売り切れてました。


旧機種のLCD版はSSDを64GBに戻し、手数料を考えても購入時よりも損なしで売却することができました。

早速LCD版で使用してた1TBのSSDをOLED版に換装し、OSをクリーンインストールして使用してます。

OLEDになってから画面はシャープで見やすくなりました。
画面サイズもLCD版が7インチでOLED版が7.4インチを少し大きくなりました。少し前なら気が付かない差でしたが、少し老眼が入った今ではこのサイズアップでも文字が読みやすくなりました。

APUは変更がないので、動作自体に変化はありませんが、バッテリーが強化されたことが大きなポイントだと思います。
LCD版はDiablo4では90分持つかどうかでしたが、OLED版は2時間遊んでもまだ30%以上残ってました。
体感的に2倍持つようになったと思います。

Steam DeckはSteamで遊ぶ人は補助的に持っておいた方が良いデバイスだと思います。
サブ機として少し遊ぶ程度ならば価格面からLCD版で十分です。

初めは本体サイズと重量から遊んでると疲れて長くてえも1時間程度しか起動してませんでしたが、慣れてくると長時間遊ぶことが増えバッテリーに不満を持つようになってしまいました。
OLED版はどちらかというと画面よりバッテリー動作時間目的でした。
動作時間を増やすのに高額の機種に変えるにはどうかなと迷ってましたが、結果として不満点も解消されて良かったと思います。

ハンドヘルドPCコレクション(ポケコン他)

最近色々と整理してた際に今後のガジェット系に資金にするためにポケコン関連はいくつか手放してしまいました。
現在はコレクションと言うほど多くはありませんが、保有しているハンドヘルドPCを紹介したいと思います。

uConsole Kit RPI-CM4 Lite

blog-e.uosoft.net
購入してから一番お気に入りの機種です。
OSがRaspberry Pi OSなので使用できるソフトも多いです。
画面サイズが小さいのでLinuxデスクトップとしては使い辛いし、普通にRaspberry Pi OSとして使うのはつまらないので、主にPICO-8やMSX,PC98,X68000のエミュレータを入れて全画面にしてコンソールベースでポケコン感覚で遊んでます。

Pocket386

blog-e.uosoft.net
386SXのCPUを搭載した2024年に発売されたPC-AT互換機です。
初期状態でWindows95(英語版)がインストールされてますが、PC-DOS2000を入れてDOSのみで使用してます。
CPUや音源以外は現在のパーツで作られているため、MS-DOS保存環境としては今まで使用してたLibrettoやHP Compaq nx9030よりも扱いやすいです。
また、FDDやCDROM等はそのままでは接続できませんが、ストレージがコンパクトフラッシュなので、ファイルのコピーはカードリーダーで直接Windows等からコピーできるため手軽です。

SHARP PC-G850VS

blog-e.uosoft.net
SHARP最後のポケコンです。
Z80搭載でアセンブラも使えます。
今までいくつかポケコンを使用してきましたが、ポケコンとしても最後の製品で比較的新しいため、液晶の劣化さえ気を付ければ長く遊べる機種だと思います。
今での使用してる人が多く、ネットでも自作ソフトや色々な情報が手に入りやすいです。

CASIO Z-1GR

x86系の80188でアセンブラも使える機種です。
液晶のコントラストが低くて見ずらいのが難点です。
Z-1GRは学校教材用ですが、一般販売用のFX-890Pは高コントラストの液晶が使われてるので、液晶は無事のFX-890Pのジャンク品を手に入れて交換したところ、見やすくなりました。

Roland SC-8820

実家に置いてあるものを整理してたらRolandのSC-8820を見つけました。
小型でUSBで手軽に接続できるので持って帰って遊んでます。
f:id:uosoft:20200820163243p:plain

購入前の時期(東方とかニコ動文化の全盛期だったかな?)にSC-88Proが中古でも価格が再上昇した時期にSC-88Proの代わりに購入したものです。
オークションでSC-88Proが3万円以上だった頃に2万円以下で買ったと思います。

SC-8850をグレードダウンさせたような機種ですが、SC-88Pro以前用のデータの再現性はSC-88508850よりも高いようです。
本来USBバスパワーで動作するのですが、所有している個体は毎回30分ほどで音が鳴らなくなるのでACアダプタで動作してました。
短時間ならバスパワーで動作するのでちょっと使いたいときだけ接続して使えるので、手軽だと思います。

パート数:32
最大同時発音数:64
音色数:1608
ドラムセット:63
音色マップ:4(SC-55/SC-88/SC-88Pro/SC-8820)

常時稼働の自宅サーバを CHATREEY AN2P AMD Ryzen 5 5625U に変更しました

常時稼働の自宅サーバにさらにARKのサーバも追加しました。
すでにmincraftのサーバを2種類(Java,Bedrock)やパルワールドのサーバが同時に稼働してるので、CPUのコア数がもっと欲しいと思い、Ryzen 5 5625Uを搭載したCHATREEY AN2Pにしました。

メモリとSSDはそのまま旧自宅サーバのものを使用するので、ベアボーンを購入しました。
Aliexpressで26,000円ほどで購入しました。
RAM16G+SSD512GBのモデルはAmazonでも購入可能です。


AMD Ryzen 5 5625Uは6コア12スレッドのCPUです。ZEN3アーキテクチャなのでZEN2のRyzen 3 5300Uと比較するとシングルコアでも30%ほど高速です。

今回はWIndows環境では試してませんが、Ubuntu22.04環境でアイドル時は10W前後でした。
Ryzen 3 5300Uの機種と比較すると2Wほど増えた感じです。
mincraftのサーバ、2種類(Java,Bedrock)、パルワールド、ARKのサーバを同時に起動してる場合はアイドルでは15W前後でした。
パルワールド、ARKのサーバは誰もログインしていない状態でも仲間にしたキャラクターの動作がシミュレートされるので、常時CPUが使われている状態でこの消費電力は優秀だと思います。
いくつか同時ログインした状態でも18W前後で動作してました。

Windows環境でGPUを使うゲームをすると消費電力も上がり発熱もありファンがうるさくなると思いますが、現状のサーバ用途での使用であればファンも非常に静かで夜間でも気にならないと思います。


ARK: Survival Evolvedの専用サーバ構築手順 (Ubuntu22.04)

uosoft:20240416164446j:w320]Ubuntu22.04の環境でのARK: Survival EvolvedのARKサーバーの構築方法です。
Survival Ascendedではなく、旧作のSurvival Evolvedの方ですので注意してください。

ちなみにサーバはSZBOX AMD Ryzen3 5300uで実行してます。

SteamCMDのインストール

sudo権限のあるユーザでログインして操作

sudo add-apt-repository multiverse; sudo dpkg --add-architecture i386; sudo apt update
sudo apt install steamcmd

Steamのユーザ作成

sudo useradd -m steam
sudo passwd steam

ARKサーバーのダウンロード

steamユーザでログインして操作

cd /home/steam
steamcmd +login anonymous +app_update 376030 validate +quit

ARKサーバーの実行

steamユーザでログインして操作

cd '/home/solabo/Steam/steamapps/common/ARK Survival Evolved Dedicated Server/ShooterGame/Binaries/Linux'
./ShooterGameServer LostIsland?listen?Session?QueryPort=27016 -ServerPlatform=PC+XSX+WINGDK+PS5 -culture=ja

Ctrl+Cで停止

起動用スクリプトを作成

cd
vi ARKStart.sh
chmod a+x ARKStart.sh

内容

#!/usr/bin/sh

cd '/home/steam/Steam/steamapps/common/ARK Survival Evolved Dedicated Server/ShooterGame/Binaries/Linux'
./ShooterGameServer LostIsland?listen?Session?QueryPort=27016 -ServerPlatform=PC+XSX+WINGDK+PS5 -culture=ja

デーモン登録・自動起動

sudo権限のあるユーザでログインして操作
pal.serviceファイル作成

sudo vi /etc/systemd/system/ark.service

内容

[Unit]
Description=launch ARK server
After=network-online.target

[Service]
User=steam
WorkingDirectory=/home/steam
ExecStart=/bin/bash ARKStart.sh
Restart=always
TimeoutStartSec=180

[Install]
WantedBy = multi-user.target

デーモン再起動

sudo systemctl daemon-reload

自動起動設定

sudo systemctl enable ark

バージョンアップ時の手順

サーバ停止(sudo権限のあるユーザで実行)

sudo systemctl stop ark

バージョンアップ(steamユーザで実行)

cd /home/steam
steamcmd +login anonymous +app_update 376030 validate +quit

サーバ起動(sudo権限のあるユーザで実行)

sudo systemctl start ark

ANBERNIC RG40XX H こちらもお気に入りになりました

前回のAmbernic RG CUBEに続き、今回はANBERNIC RG40XX Hを購入しました。

今回の購入のポイントはRG CUBEと同じく、アナログスティックの周りが光る仕組みです。
画面サイズも4インチと割と大きくアスペクト比が4:3なので、レトロゲームにとっては結構理想の画面だと思います。

RG40XX HはLinuxベースの独自OS、UIを使用しています。
Androidの機種と違い、起動も早くUIも快適でこれで遊べる機種のゲームの場合はこちらの方が遊びやすいです。

エミュレータの性能ですが、FC,SFC,MD,GB,GBA,WS,MSXに関しては特に問題は無く普通に遊べました。
PSPは3Dのレースやアクションは所有してないので試してませんが、ティルナノーグV等のRPGでは基本的に快適に動作するものの、たまにプチフリーズみたいな感じで引っ掛かる部分がありました。性能が若干足りない感じがします。そもそもPSPの横長のHDサイズでは表示も小さくなりあまり実用的ではないと思います。

AndroidゲームやPS2は動作しないので、RG CUBEで遊びますが、画面のアスペクト比やUIの快適さからレトロゲームはこちらで遊ぶことが多くなりそうです。