投稿

ubuntu nkfで文字コード一括変換
Shift-JISからUTF-8へ

Windowsは文字コードがShift-JISなので、そのファイルをUbuntu(Lubuntu)で扱うにはUTF-8に変換する必要がある。エディタで1ファイルごとに変換することもできるが、大量にあると面倒ないので、コマンドで一括変換させてみる。 nkfをインストール Lubuntuには標準でiconvというコマンドが用意されていて、これで文字コード変換できるのだが、上書きが簡単にできなかったりと、何かと不自由なので、nkfという文字コード変換ソフトをターミナルから以下のコマンドを打ってインストール。 sudo apt-get install nkf これでnkfが使えるようになる。 nkf単体で変換 主なオプションは以下。 -e : EUCに変換 -w : UTF-8に変換 -s : Shift-JISに変換 -Lu : 改行コードLF(UNIX)に変換 -Lw : 改行コードCR+LF(Windows)に変換 -Lm : 改行コードCR(Macintosh)に変換 --overwrite: 上書き -g : 文字コードを出力 ファイルを調べるときに使う 以下のコマンドは、カレントディレクトリで、ファイル名に.txtがあるファイルを一括してEUC変換。上書きするように指定している。 nkf -w -Lu --overwrite *.txt findコマンドと組み合わせてディレクトリ配下一括変換 ディレクトリ配下のすべてのtxtを変換するにはfindコマンドと組み合わせるなどの工夫が必要。 find . -name '*.txt' | xargs -n 20 nkf -w -Lu --overwrite 内容はfindで.txtが含まれたファイルを探し、結果をxargsに渡し、そしてnkfで文字コードを変換している。 さらに複数の種類のファイルを同時に変換するには-oオプションを使う。 find . -name '*.c' -o -name '*.h' | xargs -n 20 nkf -w -Lu --overwrite 内容はカレントディレクトリ配下の.cと.hのファイルを一括してUTF-8の文字コ

SoundCloud を使ってみる

イメージ
webで音声ファイルを公開する場合、以前はファイルの保存先で苦労したものだが、現在は音声ファイルを扱えるサービスが出てきて状況は変わってきた。 個人的にはbloggerを使っているので、同じgoogleサービス内に保存しているのだが、保存容量が限られているので、すぐにいっぱいになってしまう。Youtubeは容量を気にする必要がなくよいのだが、音質はそれほどよくはないし、映像にする必要があるので、何かと手間である。今回かなり浸透してきた音声ファイル専門のサービスであるSoundCloudを試してみることにした。 SoundCloudは音楽を中心としたSNSというところで、どちらかというと本格的な楽曲をアップし、それに対してリスナーがいて、共有や交流などが緩やかに行われる場所。個人のファイル置き場として使うのは、やや邪道かもしれないが問題はないようだ。 SoundCloudの制限 無料で使えるのはファイル形式にかかわらず合計 2時間 までのようだ。つまり容量計算ではないので、高音質なファイルでも2時間までOKであるということ。これなら可逆圧縮のFlacとかでも現実的になる。また2時間以上使いたい場合は有料サービスがある。趣味で利用する分には2時間もあれば十分だろう。 サポートしている音声ファイルは、AIFF, WAVE (WAV), FLAC, ALAC, OGG, MP2, MP3, AAC, AMR, WMA で、ひとつの最大ファイルサイズは5GBまでのようだ。 アカウントを作る https://soundcloud.com 公式ページにアクセスして、上部のバーから Sign upボタンを押すと別ウィンドウが開く。 メールとパスワードを設定してサインアップ。ユーザー名を決めて登録。これで利用可能になる。簡単。 音声ファイルをアップしてみる 上部バーのuploadボタンをクリック。 Choose file to uploadをクリックして、ローカルファイルを選択してアップ。今回flac形式の音声ファイルをアップしてみた。 ちゃんとアップできたかどうかを、自分のホームから再生して確認。 bloggerに埋め込んでみる 曲を選択して矢印アイコンのShareをクリック

ギターのフレットの位置を計算してみる

フレットの位置を計算するスクリプトを考えてみる。いろいろな方法があり得るが、平均律を求める式を変形するのがスマートかもしれない。maximaで以下のように計算してみた。nが任意のフレットで、scaleがギターのブリッジから0フレットまでの距離。 float(2^((12-n)/12)*scale/2); これをJavaScriptに改造。Scaleに任意の数値を入れて、ボタンを押すと0フレットから24フレットまで連続計算する。 デフォルトのスケール644mmは所有しているタカミネTSS-08。スケールは各社それぞれで Martin 645.2mm、Gibson J-45 628.6mm、YAMAHA 651mm などがある。 Scale(mm): fret(mm): 中学生ぐらいから学ぶフーリエ変換 目次はこちら

10 Holes Diatonic Harmonica SUZUKI OLIVE
10ホールズ・ダイアトニック・ハーモニカ
(ブルースハープ)

イメージ
最近リード楽器について調べていたら、ダイアトニック・ハーモニカの音の配列やら、テクニックが興味深く、サンプルとして鈴木楽器の「OLIVE」を買ってみた。目的がハーモニカを吹きたいというのでなく、構造やらのチェックだったりする。それでも演奏について、ある程度は知っておきたいので、しばらくは地道に練習もしみようとは思っている。 フリーリード楽器 ハーモニカはフリーリードという一定の音程を出す金属パーツで作られている。リードの一方が固定されていて、もう一方が固定されていないため、フリーリードと呼ばれている。基本的には、ひとつのリードはひとつの音程しか出せないため、各音程分のリードが付いている。 フリーリードの発音原理は、空気がリードの隙間から抜ける際にリードが振動し、空気が通ったり、さえぎられたりして空気の疎密波を作ることができる。これが聞こえる音そのものとなる。ハーモニカは小さくても、それなりの音量が出せるのはこのためであり、他のフリーリード楽器もボディのサイズと音量は関係がない。 下図はOLIVEのリード構造。吹くと上リードが振動し発音する。その際、下リードからは空気は漏れるが音は出ない。逆に吸うと下リードが発音し、上リードからは音が出ない。上下リードは影響しあっている。 リードの振動パターンから波形は非対称で、矩形波に近く、多くの倍音を含んでいるのが特徴。特に人間の耳に敏感な周波数が豊富に含まれているので、実際の音量よりも大きく聞こえたり、よく通る音になる。下はA4(440Hz)の音の波形。 フリーリード採用楽器は構造に自由度があるため、さまざまな楽器が考案されてきたようだ。原理的には中国の笙(しょう)とも同じなので、2500年以上の歴史を持つ。それがヨーロッパに伝わって現在のフリーリードになった見方が強いようだ。1810年代にリード・オルガンとして普及し、その製造工程での検音用道具からハーモニカが誕生したらしい。1830年代には早くもハーモニカは流行したようだ。1857年には現在のホーナー社がハーモニカ製造で創業している。 現在フリーリードを使ったメジャーな楽器としては、大きく分けてアコーディオン、オルガン系の楽器とハーモニカ系に分けられると思う。ハーモニカはもっともコンパクトで、シンプルな構造を

C言語 ホワイトノイズをつくる

イメージ
ホワイトノイズ すべての周波数を含み、そのすべてが一定の強度を持つ波。これをまじめに計算するとなると、結構厄介な話になる。ここでは1Hzからナイキスト周波数(サンプリング周波数44100Hzであれば、22050Hz)を扱う。また1Hz単位のサイン波を同じ音量にして足していくことで実現してみた。計算が膨大になるため、処理に時間がかかる。ちなみに1秒のホワイトノイズを作るのに4分ぐらいかかっている。速いマシンなら1分以内で処理できるとは思う。またサイン波の初期角度は、ランダム関数を使って2pi以内でばらつかせることでお互いの干渉を防いでいる。 ホワイトノイズ生成プログラム /* White noise * sin波の合成による生成 * 32bit float RAW ヘッダなしwaveファイル出力 */ #include &ltstdio.h&gt #include &ltstdlib.h&gt #include &ltmath.h&gt int main(void){ FILE *fpw; /* 書き込み用ファイルポインタ */ float *pbuff; /* メモリのデータを指す */ int samplingfreq = 44100; /* サンプリング周波数 */ int sec = 1; /* 作成する波形の長さ(秒) */ int fileSize = samplingfreq * sec * 2; /* ファイルの大きさ */ float gain = 0.005; /* ひとつの波形の振幅 */ float step = 2 * M_PI / samplingfreq; /* 点間のステップ */ float phase; int i, j; /* 新規ファイル作成 */ fpw = fopen("white_noise_32bitF_raw.wav", "wb"); /* 失敗時終了 */ if (fpw == NULL) exit(EXIT_FAILURE); /* メモリを確保して先頭アドレスをpbuffに入れる */ pbuff = (float*)m

C言語 三角波をつくる

イメージ
三角波 三角波は、のこぎり波や矩形波に比べ倍音は少なく、おとなし目の音。 生成方法 基音となるサイン波に奇数倍音のサイン波を合成することで、三角波を生成。また振幅は2乗の逆数に比例して減衰させることで三角波になる。1オクターブにつき-12dB傾斜する。ちなみに矩形波は1オクターブにつき-6dBなので、倍音成分は三角波よりも多い。 サイン波の合成で三角波をつくる /* triangle wave * sin波の合成による生成 * 32bit float RAW ヘッダなしwaveファイル出力 */ #include &ltstdio.h&gt #include &ltstdlib.h&gt #include &ltmath.h&gt int main(void){ FILE *fpw; /* 書き込み用ファイルポインタ */ float *pbuff; /* メモリのデータを指す */ int samplingfreq = 44100; /* サンプリング周波数 */ int sec = 10; /* 作成する波形の長さ(秒) */ int fileSize = samplingfreq * sec; /* ファイルの大きさ */ float a = 0.5; /* Aの値 初期振幅 */ float note = 440; float step = 2 * M_PI / samplingfreq; /* 点間のステップ */ int i; int j; /* 新規ファイル作成 */ fpw = fopen("triangle_32bitF_raw.wav", "wb"); /* 失敗時終了 */ if (fpw == NULL) exit(EXIT_FAILURE); /* メモリを確保して先頭アドレスをpbuffに入れる */ pbuff = (float*)malloc(sizeof(float) * fileSize); /* 失敗時終了 */ if (pbuff == NULL) exit(EXIT_FAILURE); /* tria

C言語 矩形波をつくる

イメージ
矩形波 矩形波(くけいは)は、方形波、Square waveとも呼ばれている。 生成方法 基音となるサイン波に奇数倍音のサイン波を合成することで、矩形波を生成。また振幅は倍音と同じ数で割って、小さくしていく。 サイン波の合成で、矩形波をつくる /* Square wave * sin波の合成による生成 * 32bit float RAW ヘッダなしwaveファイル出力 */ #include &ltstdio.h&gt #include &ltstdlib.h&gt #include &ltmath.h&gt int main(void){ FILE *fpw; /* 書き込み用ファイルポインタ */ float *pbuff; /* メモリのデータを指す */ int samplingfreq = 44100; /* サンプリング周波数 */ int sec = 10; /* 作成する波形の長さ(秒) */ int fileSize = samplingfreq * sec; /* ファイルの大きさ */ float a = 0.6; /* Aの値 初期振幅 */ float note = 440; float step = 2 * M_PI / samplingfreq; /* 点間のステップ */ int i; int j; /* 新規ファイル作成 */ fpw = fopen("square_32bitF_raw.wav", "wb"); /* 失敗時終了 */ if (fpw == NULL) exit(EXIT_FAILURE); /* メモリを確保して先頭アドレスをpbuffに入れる */ pbuff = (float*)malloc(sizeof(float) * fileSize); /* 失敗時終了 */ if (pbuff == NULL) exit(EXIT_FAILURE); /* Square 奇数倍音の合成(15回) メモリ書き込み */ for(i=1; i&lt=29; i++){ for

C言語 のこぎり波をつくる

イメージ
思い出したようにC言語のプログラムメモを再開。サイン波の合成で検索して来る人が多いということと、子供がプログラムで音を作り始めたというところが理由。とりあえずシンセサイザーの基本となるような波形をフーリエ変換の考えでプログラミングしてみるところから再スタート。 のこぎり波 波形がのこぎりのような形になっているため、そう呼ばれている特徴的な波形。 生成方法 音はサイン波に分解できるというフーリエの理論だが、ここでは逆のサイン波を合成することで、のこぎり波を生成している。 またフーリエ変換では数学的に無限大の数のサイン波を合成するのだが、実際には適当な数で打ち切って処理している。もしくはナイキスト周波数までやれば、デジタル処理としては完璧。 のこりぎ波にするには、整数倍のサイン波を合成していくのだが、振幅は倍音と同じ数で割って、小さくしていくところがポイント。これだけで、のこぎり波になっていく。 他にものこぎり波の生成方法はいくらでもあるが、まずはこのような理論的にベーシックなところを確認しておきたい。 理想的な、のこぎり波形は耳に痛いのだが、ここで作るような合成数が少ない波形は角が取れて聴きやすい。 サイン波の合成で、のこぎり波をつくる /* Sawtooth wave * sin波の合成による生成 * 32bit float RAW ヘッダなしwaveファイル出力 */ #include &ltstdio.h&gt #include &ltstdlib.h&gt #include &ltmath.h&gt int main(void){ FILE *fpw; /* 書き込み用ファイルポインタ */ float *pbuff; /* メモリのデータを指す */ int samplingfreq = 44100; /* サンプリング周波数 */ int sec = 10; /* 作成する波形の長さ(秒) */ int fileSize = samplingfreq * sec; /* ファイルの大きさ */ float a = 0.4; /* Aの値 初期振幅 */ float note = 440; float step =

チューナー KORG AT-12 Auto Chromatic Tuner

イメージ
コルグの古いオートクロマチックチューナー。発売は1983年。定価19800円。未だに現役で問題なく使えている。当時高精度で入手可能な価格のチューナーはこれぐらいしかなかった。研究用に精度が欲しかったので無理して買ったのを思い出す。楽器メーカーでもこの機種を使って調律するぐらい信頼できるチューナー。今ならパソコンで十分だったりするのだけど。コルグは一般向けにはじめてチューナーを作ったメーカーで、今でもリーダー的な存在。チューナーを買うならコルグで間違いないと思う。 AT-12の説明書は紛失してしまったが、オフィシャルページでPDFをダウンロードできた。 http://www.korg.co.jp/Support/Manual/download.php?id=289 オート・チューナーの幕開け 今では自動で測定するオート・チューナーが普通だが、当時は音名を指定してから調律するマニュアル・チューナーが主流だった。このAT-12以降はオート・チューナーの時代になる。 針式メーター このチューナーの良い点は精度に尽きるのだが、今時のLEDチューナーと違い、針式メーターなので、音の揺れ具合まで分かって何かと便利だったりする。さじ加減で数セント高く合わせるとかが簡単。平均律以外の調律をするときにも使える。 また楽器の調律以外の用途がいろいろある場合は針式は便利。また反応スピードもそこそこ速く困ったことはない。SLOWとFASTの切替はできるようになっているので不安定な音の場合はSLOWにすると、見やすくなったりする。また暗いステージなどで使用できるようにライトを点灯させることも可能。 測定範囲と精度 32.7Hz~3951.07kHzまで測定可能。低い音はC1の32.7Hzは計測できる。これは5弦(6弦)ベースの一番低いB1の半音上の音になる。実際には倍音が結構出ているので、5弦ベース最低音も問題なくチューニングできる。高い音はピアノの高いB(3951Hz)の音まで計測可能。ということで、ほとんどの楽器の音域はカバーしているし、一部範囲外の音も測定可能なケースが多い。また、どの音域も±1セントの精度で測定できるので、楽器の調律であれば問題はないだろう。最新のチューナーの一部では精度が±0.1セントなどもあるけど、ギターなどだったら、楽器の精