投稿

Audacity built-in effectsを作ってみる

イメージ
Windows版Audacityを使っていたときは、built-in effects の開発はマイクロソフトのVC++をコンパイル時に使うこと意味していたので、手を出す気にもなれなかった。でも最近になってUbuntu系に移行したので、ようやくチャレンジしてみようと思いはじめる。 Linux版Audacityで利用できるエフェクト開発としてはNyquistやLadspaなどがあるが、パラメータの自由度や設定ファイルの保存など問題があり、どうも好きになれない。そこでAudacityに組み込んでしまうbuilt-in effectsの出番というわけ。標準のエフェクトを見る限り、設定ファイルも保存できるし、かなりの自由度があるように思える。 作るにあたって、わかりやすいドキュメントが見当たらなかったので、既存エフェクトのソースを参考に作ってみる。いろいろ謎の定義があり、それらを理解するにはかなりの量のソースを読まないとダメそうだが、とりあえず理解した範囲でも簡単なエフェクトは実現できた。ビルドすれば下のようにちゃんと表示され利用できるようになった。 下は独自のfade-in/outを適用したもの。標準のfade-in/outが直線で減衰するので自然な減衰にしてみた。内部的にはHanning窓関数を利用している。AudacityにはNyquistのAdjustable Fadeもあって、これと似たようなカーブを描けるのだが、ダイアログが出てくるので操作が面倒。個人的に使用頻度が高いfade-in/outは、ささっと適用したいので作ってみたというわけ。式はこんな感じ。ぶっちゃけcosカーブの半周期分。 buffer[i]*(0.5+0.5*cos(i*M_PI/len)); エフェクトを作るために新たに必要なファイルは2つ。例えばこんなかんじ。 NamagiFade.h NamagiFade.cpp エフェクトはEffectやEffectSimpleMonoなどを継承して作るようだ。ヘッダファイルにクラスを宣言して、ソースファイルにあらかじめあるメソッドに対して、overrideで具体的な処理を書いていくという流れ。音声信号はfloatでやり取りされている。ソースはC++。 コンパイルするためには audacity-sr

Audacity 標準エフェクトの一部を除外してみる

イメージ
標準では表示されるエフェクトが多くて小さな画面では見にくい。そこで使わないエフェクトを除外してみた。以下はGNU/Linux Lubuntuでのソースファイルからインストールする作業となる。 audacity-src-2.0.4/src/LoadEddects.cpp このファイルをいじることで実現する。使わないエフェクトをコメントアウトするだけ。一つのエフェクトに対して2ヶ所修正が必要になる。 その後 audacity-src-2.0.4/ ディレクトリ内でコンパイル、ビルド、インストールを行う。 $ ./configure --with-ffmpeg --with-lame $ make $ sudo make install Audacityを起動してeffectメニューで削除されているかを確認。 Audacity 関係の記事

Ubuntu で python

Ubuntu/Lubuntuを起動してTask Managerを見ると常にpythonが起動していて、18MBぐらいのメモリを食っている。Ubuntuではpythonは欠かせないものらしい。常時起動しているならば、実行環境は整っているわけだし、インタプリタなので、テキストを書けばそれで実行できてしまう。そんなお手軽なpythonを使うのも手だなぁと思い始める。実際pythonで何ができるのかよく分からないのだが、習得が楽なインタプリタ言語ということなので、少しいじってみることにした。 ネットで少し調べてみると、python言語はインデントを使って制御するので、だれが書いても記述が同じようになり、読みやすいというメリットがあるようだ。今までインデントがソースに影響するような言語をやったことがないので、少し興味が出てきた。 まずはHello Worldから ターミナルから直接プログラミングすることもできるのだが、他の言語と同じようにテキストファイルに書くことにした。 hello.pyという名前のテキストファイルを作成して、下の内容を書き込む。 print 'Hello World' ターミナルから実行してみると、Hello Worldが表示される。 $ python hello.py Hello World なんとも手続きの少ないプログラムだろうか。Cなどと比べると、何が起きているのかが掴みづらく思えてしまう。 次は日本語表示 日本語を扱うには下のようにコメントアウトの部分にutf-8を宣言する必要がある。そして日本語出力する前にuを書く。1行目には#!/usr/bin/env python を書いてみた。pythonで実行しますよという意味らしい。すべてコメントアウトされていているので、ちゃんと読まれているのだろうか? utfを宣言しないと日本語ではエラーが出るので読んでいるに違いない。やや謎の仕様だ。ちなみに1行目に「#コメント」など日本語を打つとエラーが起きる。3行目以降なら特に問題なし。pythonのコメントは何かいろいろ約束事がありそうだ。 #!/usr/bin/env python # coding: utf-8 # コメント print u'こんにちは パイソン'

C言語 OpenAL をUbuntuで使う

汎用音声ライブラリである OpanAL をLubuntu/Ubuntuにインストール。 Synapticから libopanal-dev を選択してインストール。 同時に以下もインストールされる。 libopenal1 libopenal-data 全部で519kBと小さめ さらにこれもインストール sudo apt-get install libalut0 libalut-dev 以上で開発環境は整う。Windowsよりも手軽。 コンパイルはWindowsとは少し違う。 gcc test.c -lalut -s -o test 以前windows環境で作ったソースもそのまま利用可能だった。 sound programming 目次

Lubuntu に Vim7.4 をソースからインストール

イメージ
コピペの問題 -clipboard vi(ヴィーアイ)は昔からあるテキストエディタで、大抵どのunix,linuxにもはじめからインストールされている。現在はviから派生したvim(ヴィム)を使うことが多いと思う。Lubuntuに標準で入っているviはvim-tinyというもので最小限の構成。これでは不自由なのでバージョンアップしてvim7.3.429にした。ただ困ったことにvimからテキストをコピーしてクリップボード経由で他のアプリケーションにペーストができない。 $ vim --version |grep clipboardというコマンドで調べると-clipboard となっていて、これが原因らしい。+clipboard になれば癖はあるもののコピペができるようだ。これを解決するにはソースからビルドしてインストールするしかないようだ。ちなみに他のアプリからコピーしたテキストをvimにペーストする場合はINSERTモードで Ctrl+Shift+v もしくは Shift+Insert でできる。 vim 7.4インストール作業 インストール手順は以下を参考にした。 http://vim-jp.org/docs/build_linux.html まずビルドするために必要なパッケージ等をインストールしておく必要がある。以下のコマンドはすべてのパッケージなので無駄が多そう。本当は必要なものだけチョイスしてインストールすればよいのだが、あれこれ試行錯誤する手間が惜しいのでこのまま実行。インストールには約10分かかった。 $ sudo apt-get build-dep vim vimのソースをダウンロード。保存先はカレントディレクトリ/vim。約5分間。 $ hg clone https://vim.googlecode.com/hg/ vim ここからの作業は~/vim/src内で行う。srcはSource codeの略。まずインストールする内容をオプションで設定する。下記がCUI版vimのインストールで+clipboardにするための設定。(実際は改行しない)約3分 $ ./configure --with-x --with-gnome --enable-xim --with-features=big -

LubuntuにAudacity2.0.4をインストール

イメージ
LubuntuのSynapticからのインストールだとAudacityのバージョンは2.0.0と古いため、最新のAudacityのソースをダウンロードしてきて、ビルド、インストールしてみた。 古いAudacityがあればアンインストールする 共存もできるようだが、オプションをうまく設定しないとメニューで重なったりするので、必要がなければアンインストールした方が何かと混乱しない。 ビルドに必要な環境を整える 不足している以下のようなパッケージをSynapticなどからダウンロードする。ユーザの環境が様々なので何が不足するかはreadmeをよく読んだり、インストールしてみて、そのlogで判断したりする。 libwxgtk2.8 (サイズは31MB程度) CMake (libsoxrのビルドに必要) libwxgtk2.8はSynapticからダウンロードした。CMakeは以下のようにターミナルからインストールした。 sudo apt-get install cmake Audacityに必要なライブラリ等をインストールする。 sudo apt-get build-dep audacity Audacityのソースをダウンロード 公式ページからソースファイルをダウンロード http://audacity.sourceforge.net/download/source ダウンロードされたファイルは圧縮されているので、これを解凍する。 audacity-minsrc-2.0.4.tar.xz 解凍すると下の名前のディレクトリが同じ階層にできる。 audacity-src-2.0.4 (DLサイズは5.3MB) Audacityのインストール作業 解凍されたaudacity-src-2.0.4ディレクトリ内で以下を実行してmakeファイルを作る。オプションでMP3やAACのライブラリも付け加えている。 ./configure --with-ffmpeg --with-lame 以下の作業はかなり時間がかかる。古いマシンで30分ぐらいかかった。 make 最後にインストールする。これは10秒程度で完了する。 sudo make insta

sonydbでUbuntuからWALKMAN NW-E044に転送

イメージ
Windowsの使用頻度を減らすためにUbuntuからWALKMAN NW-E044に転送することにした。iPodや一部のWALKMANではUbuntuの標準的な音楽プレーヤで転送可能なようだがNW-E044は無理だった。ネットを探すとやや古いがsonydbというものがあり、これで転送ができるようだ。 インストール環境を整える ソースをダウンロードしてきて、自分でコンパイルする必要があるため、コンパイルに必要な以下のツールが必要。 gcc id3lib autotools 自分の環境ではid3libが入っていなかったので、Synaptic Package Managerからインストール。 sonydbのソースをダウンロードしコンパイル 公式ページ http://mattn.kaoriya.net/software/linux/20071121165107.htm ダウンロードサイト https://github.com/mattn/sonydb sonydb-master.zipをダウンロード これを解凍する。次のコマンドでコンパイル、インストールする。 $ make -f Makefile.gcc 同じディレクトリにsonydbというexecutabeleファイルができる。478KBと小さくNW-E044に入れておいてもいいかもしれない。これをターミナルから起動すれば転送できるようになる。sonydbには下記のようなコマンドがある。とてもシンプルだ。 注意点としては、ハブ経由だとうまく転送できない場合がある。 NW-E044の中身をリスト表示するコマンド。 $ ./sonydb songs 1曲を転送するときのコマンド。 $ ./sonydb songsadd /home/usr/Music/sample.mp3 フォルダ内のすべてのmp3を一度に転送するときはワイルドカードが使える。 $ ./sonydb songsadd /home/usr/Music/*.mp3 NW-E044内の曲を削除するコマンド。下はトラック24を指定。 $ ./sonydb songsdel 24 NW-E044内の複数曲を一度に削除する

半壊した古いノートPCにLubuntu12.04を入れる

イメージ
はじめに インストールするノートPCは、液晶のバックライトが切れ、ハードディスクも壊れている。そこでハードディスクは余っていたものと交換。液晶は直す気はないので、外部モニターに接続することにした。 CPUはPentium-MでPAE(物理アドレス拡張)がなく、最新のubuntuなどのlinuxは入れることが出来ない。調べてみるとubuntu派生の軽量ディストリビューションであるLubuntu12.04がnon PAEに対応していることが分かったので、これをインストール。ちなみにオリジナルubuntu12.04は要PAEだった。どうもカーネルが違うらしい。 8ヶ月ぐらい使ってみて 140508 良い点は、古くて遅いマシンでも快適に動くこと! これに尽きる。windowsXPでは作業するたびに無駄にカリカリとアクセスで待たされていたが、Lubuntuではキビキビと動くので、数倍速いPCと同じぐらいの快適さ。これが本来のマシンの速度なのだろう。そういう意味ではwindowsはマシンの足を引っ張るOSということが判明した。使っていると、ほとんどの作業は問題ないが、ネット上の一部のマイクロソフトに依存するコンテンツは当然のように見れない。そんなコンテンツは大抵くだらなので大きな問題はない。また、より快適にしようと手を加えはじめると、情報不足で試行錯誤になることが多く、結構時間がかかってしまうのが難点かな? XPのサポートが切れた2014年4月以降、このページのアクセスが増え続けているので、Lubuntu, Ubuntuへの世間の関心が高まっている様子。個人的には多くの人に使ってもらいたいとは思っていないし、このOSを使いこなせるのは一部のPC好きぐらいだと思う。PCそのものに関心がない人は手を出さないほうがよいと思う。 Lubuntu http://www.lubuntu.net/ LXDE (Lightweight X11 Desktop Environment) を使用していて軽量なデスクトップ。要求されるマシンスペックも低く、RAM 256MB以上、CPU 500MHz以上、HDDも5GBもあればよさそうだ。今回入れるLubuntu12.04のカーネルはLinux 3.2.0-53-generic (i686) この12.

JavaScriptの学習をスタートしてみる

仕事でホームページ関係も少しいじるので、JavaScriptを改めて学習してみようと思う。ここではベーシックな部分を中心に書いてみたい。 JavaScriptは主にウェブブラウザ上で実行するインタプリタ言語で、HTMLと連携しながら利用することが多い。登場した当時はブラウザ上での装飾程度の利用だったが、どんどん拡張され、GoogleMap以降は本格的に使われるようになった。HTML5からはFlashも消えはじめ、ウェブサイト構築に必須のプログラム言語になったように思う。 そもそも名前が当初流行っていたJavaとお手軽命令という感じのScriptの組み合わせ。なんとも気合もポリシーもない言語。そんな言語がいつの間にか、脚光を浴びるようになってしまった。 開発環境はテキストエディタとブラウザがあればOK。最近のブラウザであればコンソールも表示できるので何かと便利。またスクリプト言語なのでコンパイルの必要もなく本当にお手軽。 HTMLに記述する方法で学習 JavaScriptを記述できる箇所は以下のように複数あるが、ここではHTML内に記述する範囲で書いていくつもり。 外部ファイル .jsが拡張子 複数のHTMLファイルで利用する場合 HTML &lthead&gt 内 ボディよりも先に読込まれる HTML &ltbody&gt 内 表示するような内容であればここに記述 HTML タグ内 ちょっとしたことならここに記述可能 ここで使うhtmlファイルは以下を雛形とする。文字コードはUTF-8で保存する。 また &ltbody&gt にはJavaScriptと連携するフォームやボタン、canvasなども配置する。 空htmlファイルのソース &lt!DOCTYPE html&gt &lthtml lang="ja"&gt &lthead&gt &ltmeta charset="UTF-8"&gt &lttitle&gt空html&lt/title&gt &lt!--ここにJavaScriptを記述--&gt &lt/h

中学理科で学習する「音」について

イメージ
今の中学の理科教科書を見ると、1年のときに音について少し学習するようだ。主な内容は以下の通り。 音の伝わり方 音を伝える物体 音の伝わる速さ 音の大小と高低(振動数と振幅) 超音波の紹介 これぐらいだろうか。中身は用語を覚えるぐらいしかない。以下は中学の内容に若干追加してみた。 音の伝わり方 音は物体が振動することで発生する。その物体を音源といい、気体、液体、固体などを波として伝っていく。空気を伝った波は、耳まで届き、鼓膜を振動させる。鼓膜の振動は耳小骨(ツチ骨、キヌタ骨、アブミ骨)へ伝わり、振動が増幅され、蝸牛(かぎゅう)へ伝わる。蝸牛の中はリンパ液で満たされていて、振動は液体の振動へと変わり、その中の聴毛が揺れ電気信号に変換され、脳に送られ、音として認識される。 音を伝える物体 気体、液体、固体などが音の振動を伝えている。固体は縦波と横波の両方が伝わっていく。地震のP波は縦波で、S波は横波。気体と液体は縦波(疎密波)のみが伝わる。また物質がない真空中では音は伝わらない。縦波(疎密波)は空気に疎の部分と密の部分ができる波のこと。 音の伝わる速さ 音は空気中では約340m/s(15度のとき)の速さで伝わる。空気中の温度で音速は変化する。気温が下がると音速は遅くなり、気温が上がると音速は速くなるが、一般的には340m/sで計算する。液体や固体では空気中よりも音速は速くなり、たとえば水は1500m/sで、鉄は6000m/sとなる。 音の大小と高低(振動数と振幅) 音をマイクで録音し、電圧に変換すると横波の波形として視覚的に音を確認することができる。縦波のままでは扱いにくいため、多くの場合は横波に変換して扱う。図は音叉を録音したもので、440Hzのきれいなサイン波となっている。音の高さは振動数に表れ、音の大きさは振幅に表れている。 下図は赤が縦波で緑が横波。縦波の1本に注目すると揺れているだけだと分かる。実際、空気中の粒子(窒素、酸素など)は縦波のように揺れて音を伝えている。 振動数 1秒間に振動する回数を振動数といい、単位はヘルツ(Hz)で表す。 1秒間に10回であれば、10Hzとなり、100回であれば、100Hzという具合。振動数が多くなるほど高い音となり、逆に振動数が少なければ低

近接効果 ( Proximity effect (audio))

イメージ
ダイナミックマイクのSHURE SM57、SM58の近接効果について整理してみた。 指向性があるマイクは、音源とマイクの距離が近いと低音の音量が上がってバランスが崩れてしまう。その仕組みについて簡単に触れてみたい。低音が盛り上がってしまう近接効果は指向性を実現する上での副産物であり、本来は不要なものであったと思う。しかし、それを積極的に使って音を作るという流れになっているように思う。 指向性マイクの原理 指向性マイクは正面以外の音をなるべくカットするために作られたもので、原理はダイアフラム正面からの音以外に、裏面からも少し遅れた音を入れることにより実現している。下図の矢印の太さは音圧の大きさをイメージ。 SHUREによると、ダイアフラムの表面と裏面との距離差は約8.5mmらしい。音波がダイアフラムの両面に同時に同音圧で届けば、逆位相となり、その音は打ち消される。重要なのは音源の方向と音圧差ということになる。マイクの正面から入る音は、回折によって裏面にも回り込むが、音源とダイアフラムの距離によって、音圧差が違ってくる。距離が近ければ音圧差が大きく、遠ければ小さくなる。下の図は点音源の位置で音圧差(音の密度の差)が出ることをイメージにしてみた。また音圧レベルは距離が倍になるごとに6dB低下する。 Audacityでシミュレーション 正面から入った音はどうなるか まずは、0~22050Hzのチャープ信号を作成する。チャープ信号は低い音から高い音へ徐々に変化する信号。 この波形全体の周波数特性は下記のようにフラットである。これがマイク正面から入った音とする。 次にダイアフラム裏面には、やや遅れて、音圧が下がった音が入る。ダイアフラム裏面から入る音は、信号的には逆位相になっている点に注目。そして8.5mmの距離差は時間遅れとして計算すると、音速を340m/sとした場合、0.025msecとなる。サンプリング周波数44100Hzの場合は、約1sample程度。ということで、1sample遅らせてダイアフラム表面に入った波形と合成してみる。以下は音圧差の違いでどうなるかをシミュレーションしたもの。つまりマイク正面からの音を扱った場合を意味する。 ダイアフラム両面に同音圧が入った場合 これは音源