丸井綜研

バイクとコンピュータで遊んでいるよ

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

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

スペクトログラム

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

9月に「Common Lispで音ファイルを読み込む - 丸井綜研」というエントリでcl-wavとbodge-sndfileを試用しました。Apple Siliconではbodge-sndfileは使えないということで、cl-wavを使っています。ただ、チャンク形式のままのデータが戻ってくるので、もう少…

TSP信号の生成(Julia)

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

TSP信号の生成(Common Lisp)

インパルス応答 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)

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ノート番号はどうなっているのか、といったことを調べたことがありました。その時に作った図が出てきたので、こちらに掲載して供養します。 同じ楽器であっても個体によって出せる…

フィルターバンク (Julia Advent Calendar 2020)

このエントリはJulia Advent Calendar 2020の25日目のものです。Juliaを音に関する研究によく使っているので、その中から一つ紹介したいと思います。 音の加工をするときにフィルタというものを使うことがあります。フィルタは、特定の周波数の音を除去した…

周波数から音名を得る (Julia Advent Calendar 2020)

このエントリはJulia Advent Calendar 2020の24日目のものです。Juliaを音に関する作業によく使っているので、その中から一つ紹介したいと思います。 音の高さをあらわす方法にはいくつかあります。周波数を使うと「1秒あたりの周期の数」として物理的にも明…

パワースペクトル計算の2つの方法 (Julia Advent Calendar 2019)

はじめに これはJulia Advent Calendar 2019の20日目の記事です。「音について何か書きます」と宣言したので、普段Juliaを使って音についてどんなことをしているかを紹介します。今年はパワースペクトルの計算を、(1)信号全体をフーリエ変換する方法と、(2)…

線形予測符号(LPC)でスペクトル包絡を計算する

Juliaを使った音の処理については、これまでにいくつかのエントリを書きましたが、今日は線形予測符号(LPC; Linear Predictive Coding)を用いてスペクトル包絡を求めてみます。ここでは線形予測符号の説明は省きますが、音声信号処理の分野では昔からよく…

楽器音の分析とスペクトログラム (Julia Advent Calendar 2018)

この記事はJulia Advent Calendar 2018の24日目です。 僕は日頃、おもにオーディオ信号を扱うのにJuliaを使用しています。今日はそのうち楽器音の分析のために作成したプログラムを紹介します。 楽器音の分析 楽器の音を聞いたとき、トランペットとピアノと…

Julia 1.0でオーディオ入出力(とインパルス応答測定)

Juliaが1.0になって、徐々に環境が整ってきました。ここ数日、LibSndFile.jlやPortAudio.jlを使ってゴニョゴニョやっていたことをまとめておきます。 TLDR。入出力の同期とか考えずに最低限の音再生ができればいいという場合は、 using FileIO: load, save i…

PinkTSP信号をJuliaで作る

Julia言語でPinkTSP信号を作るプログラムを書いた。とは言っても、以前書いたMatlabのものをそのまま移植しただけ。そもそも参考にしたのは以下の文献。 藤本卓也. “低域バンドでのSN比改善を目的としたTSP信号に関する検討.” 日本音響学会研究発表会講演論…

DSP.jlに対応した低域フィルタ

引き続きJuliaネタです。前回は、Bristow-JohnsonのパラメトリックEQを自作のfreqz関数で可視化してみました。 marui.hatenablog.com ただ、プログラミング言語を使う際には長いものには巻かれておいたほうが良いので、Juliaのエコシステムで言及されているJ…

パラメトリックEQ

先日Juliaでフィルタの可視化をしたけれど、あの時点ではまだフィルタの設計はMatlabに頼っていた。今回はRobert Bristow-Johnson氏の名作をもとに、パラメトリックEQを作る。ただし、今日ここに紹介するのはピークフィルタのみ。

MatlabのfreqzもどきをJuliaで

MatlabやOctaveにはfreqzという関数があり、FIR/IIRフィルタの周波数特性・位相特性を計算しグラフ表示してくれます。PythonでもSciPy.signalに同名の関数があります。似たことをJuliaでやってみました。 今回は双二次フィルタを見てみましょう。標本化周波…

振幅スペクトルのリアルタイム可視化

とある場所で振幅スペクトルのリアルタイム可視化をデモすることになったので、久しぶりにProcessingのプログラムを書きました。Minimに入っていた例をほぼそのまま使っています。(左右方向は20 Hz〜ナイキストを対数軸で、上下方向は-60〜0 dBを表示してい…

MacBook Pro (15in, 2017)の3 chマイク

MacBook Pro (15in, 2017)ですが、「Audio MIDI設定」の画面でマイク設定を確認してみると4 ch入力ができるかのように書いてあります。 最高で96 kHz / 24 bit / 4 chまでいけるとなれば、マイクロホンとヘッドアンプの性能によっては本体だけでもかなり面白…

音ファイルの読み込みと単純な可視化

ここ数年の僕はプログラミングというと音と統計ばかりやっているのですが、特に音の分析や加工に関してよく使うものはMatlab、Python、Rで実装したので、次はCommon LispかJuliaで実装してみようかと思います。最終的にはCommon Lispでなんでもやるのが夢な…

ピンクノイズを作るPython関数

Voss法でピンクノイズを作るプログラムをMatlabからPythonに移植しました。ベクトルではなくループで書いているところなんて、Python的・numpy的にも汚い書き方だと思うので、適当に修正して使って下さい。ピンクノイズについては「DSP Generation of Pink N…