それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

cygwinは /dev/dsp などで音が出るらしいのでやってみた

Cygwinは /dev/をWindowsのデバイスが扱える様になっていてて

  • /dev/dsp
  • /dev/audio

にファイルを通すと音が鳴るらしい

とりあえずやってみる

 cat /cygdrive/c/Windows/Media/tada.wav > /dev/dsp

なんかおとでる。でもこれは音が再生されるよりさきに次のデータを送りつける。
音としての情報は失われている。

ためしにRubyからも音を出してみる

ruby からは音が鳴った。←これもちょっと苦労したけど


調べてみたら、ラ音をだすC言語ソースがあったのでコレを使って試して。

wget http://homepage3.nifty.com/rio_i/lab/oss/src/002sound.c -O sound.c

ヘッダ部分を書換え

linux を sys に書換えた

takuya@letsnote:~/Desktop$ diff -c  002sound.c sound.c
*** 002sound.c  2011-03-03 11:20:12.178997700 +0900
--- sound.c     2011-03-03 11:18:05.333742600 +0900
***************
*** 1,6 ****
  #include <fcntl.h>
  #include <limits.h>
! #include <linux/soundcard.h>
  #include <math.h>
  #include <stdio.h>
  #include <sys/ioctl.h>
--- 1,6 ----
  #include <fcntl.h>
  #include <limits.h>
! #include <sys/soundcard.h>
  #include <math.h>
  #include <stdio.h>
  #include <sys/ioctl.h>

soundcard.hが無い場合はapt-cygでaudio/soundのDevelパッケージを作る


あとは

gcc -o sound sound.c -lm
./sound

音が出る

音が出てビックリしたりする。

2012/06/14追記

Ruby でWindowsサウンドを片っ端から再生してみた

 Dir.glob("/cygdrive/c/Windows/Media/*.wav").each{|e| puts e ;d=open("/dev/dsp","w"); open(e){|f|while(c=f.getc)do d.putc(c);  end };}

参考

Cygwinが提供する/dev/ファイルについて

/dev ファイルシステムと /proc ファイルシステム

/devで音が出せるって

CからLinuxシステムコールを使って音を出す
まずは音を出してみよう