Giant-FFTによるサンプリング周波数変換

Gemini Advancedが既知の論文を見つけてくれた。著者はあのValimakiさん。自分で書く必要がなくなったので,信号保護に戻ります。V. Valimaki and S. Bilbao,“Giant FFTs for Sample-Rate Conversion”J. Audio Eng. Soc., vol. 71, no. 3, pp. 88–99, (2023 …

Pythonで音の入出力 (soundcardとsounddeviceの比較)

身の回りにPythonを使う人が増えてきており、自分も最低限はできておかないとということで再入門です。音周りのエコシステムがどう変わったのかも調べたいです。 soundcardを使う まずは音の簡単な録音・再生から。10年前には見かけなかったのと、簡単そうな…

ギター入力付き&マイク内蔵のコンパクトなオーディオインターフェースが欲しい

以前、Line 6 Sonic Port VXを褒めちぎる記事を書いた。下はそこからの引用。 入力側は、スイッチでモノラルに切り替えもできるステレオマイクが内蔵されていて、ギターやベースが接続できるHi-Z入力もある。出力側はヘッドフォン端子と標準フォンL/R出力が…

音を再生しながら録音する(フルデュプレックス版)

昨年末にcl-portaudioを使ってCommon Lispで音の入出力をする記事を書きました。 marui.hatenablog.com この記事ではwith-default-audio-streamを使っていたため、デフォルトで指定されているオーディオデバイスが使われていました。どのデバイスがデフォル…

Line 6 Sonic Port VXのドライバーのアンインストール(と再インストール)

Windows 10にダウングレードしても、やっぱりオーディオ周りで不具合が生じたので、そのメモ。 marui.hatenablog.com 2021年12月に販売終了した製品なのだが、Line 6のSonic Port VXという製品をとても便利に使っている。入力側は、スイッチでモノラルに切り…

音のタイムストレッチ (Julia Advent Calendar 2024)

Julia Advent Calendar 2024の24日目の記事です。毎年Juliaで音に関係したことを書いていて、これまでにこのブログで書いたアドカレ記事は以下の通りです。 楽器音の分析とスペクトログラム (Julia Advent Calendar 2018) - 丸井綜研 パワースペクトル計算の…

音を再生しながら録音する (Lisp Advent Calendar 2024)

はじめに Lisp Advent Calendar 2024の1日目です。昨年同様、初日が空いていたので書いてみました。 さて、今年のはじめごろまでCommon Lispで音を扱うことをいくつか試していたのですが、2月ごろからポール・グレアム『On Lisp』の勉強会に参加して充実した…

ギターのオクターブチューニング

一般的なギターでは、開放弦の撥弦音と12フレットを押さえたときの撥弦音はちょうど1オクターブ違う音になります。ここで、もし1オクターブからずれているときには、「オクターブチューニング」という作業が必要になります。ほとんどのエレキギターのブリッ…

騒音曝露レベルと許容曝露時間の関係

Apple Watchをつけていると、ときどき「90 dBを超えています」というような警告が表示されることがあります。これはWHO(世界保健機関)が以下で推奨している騒音(そうおん)曝露(ばくろ)レベルを超えそうになるときに警告してくれる機能で、音に関係する仕事…

信号の包絡線を計算する (Common Lisp)

信号の包絡線 (signal envelope) は「信号の頂点にシーツをかぶせたときのような概形」を持つ波形です。 MatlabやRで書いた信号包絡線の計算プログラムをCommon Lispに移植しました。信号包絡線の計算方法は振幅の絶対値に対して、(1)低域フィルタをかける、…

ピンクノイズを生成するLISP関数

以前PythonやJSFX用のものも作ったのですが、ピンクノイズはいろいろなところで活躍するので、Common Lisp用にも作っておきます。 ピンクノイズを作るPython関数 - 丸井綜研 REAPERのJSFXでピンクノイズを生成してみた - 丸井綜研 Voss-McCartney法 DSP gene…

上方倍音列と下方倍音列

とある音楽理論の一派では、自然倍音列にヒントを得て作曲に活かしたりするそうです。そんな倍音列の周波数と音名との対応を見られるJuliaプログラムを書いてみました。そもそも「倍音ってなに?」については以下の記事を参照してください。 marui.hatenablo…

cl-portaudioを使った音の入出力

前回の記事でCommon Lisp上でPortAudioが使えるようになりました。 marui.hatenablog.com 今回は音の入出力をやってみます。基本的にはcl-portaudioのドキュメントに載っている「入力と出力を15秒間だけつなげる」というデモプログラムを実行するだけです。…

LispからPortAudioでデバイス情報を得る

Common Lispからcl-portaudioを使ってPortAudioを呼び出して音を再生したいのですが、まずはデバイス情報を得るところまでやりました。 cl-portaudioを利用するには例によってQuicklispを使うと便利みたいです。 (ql:quickload :cl-portaudio) とはいえ、bod…

ステレオチェック信号を作った

ごくたまにオーディオシステムの準備をすることがありますが、パワーアンプからスピーカへの結線は赤黒ケーブルが逆になってしまったり、左右スピーカへの接続を逆にしてしまったりということがあります。そこで、ステレオスピーカへの結線がうまくいってい…

スペクトログラム

Common Lispで振幅スペクトルの計算ができるようになり、Hann窓もかけられるようになったので、次はスペクトログラムの実装にいきたいと思います。 スペクトログラムは、振幅あるいはパワーの強さを時間と周波数ごとに計算したものです。以下の画像ではAudac…

macOSのコマンドラインから音ファイル変換

macOSにはafで始まる名前の、オーディオファイルを操作するコマンドラインアプリが入っています(afclip、afconvert、afhash、afida、afinfo、afplayの6つ)。僕がよく使うのはafinfoとafconvertです。 afinfoは以下のようにオーディオファイルの情報を表示…

フィルタの可視化(freqz相当の関数を作る)

信号にフィルタをかけられるようになり、そして、レシピ通りのフィルタを作れるようになりました。 IIRフィルタをかける関数(Lisp Advent Calendar 2022) - 丸井綜研 双二次フィルタの係数(Lisp Advent Calendar 2022) - 丸井綜研 次に、フィルタの周波…

双二次フィルタの係数(Lisp Advent Calendar 2022)

この記事はLisp Advent Calendar 2022の25日目です。Lispで音プログラミングに向けた、さらなる一歩。 目次 はじめに RBJ Cookbookによる低域フィルタ フィルタを使ってみる 他の形状のフィルタ はじめに 先日フィルタをかける関数を作りました(IIRフィルタ…

IIRフィルタをかける関数(Lisp Advent Calendar 2022)

この記事はLisp Advent Calendar 2022の16日目です。Lispで音を自由自在に扱うという野望に向けての次の一歩。 デジタルフィルタ ちょっと前に高速フーリエ変換を用いて畳み込み演算の実装をしました。2信号の時間領域での畳み込み演算は周波数領域での要素…

音ファイルを書き出すwavwrite関数(Lisp Advent Calendar 2022)

この記事はLisp Advent Calendar 2022の11日目です。Lispには入門と挫折を繰り返していましたが、今年4月にLispに再入門し、なんとか日常的なイロイロに使えるようにしているところです。 普段使いするためには自分の専門分野のプログラムを作るのがよいだろ…

Common Lisp用のwavread

(追記:関連記事として「音ファイルを書き出すwavwrite関数(Lisp Advent Calendar 2022) - 丸井綜研」を書きました) 9月に「Common Lispで音ファイルを読み込む - 丸井綜研」というエントリでcl-wavとbodge-sndfileを試用しました。Apple Siliconではbod…

TSP信号の生成 (Julia)

先週、Common Lisp版のOATSP信号を作りました。 marui.hatenablog.com Julia版もあると便利かと思ってサクッと実装してみました(OATSPの説明などは上記のページを見てください)。一つの関数で測定信号と逆信号を作れると便利なので、まとめてしまっていま…

TSP信号の生成

インパルス応答 OATSPの数式 Common Lispで試す 時間領域にもっていく 関数にした インパルス応答 頭部伝達関数を測定したり、スピーカーの応答を測ったり、室内音響指標の計算に使ったり……インパルス応答が測定できると色々と便利です。すでにMatlab、R、Ju…

Common Lispで音の振幅スペクトルの計算

先月末「Common LispでFFTライブラリを使ってみる - 丸井綜研」を書きました。このエントリの最後に「関数化した上でWAVファイルを読み込んで分析してみたい」と書いていたので、今日はそれをやってみました。 WAVファイルを読み込むのには「Common Lispで音…

Common Lispで音ファイルを読み込む

(2022-12-04追記:cl-wavを便利に使える関数を作りました→Common Lisp用のwavread - 丸井綜研) Lispで音をやろうと思ってもなかなか情報が出てこないのですが、OpenMusicのような大規模なシステムもCommon Lispで書かれているので無理なことはないはず。Go…

1/3オクターブ周波数のリストを得る

目次 標準数とは Common Lispでの実装 実行例 似たようなことをJuliaでやってみると…… 標準数とは 1/3オクターヴ幅での周波数リストが欲しい時があります。20, 31.5, 40, 50, 63, 80, 100, 125, 160, 200, 250, 315 Hz... というやつです。実はこのリスト、…

周波数から音名を得る

Common Lispの勉強をしていて、簡単なプログラムを再実装しています。数年前にJuliaで書いた「周波数を与えると音名・セント値が返ってくる関数」をLispに移植してみました。Julia版は以下の記事に書いてあります。 marui.hatenablog.com やっていることはJu…

Juliaで基音周波数の推定(YINの解説)(Julia Advent Calendar 2021)

これはJulia Advent Calendar 2021の25日目の記事です。これまでにこのブログで書いたJulia Advent Calendar記事は以下の通りです。 楽器音の分析とスペクトログラム (Julia Advent Calendar 2018) - 丸井綜研 パワースペクトル計算の2つの方法 (Julia Adven…

楽器の音域

さまざまな楽器の音域がピアノの鍵盤のどの辺りに位置するのか、周波数やMIDIノート番号はどうなっているのか、といったことを調べたことがありました。その時に作った図が出てきたので、こちらに掲載して供養します。 同じ楽器であっても個体によって出せる…