未分類一覧

SKAGEN Falster 2 を買ってみたあとのあれこれ

概要

  • SKAGEN Smartwatch Falster 2 を買いました
  • バッテリーの減りが異常に速いという問題に見舞われたのですが、 ファクトリーリセット後、充分に充電してから再セットアップ したら改善しました
  • 専用充電器の入手性が悪いですが、Fossil Generation4用の充電器で代用できるようです(未確認 代用できることを確認できました)

続きを読む


WindowsでCDリッピングしてALACエンコードする環境を作る(メモ)

おニューのMBPにiTunes母艦を移行してしばらくたって、久々にCDを買ったとき、はたと気がつく。「MBP13″に光学ドライブついてないじゃねーか!」

だからと言って、そのためだけにWindows機にiTunes入れ直すのも業腹なので、他の手段でALACを作る環境を作ったのでメモ。

面倒なので日本語化とかはしてません。

続きを読む


ニコニコ動画の再生トラブルがルータの設定で改善した話

ニコ動がまともに見られない→解決

去年の後半くらいから、自宅のPCでニコ動で以下のような現象が発生し、まともに動画が見られず困っていました。

  • 動画再生開始まで2~3分ほど待たされる
  • 再生中もしょっちゅう再生が途切れ、読み込み待ちになる
  • シークバーを動かすとフリーズする

全体的にはネットワークが遅い時のような挙動なのですが、他のサイトやYouTube、Amazonプライムビデオなどは普通に見られましたし、スピードテストサイトをいくつか試しても数十~百Mbps程度の通信速度で安定しているようでした。

で、いろいろ試してみたのですが、結論から言うと、ルータの設定の問題でした。
拙宅では無線LANルータとしてBuffaloのWZR-1750DHP2を利用しているのですが、このルータにある「アドバンスドQoS」という機能をオフにしたところ、劇的に改善したのでした。

続きを読む



Mastodonインスタンスたてました

とりあえずやってみたかったので、Mastodonインスタンスをシングルユーザモードで立ててみました。

shout_poor@social.noisyspot.jp

まだ何もしてないけど、一応forkしてから展開してるので、ぼちぼちとカスタマイズもしていきます。

構築した手順とかは色んな人が書いてますが、この辺参考にしてます。

Dockerで雑にMastodonを起動する方法
documentation/Running-Mastodon/Production-guide.md
小規模Mastodonインスタンスを運用するコツ

そのうち、私がやった手順とかまとめてあっちの方にまとめておきます。



転職して1ヶ月が経ちました

はじめに

学校卒業以来18年ちょい務めた会社を5月末に辞めまして、1ヶ月休養後7月から新たな会社でお世話になっております。このエントリでは、退職に至った経緯とか新しい職場はどうかといったあたりを、個人的な記録として主観100%で書いておこうと思います。

「やりたいことがあって転職しました!」みたいな希望に満ちたものでもなければ、前職のブラックさを強調するほどの怨念もありませんので、世にある転職エントリのような面白みはないかと思います。

あ、書いてる人は38歳独身男です。

続きを読む


Scala でソフトシンセ作ってみる その1 波形生成

まずは波形生成。アナログシンセでいうところのオシレータ(OSC)にあたります。

ソースコードはこちら。ひとまずデューティ比可変の矩形波と、正弦波、三角波に対応しています。

https://github.com/shout-poor/Synthcala/blob/master/Synthcala/src/jp/noisyspot/synth/gen/WaveGenerator.scala

Java だと、オシレータの抽象クラスを作って、波形別に実装クラスを作って、パラメータをメンバ変数に持たせて…とかやるんですが、ここでは関数型らしく、パラメータを与えると、「パラメータに応じた波形を生成する関数」を返してくれる高階関数として実装しました。

例えば正弦波の場合はこんな感じ。

  def sineWave(sampleRate: Double, tone: Double) = (z: Int) => {
    import scala.math._
    sin(pInWave(sampleRate, tone, z) * 2.0 * Pi)
  }

サンプルレートと周波数を渡してあげると、時間変数 z (サンプリングレートの逆数を単位とする変数)を引数とする関数が帰ってきます。その関数を、例えばRange.mapに与えてあげると、一定時間内での波形をサンプルのリストとして取得できます。

scala>  val sinConc=sineWave(100, 20) // サンプリングレート 100Hz, 音程20Hz
sinConc: Int => Double = <function1>

scala>  Range(0, 100).map(sinConc)
res0: scala.collection.immutable.IndexedSeq[Double] = Vector(0.0, 0.9510565162951535, 0.5877852522924732, -0.587785252292473, -0.9510565162951536, 0.0, 0.9510565162951535, 0.5877852522924736, -0.5877852522924734, -0.9510565162951536, 0.0, 0.9510565162951539, 0.5877852522924736, -0.5877852522924734, -0.9510565162951539, 0.0, 0.9510565162951539, 0.5877852522924736, -0.5877852522924734, -0.9510565162951539, 0.0, 0.9510565162951539, 0.5877852522924714, -0.5877852522924712, -0.9510565162951539, 0.0, 0.9510565162951539, 0.5877852522924714, -0.5877852522924712, -0.9510565162951539, 0.0, 0.9510565162951539, 0.5877852522924714, -0.5877852522924712, -0.9510565162951539, 0.0, 0.9510565162951539, 0.5877852522924714, -0.5877852522924712, -0.9510565162951539, 0.0, 0.9510565162951522, 0.58778525229247...

で、これらとは別に、モノラル音声を任意の定位でステレオの左右に振り分ける関数返す pan と、与えられた係数をかける関数を返す vol 関数を作成しました。これらで得られる関数を andThen で合成することにより、任意の定位、音量の音声波形を得る関数をクライアント側で作成できます。

クライアント側はこんな感じ。

// 音程440Hz、音量0.5、定位0.2 の矩形波関数
val sineConcrete = sineWave(FRAMES_PAR_SEC, 440.0) andThen vol(0.5) andThen pan(0.2)
val samples = Range(0, FRAMES_PAR_SEC).flatMap(sineConcrete)

pan で得られた関数の戻り値は、2ch分のサンプルを持つ Seq なので、先ほどと違って Range.flatMap で展開しています。

こんな風にしてえられた samples を、前回作成した OutDevice に出力すれば、めでたくパラメータ通りの音が鳴る、ということになります。

というところで今回は終了。次回はSMFライクなシーケンスデータで発音タイミングや音程を制御するあたりをやろうと思います。


Scala でソフトシンセ作ってみる その0

なんか前も同じようなこと書いた気もするけど、以前挫折したのをやり直したりしています。

とりあえず、今回は wav に吐いて終わりではなく、ちゃんと自力で音を出せるように、まずはデバイスへの出力クラスから作ってみました。

https://github.com/shout-poor/Synthcala/blob/master/Synthcala/src/jp/noisyspot/synth/out/OutDevice.scala

使う方はこんな感じ。 440Hz の矩形波を生成して出力するサンプルです。

https://github.com/shout-poor/Synthcala/blob/master/Synthcala/testrunner/OutDeviceTestRun.scala

ポイントとしては、

  • SourceDataLine#write は、内部バッファがいっぱいになると空きができるまでブロックするので、再生自体を別スレッドで処理するために Actor を継承。メッセージとして直接サンプルのリスト (Seq[Double]) を送信して使用する。
  • ソフトシンセの波形生成側で扱うサンプルは -1.0 ~ 1.0 の倍精度実数とし、本クラス内でデバイスに応じたバイト列に変換。(現時点では、符号付き 16bit / LittleEndian のみ実装)

基本的には Java の Audio API を使ってるだけなので、Scala らしいところはあんまりないかと思います。

次は波形生成と各種フィルタ/エフェクタの枠組みを作っていきます。


コンデジ買った

数年ぶりにコンデジを購入。Sony Cyber-shot の DSC-WX70

充電兼PCとのI/Fが、和製コンデジでは珍しい microUSB ということで、試しに店員さん(多分ソニーからの派遣)に「これってスマホの充電器でも充電できるんですか?」みたいな感じで聞いてみたところ、「大丈夫だと思うんですが…おすすめはしません。付属のACアダプタを推奨します」と歯切れの悪いお答えでした。

まあ、何も言ってないのに付属ACアダプタの実物を持ってきて見せてくれて、定格5V/0.5Aなのを確認できたので、まあ大丈夫だろうということで購入。

スマホ用のデータ転送ケーブルでPCに接続してみると、マスストレージとは違うようですが、Windows7なら普通に認識して、Explorerで内容を閲覧でき、Google Picasaでのインポートも問題なし。ただ、SDカードを抜いた状態で撮影(内蔵メモリに記録)したものは見えないようです。

タッチパネルの操作性は思ったより快適です。プリセットモードの切り替えならジョグダイヤル式より分かりやすい。感圧式なので、いまどきのスマホに慣れた人なら、気持ち押しこむように操作すると良いかも。

しかし、今時はこんなちっちゃいカメラでフルHD60fps動画撮れるのね…

あ、付属の画像管理ソフトは試してませんw


Close Bitnami banner
Bitnami