読者です 読者をやめる 読者になる 読者になる

nucleo boardとmbedでギターエフェクターを作る 3.完成品

とりあえず完成した。外装はこんな感じ

f:id:benntann:20160205005750j:plain

 

100均で買った道具箱に無理矢理ぶちこんである。フォンジャックの穴ははんだごてで溶かして開けた(臭い)

上から黒いのでてるけど上がペダルワウ(違う)の周波数調整用で下がエフェクター切り替え用のフォトリフレクタ。手とかを近づけると切り替わる。エフェクターの音は↓見たいな感じ

エフェクターなし

オーバードライブ

オートワウ

ペダルワウてきなやつ

 ワウみたいな周波数を見るエフェクターでも畳み込みで実現できるからデジタルフィルタを作った人は偉いですね

nucleo boardとmbedでギターエフェクターを作る 2.プログラム

前のやつの続き

ワウをやりたかったのでワウを作った。

C言語ではじめる音のプログラミング」を読んでたらワウのアルゴリズムがあったのでそれを利用させてもらって作った。多分製品とかのワウはこんな感じのアルゴリズムで実装されてるんだとおもうけど周波数の調整とかが絶妙すぎてBOSSみたいな音色は全く出せない。それでもワウワウ言うので面白いので結果的によしとしよう

音のサンプルはのちほど・・・

archの日本語入力について

archを使うとき大体の人がmozcやらを使うと思うのだがインストール後の設定がUSキーボードだからかよくわからなかったので一応メモ(Xfceの場合)

1.アプリケーションから設定を開き、入力メソッドを選択

2.全体設定から使用可能にする入力書式の一覧を見てbaiduがあったら除外する

3.変わってmozcの設定からKeyboard type for kana input methodをUSにする

4.Mozc key bindingsからmozcのオンオフキーを好きなように設定する

3の工程をしていなかったからずっと使えなかったのかな

archインストール後のUSBメモリ

USBメモリでarchインストールしたのだけれどもう使わないし普段使いのUSBメモリに戻そうとしてコンピュータのストレージ一覧から右クリでフォーマットしても元々のUSBメモリの容量に戻らなかった。

どうしたものかなって調べてたらWindowsの場合、GUIからのフォーマットでは容量が正常なものに戻らないらしくCUIからフォーマットしなくてはならない。

このページにやり方が書いてあるのでその通りにやりもう一度フォーマットしなくてはならなくなったのだがWindowsのフォーマットからでは何故かできなかった。

仕方ないのでIOデータのフォーマッタを用いてフォーマットしたら容量が元々のものに戻った。

どうしようもない記事だった

archのデュアルブート

ノートを買ったので既存のwin7デュアルブートしてみた。

linuxもシェルもデュアルブートも初めてだったがとりあえず色んなサイトを参考にしながらやったらできた。

躓いたりしたのが

インストール後のwifi-menuが使えない

→エラーにでてるパッケージをインストールする。違うエラーメッセージ(忘れた)がでたらdhcpのサービスを無効にする(競合してるらしい)

lightdmが有効にできない

→他のDMが有効になってるらしいのだがどれを有効にしたか忘れたので-fオプションを使い強制的にlightdmを有効化した

GUIも適当にいれてみたのだがなぜかlightdm?のログイン画面でコモンユーザーがログインできない。rootはできるのに

あとyaourtが使えない。とりあえずこの二点はどうにかしたい

yaourtはrootで使えないことを知らずにずっとやっていたので一般ユーザーから使用することで解決。

lightDMからログインできなかったのでGDMにしたのだがこちらもダメだった。原因がさっぱり分からなかったのでコモンユーザーからstartxしてみたら

timeout in locking authority file /home/username/.xauthority

とか言われた。.xauthorityというファイルはどこを探してもみつからないのでファイルを作って見ようにもドットがはいっているため?rootでも作成不可能だった。調べているとどうにもこの.xauthorityが作成できないためXが起動できないらしい。コモンユーザーの~/のパーミッションを調べてみたところroot以外書き込みが不可能になっていた。パーミッションを訂正したところ、ログインできるようになったので~/のパーミッションがおかしかったことが原因であった。手順どおりホームディレクトリを作ったのになぜなんだ・・・

日本語化とかは全くできていないのだが用途としては別に日本語化されなくても使っていける範囲なので後回し。

 

nucleo boardとmbedでギターエフェクターを作る 1.入出力回路

マイコンでデジタルエフェクターを作ってみたかったのでとりあえず安いnucleo boardのF446を購入して作ってみることに(nuleo boardの中ではCPUクロックが最高であり、coretexのM4なのでDSPが搭載されていることからこれにした)

まず入出力の回路なのだが音声信号はノイズ処理がかなり重要になってくるため自分の能力の範疇を超えるため他の方のものを参考した

今回は「mbed ギターエフェクター」と検索するとトップに出てくるプロトタイパーズさんの回路を使わせてもらった。他の製作者の方もこの回路をよく使用しているようであった。この回路は一見複雑そうに見えるがコンデンサは全てローパスフィルタなどに使われているだけであり実際は反転増幅などのシンプルな回路となっている。

まず初めに秋月で部品覧に書いてある通りに購入し、そのまま組み立ててギターの直接の入力と、mbedへの入力をオシロスコープで確認してみたところ3Vでオペアンプを動作させているのにも関わらずなぜかバイアスの1.5Vで頭打ちになってしまった。そのため第一の変更点としてオペアンプを5V動作にし、R4を2倍の20kΩとすることによって大体3Vくらいで出力信号が頭打ちするようになった。

次にmbedの出力をオシロスコープで観察してみたところなぜか波形の直流分(バイアス)が存在していた。電解コンデンサによってこれは消えるはずなのだが消えるどころか1.5Vのバイアスから2.5Vくらいのバイアスに増幅されていた。なので第二の変更点としてC6を余っていたフィルムコンデンサに交換することによって直流分を消すことができた。コンデンサの種類によって何が異なるのかよくわからないのだが一応波形上では入力波形とほぼ同じになっていたのでよしとする。

実際にエフェクターをかけずそのまま出力してみたものをアンプに繋げて聞いてみたところ素人耳には普通のギターの音がリアルタイムに出力された。入出力回路はこれで完成である。

F446のanalogoutの周波数はいくつか知らないし検索しても全く情報がでてこないがanaloginとanalogoutを∞ループさせているだけでこのような結果になったのでaruinoのようにクロックの分周を設定したり割り込みを設定したりとしなくていいのはF446を使用してよかったと思える点であった。あとはエフェクターを搭載するだけであるが今考えているのがオーバードライブとワウである。オーバードライブは簡単に作れそうなのだがワウは共振フィルタを用いたりしなければならないようなので手間がかかりそうだ。

 

paizaの水着のやつ(C言語) ※ネタバレ

paizaの彼女を作ろうぜ!みたいな遊びを暇だからやってたのだが水着のやつがクリアできなかった。1000までの階乗を乗せているサイトがあったので適当にそれらをつっこんでいったら合ってるんだけど採点に入れるとすぐ弾かれる。もうわかんないのでなんでかなって思って調べていったらツイッター

(以下ネタバレ)

 

 

という素晴らしいツイートをみつけたので早速実装。成功しました。

9桁までしかとっていないのはダメみたいです。最高乗数が10^12なのでってことですかね

最後の問題はプログラミング云々ってより数学に関する問題って感じでした

下に自分の書いたコード載せときます(汚い)

#include <stdio.h>
#include <math.h>
double func(int);
int main(void){
 int n;
 scanf("%d",&n);
 n = func(n);
 printf("%d\n",n);
}
double func(int n){
 double i,sum = 1;
 double ten;
 for(i = 2; i <= n; i++){
  ten = 1;
  while(fmod(sum*i,ten*10) == 0)
   ten *= 10;
  if(100000000000 < sum*i/ten)
   sum = fmod(sum*i/ten,100000000000);
  else
   sum = (sum*i)/ten;
 }
sum = fmod(sum,1000000000);
return sum;
}

そういえば86duino壊れました笑