Beep音で遊ぼう

はじめに

これは、SLP KBIT Advent Calendar 2014 の21日目の記事です。

Beep音とは

ビープ音は、単一の波形で構成される音のことであり、コンピュータにおいて最も原始的な音声出力と位置づけられています。

電源投入時や、稼働中にエラーが発生した場合などに発せられる音のことです。

C言語Beep音を鳴らす

C言語を使ってBeep音を鳴らすには、Beep関数を使います。

Beep関数を使用するためには、"windows.h"というヘッダファイルをインクルードする必要があります。

Beep(音の周波数〔Hz〕, 音の長さ〔ms〕);

このように記述することで、簡単にBeepを音を鳴らすことが出来ます。


まずは、簡単な時報を鳴らすプログラムを書いてみます。

#include <stdio.h>
#include <windows.h>

void main() {
    printf("時報\n");
    Beep(440,  950);
    Beep(440,  950);
    Beep(440,  950);
    Beep(880, 1200);
}

曲を演奏する

次は、Beep音で音楽を演奏してみたいと思います。

今回は、「ラ」を440Hzとし、ピタゴラス音律を採用します。

ピタゴラス音律についての説明は割愛するので、興味のある人は調べてみてください。

#include <stdio.h>
#include <windows.h>

void  main( )
{
    Beep(330.0, 450);   Beep(330.0, 450);   Beep(330.0,  900);
    Beep(330.0, 450);   Beep(330.0, 450);   Beep(330.0,  900);
    Beep(330.0, 450);   Beep(391.0, 450);
    Beep(260.7, 650);   Beep(293.3, 200);   Beep(330.0, 1000);
    Sleep(500);
    Beep(347.7, 450);   Beep(347.7, 450);   Beep(347.7,  650);
    Beep(347.7, 200);   Beep(347.7, 450);
    Beep(330.0, 450);   Beep(330.0, 450);   Beep(330.0,  450);
    Beep(330.0, 450);   Beep(293.3, 450);   Beep(293.3,  450);
    Beep(260.7, 450);   Beep(293.3, 800);   Beep(391.1,  900);
    Sleep(150);
    Beep(330.0, 450);   Beep(330.0, 450);   Beep(330.0,  900);
    Beep(330.0, 450);   Beep(330.0, 450);   Beep(330.0,  900);
    Beep(330.0, 450);   Beep(391.0, 450);
    Beep(260.7, 650);   Beep(293.3, 200);   Beep(330.0, 1000);
    Sleep(500);
    Beep(347.7, 450);   Beep(347.7, 450);   Beep(347.7,  650);
    Beep(347.7, 200);   Beep(347.7, 450);
    Beep(330.0, 450);   Beep(330.0, 450);   Beep(330.0,  450);
    Beep(391.1, 450);   Beep(391.1, 450);   Beep(347.7,  450);
    Beep(293.3, 450);   Beep(260.7, 900);
}

何の曲かは、聞いてからのお楽しみです。クオリティに関しては目を瞑ってください。

最後に

Beep音でちょっとしたDTMを楽しみましょう!

Rails開発日記 Part.2

なんとか3次関数まではそれなりに動くものが出来たと思うので、Magnet Ver 0.20として公開してみます。

Herokuは、一定時間アクセスがないと、次にアクセスした際に結構時間が掛かるのでご了承ください。

 

次は最終目標のフーリエ解析の実装に取り組んで見る予定です。

 


追記

簡単なフーリエ解析のプロットを実装しました。

いまのところ、簡単な形式のグラフしか描画できませんが、気が向いたら分数の形式などにも対応させてみようかと思います。

 

少し疲れたので、あとはおまけ機能を少し追加して、一旦開発を中断しようと思います。


追記の追記

ちょっとしたおまけを追加しました。

最近、D3.jsというものに興味を惹かれたので、少し遊んでみました。

多分5種類ぐらいあります。マウスでゴシゴシしてください。

Rails開発日記 Part.1

夏休みの成果物として、Ruby on Railsを使って俺得なアプリケーションを開発しようと考えていたので、先日より開発に着手しました。

今回の目的は、Ruby on Railsの勘を取り戻すことと、PostgreSQLを導入したことで、herokuへデプロイし、アプリケーションを外部に公開できるようになったので、そのテストをすることです。

取り敢えず、入力フォームに数値を代入し、その数式のグラフを描画するアプリでも作ってみようかなと思い、開発に取り掛かりました。

取り敢えず、アプリケーションの名前は、「Magnet」にしました。

Ma(th) の g(raph) を net 上で描画するアプリとかそんな感じです。


現時点でこんな感じになりました。

f:id:mille11235:20140908025449p:plain

このアプリケーションの最終目標は、現段階ではフーリエ解析で絶対値、位相スペクトルや、ベクトル軌跡のグラフを描画するところまで作ってみようかと考えています。

 

細かいところの修正を終えたら、Magnet ver.0.10 として、公開してみようかと思います。

PostgreSQLを導入

久し振りに Ruby on Rails を弄りたくなったので、今まではSQLiteを使ってアプリケーションを作っていたのを、PostgreSQLに変えて作ってみることにしました。

PostgreSQLの導入

以前にも、PostgreSQLのインストールに挑戦したことがあったが、うまくいかなかったので再挑戦してみたところ、何故か上手くいってしまいました。

sudo yum install -y postgresql93 postgresql93-server postgresql93-contrib postgresql93-libs多分、こんなコマンドを実行したら上手くいったような気がします。

Railsアプリの作製

postgreSQLを使ってアプリを作るときは、 rails new `name` -d postgresqlで出来るようです。

この際、色々とエラーが発生したが、これの解決方法は、こっちに書きました。

rake db:migrateが出来ない

取り敢えず、scaffoldを使って簡易的なモデルとコントローラーを作成し、いざ、rake db:migrateをしようとしたところ、

rake aborted!
PG::ConnectionBad: FATAL:  role "name" does not exist

Tasks: TOP => db:migrate
(See full trace by running task with --trace)

こんなエラーが発生しました。どうやら、ロールがないらしい。

ということで、ロールを作ることに。

ロールの作製

ロールを作成するには、まずはpsql -U postgresコマンドで、スーパーユーザである"postgres"で接続する。

次に、create role name with login;で、ログイン権限付きのロールを作成した。

このとき、文末に;が必要なことに気付くのに、かなりの時間を要した…

ちゃんとロールが作成されているかを確かめるには、\duで確認できる。

ついでに、データベースを作成する際には、create database name;でOK。

データベースが作成されているかを確かめるには、\lで確認できる。

アプリケーションと同じ名前のロールを作成した後は、config/database.ymlのdatabaseの箇所を少し弄って、再びrake db:migrateを実行することで、今度は上手くいった。後は、rails sで、サーバを走らせ、Welcome aboardのページを確認できれば成功。