a hard day's night
http://wiredvision.jp/news/200811/2008110622.html
ということでこれの譜面どおりMIDIファイル作ってみた。
無題 ハデナ
楽器が違うからなんとも。
あわせて
http://wiredvision.jp/blog/takamori/200811/200811061200.html
こんな説も。
俺的には科学で音楽を解析と言うのはとてもとても夢があって好きなんだけど今回はこっち支持かな。
ジョン・レノンのパートが不自然と言うくだりはとても納得。
もとの曲を耳で聞く感じ、ピアノっぽい下のDの音が
4分あと位に聞こえる気がするのだけどどうなんだろう。F、Dって。
重さは関係ない
こんなピッキングするやつマーティ・フリードマンしか見たことねえ笑。
続Ruby 1.9.1 preview 1
make installしてからもう一度make test-allしてみた。
1) Failure: test_systemcallerror_eq(TestDelegateClass) [/home/*/src/ruby-1.9.1-preview1/test/test_delegate.rb:18]: [ruby-dev:34808] 2) Failure: test_handle_special_CROSSREF_no_underscore(TestRDocMarkupToHtmlCrossref) [/home/*/src/ruby-1.9.1-preview1/test/rdoc/test_rdoc_markup_to_html_crossref.rb:87]: Expected "<p> <a href=\"../files/home/*/src/ruby-1_9_1-preview1/test/rdoc/rdoc_markup_to_html_crossref_reference_rb.html\">/home/*/src/ruby-1.9.1-preview1/test/rdoc/rdoc_markup_to_html_crossref_reference.rb</a> </p> ", not "<p> /home/*/src/ruby-1.9.1-preview1/test/rdoc/rdoc_markup_to_html_crossref_reference.rb </p> ". 3) Failure: test_priority(TestThread) [/home/*/src/ruby-1.9.1-preview1/test/ruby/test_thread.rb:129]: [ruby-dev:33124] 5641 tests, 2466641 assertions, 3 failures, 0 errors, 0 skips
Ruby 1.9.1 preview 1
[ruby-dev:36972] [ANN] Ruby 1.9.1 preview 1リリース
Ruby 1.9.1 preview 1出たのでtest-allしてみた。VMware上。
Linux * 2.6.24-19-generic #1 SMP Wed Aug 20 22:56:21 UTC 2008 i686 GNU/Linux
Distributor ID: Ubuntu Description: Ubuntu 8.04.1 Release: 8.04 Codename: hardy
1) Failure: test_systemcallerror_eq(TestDelegateClass) [/home/*/src/ruby-1.9.1-preview1/test/test_delegate.rb:18]: [ruby-dev:34808] 2) Error: test_class_build(TestGemExtExtConfBuilder): Gem::InstallError: extconf failed: /usr/local/bin/ruby extconf.rb /home/*/src/ruby-1.9.1-preview1/rbconfig.rb:7: ruby lib version (1.9.1) doesn't match executable version (1.8.7) (RuntimeError) from /home/*/src/ruby-1.9.1-preview1/lib/mkmf.rb:4:in `require' from /home/*/src/ruby-1.9.1-preview1/lib/mkmf.rb:4 from extconf.rb:1:in `require' from extconf.rb:1 /home/*/src/ruby-1.9.1-preview1/test/rubygems/test_gem_ext_ext_conf_builder.rb:24:in `block in test_class_build' /home/*/src/ruby-1.9.1-preview1/test/rubygems/test_gem_ext_ext_conf_builder.rb:23:in `chdir' /home/*/src/ruby-1.9.1-preview1/test/rubygems/test_gem_ext_ext_conf_builder.rb:23:in `test_class_build' 3) Failure: test_class_build_extconf_fail(TestGemExtExtConfBuilder) [/home/*/src/ruby-1.9.1-preview1/test/rubygems/test_gem_ext_ext_conf_builder.rb:66]: Expected "extconf failed:\n\n/usr/local/bin/ruby extconf.rb\n/home/*/src/ruby-1.9.1-preview1/rbconfig.rb:7: ruby lib version (1.9.1) doesn't match executable version (1.8.7) (RuntimeError)\n\tfrom /home/*/src/ruby-1.9.1-preview1/lib/mkmf.rb:4:in `require'\n\tfrom /home/*/src/ruby-1.9.1-preview1/lib/mkmf.rb:4\n\tfrom extconf.rb:1:in `require'\n\tfrom extconf.rb:1\n" to match /\Aextconf failed: \/usr\/local\/bin\/ruby extconf.rb.* checking for main\(\) in .*?nonexistent/m. 4) Failure: test_execopts_env(TestProcess) [/home/*/src/ruby-1.9.1-preview1/test/ruby/test_process.rb:209]: <"PATH\n"> expected but was <"">. 5) Failure: test_execopts_unsetenv_others(TestProcess) [/home/*/src/ruby-1.9.1-preview1/test/ruby/test_process.rb:227]: <"A=B\n"> expected but was <"">. 6) Failure: test_handle_special_CROSSREF_no_underscore(TestRDocMarkupToHtmlCrossref) [/home/*/src/ruby-1.9.1-preview1/test/rdoc/test_rdoc_markup_to_html_crossref.rb:87]: Expected "<p> <a href=\"../files/home/*/src/ruby-1_9_1-preview1/test/rdoc/rdoc_markup_to_html_crossref_reference_rb.html\">/home/*/src/ruby-1.9.1-preview1/test/rdoc/rdoc_markup_to_html_crossref_reference.rb</a> </p> ", not "<p> /home/*/src/ruby-1.9.1-preview1/test/rdoc/rdoc_markup_to_html_crossref_reference.rb </p> ". 7) Failure: test_exit_action(TestSignal) [/home/*/src/ruby-1.9.1-preview1/test/ruby/test_signal.rb:52]: [ruby-dev:26128]. Exception raised: <#<Timeout::Error: execution expired>>. 8) Failure: test_priority(TestThread) [/home/*/src/ruby-1.9.1-preview1/test/ruby/test_thread.rb:129]: [ruby-dev:33124] 5641 tests, 2466630 assertions, 7 failures, 1 errors, 0 skips make: *** [test-all] エラー 1
プログラミング言語Cyan
Cyan, Yet Another New language - takuto_hの日記
新しい言語らしいのだけど。作者のプログラム暦約1年とかすごすぎね?
俺がプログラム暦1年の頃なんてたぶん予約語の書き取りとかしてたよ。
でもCyanなら予約語ないみたいなんで書き取りしないでいいですね。
fib = ^(n): if(n < 2): n else: fib(n-2)+fib(n-1) say fib(15)
みんな大好きフィボナッチ。
インデントの感じが独特な印象かなあ。if>else>中身の順を守る必要あり。
特徴であるところのマクロとか試すべきなんだろうけどすみません(lisp的な)マクロ良く分かってないです勉強します。
ソースはC#書かれててRakefileがあるので試してみたらrake一発で普通にコンパイルできた。
せっかくなんでVC#でコンパイルしてみるに
CSC = "csc"
def options ["-out:#{DESTDIR}/Cyan.exe", *SRC_FILES.map{|e|e.gsub('/', '\\\\')}] end
こんな感じに書き換え。Cygwin上でrakeでコンパイル通ってtest.cyも普通にOKだった。
あと関係ないけど
task "countline" do count = SRC_FILES.inject(0) do |count, name| print "#{name}: " puts c = IO.readlines(name).size count + c end puts "Total: #{count}" end
行数数えるのはこんな感じのが好み。
Waveデータを作って再生する
あい今度はオンメモリーのデータを作ってすぐ再生。
今度は矩形波にしてみたよスクウェアウェイブ。
(i>>7&1)*255ここね。128サンプルごとに0と255を繰り返すデータになります。
関係ないけど矩形波倶楽部のCDにT-SQUAREのメンバーが参加してるのは
やっぱり矩形とSQUARE掛けてるのか。
メモとしてPythonの配列はinsertメソッドで拡張と設定ができるのね。
慣れねえ。
import clr clr.AddReference('System') clr.AddReference('System.Windows.Forms') clr.AddReference('Microsoft.DirectX.DirectSound') from System import * from System.Windows.Forms import * from Microsoft.DirectX.DirectSound import * class PlaySound2(Form): def format(self): fmt = WaveFormat() fmt.SamplesPerSecond = 44100 fmt.BitsPerSample = Int16(8) fmt.Channels = Int16(1) fmt.FormatTag = Int16(WaveFormatTag.Pcm) fmt.BlockAlign = Int16(fmt.Channels * fmt.BitsPerSample / 8) fmt.AverageBytesPerSecond = fmt.BlockAlign * fmt.SamplesPerSecond return fmt def description(self, length): desc = BufferDescription(self.format()) desc.BufferBytes = length desc.ControlPositionNotify = True desc.GlobalFocus = True return desc def __init__(self): wave = [] for i in range(44100 * 2): wave.insert(i, (i>>7&1)*255) self.device = Device() self.device.SetCooperativeLevel(self, CooperativeLevel.Normal) self.buffer = SecondaryBuffer(self.description(len(wave)), self.device) self.buffer.Write(0, Array[Byte](wave), LockFlag.EntireBuffer) self.buffer.Play(0, BufferPlayFlags.Default) def Dispose(self, disposing): if(disposing): if(self.buffer): self.buffer.Stop() self.buffer.Dispose() if(self.device): self.device.Dispose() Form.Dispose(self, disposing) Application.Run(PlaySound2())
Waveファイルを作る
44100Hz、8bit、モノラルで2秒間、ノコギリウェーブを鳴らします。
ノコギリウェーブって言葉の響きが面白い。
音程は適当。えーと周期が256サンプルだから(44100/256)Hzになるのかな。
しかしWaveファイルって結構簡単に作れるのね。
open("b.wav", 'w'){|f| rate = 44100 #Hz sample = 8 #bit ch = 1 sec = 2 speed = rate*sample*ch/8 #bytes per sec size = speed * sec fileSize = size + 36 fmtSize = 16 f.print("RIFF", [fileSize].pack('V'), "WAVE", "fmt ", [fmtSize].pack('V'), [1].pack('v'), #pcm [ch].pack('v'), [rate].pack('V'), [speed].pack('V'), [sample*ch/8].pack('v'),#block(byte) [sample].pack('v'), #sample(bit) "data"); wave = [] size.to_i.times{|i| wave[i] = i % 256 } f.print([wave.size].pack('V'), wave.pack("C*")); }