Cygwinで課題を行う場合

Cygwinは,WindowsにおいてLinuxのような環境を提供するソフトウェアです.インストールすることで,gccやsoxをWindowsで使うことが出来ます.また,ls,pwd,mvというLinuxでのコマンドも使用することが可能です.これによって課題をWindowsで(部分的に)行うことが可能となります.なお,WSL(Windows Subsystems on Linux)ではsoxが動かないため課題はできません.

インストール

1.まず,Cygwinのセットアップファイルをダウンロードします(Cygwinの公式サイト).

2.ダウンロードしたファイルsetup-x86_64.exeを実行します.デフォルトではgcc, gdbなどの課題で使うプログラムはインストールされないため,これらをSelect packageの画面で指定します.

3.gccは左上のsearchにgccと打ち込んで(下図赤枠),以下の左図スクリーンショットにあるように,「gcc-core」をインストール指定します.その際,下図赤枠のところを,pendingからfullにしてください.インストール指定は,Skipと書いてあるところの▼をクリックすることで可能です(図はクリックで拡大).

4.gdbも同様に,searchにgdbと打ち込んで,「gdb」をインストール指定します. ncも同様に,serachにncと打ち込んで,「nc」をインストール指定します.soxも同様に,searchにsoxと打ち込んで,「sox」をインストール指定します.

5.これで,インストール指定は完了で,「次へ」を押してインストールしてください.

6.一回目の起動には多少時間がかかるので注意してください.

7.ほかに必要なプログラムで後から導入する場合は,先ほどのsetup-x86_64.exeを再度クリックして同じ操作を繰り返すと,後から追加できます.

CygwinとLinux, Mac OSでの振る舞いの違い

Cygwinの実行形式はWindowsでのexe形式となるため,実行する場合は少し異なります.例えば

gcc test.c

とした場合の出力はa.exeとなるため,実行するためには

./a.exe

と打つ必要があります.Windowsでは,実行形式の拡張子はexeが一般的です.そのため,出力ファイル名を指定する場合

gcc -o test.exe test.c

というように,exeを付けた名前を指定します.

CygwinでのIP調査

Cygwinではifconfigがないので,private IPを調べる方法が違います.Cygwinでは

ipconfig

と打つことでIPを調べることができます.下図の赤線のIPがprivate IPになります.ただ,自分のみで課題を行う場合は,127.0.0.1とすれば,自動的に自分のprivate IPになります.

CygwinでのSox

Cygwinでsoxを利用するには,まず最初に以下のコマンドを打つ必要があります.

set AUDIODRIVER=wavaudio 

これを指定しないとrecなどが使えません.なお,これでは途中で録音が止まるなどの問題が起こる場合があるようです(slackのここを参照).この場合は

export AUDIODRIVER=waveaudio

としてください(waveaudioのeを忘れずに).

以降の使用方法は,基本的にUbuntuと一緒です.録音再生は

rec test.wav
play test.wav

などです.ただ,CygwinでのSoxは制限があり,同時に二個以上立ち上がらないようです.インターネット電話の実装では二個以上のsoxを立ち上げる必要があります.そこで,本課題をCygwinで行う際には以下でOKとします.

  • 音声ファイルをserv_sendで送る
  • client_recvで音声ファイルを受け取り,それをsoxで再生する

具体的には,

rec -t raw -b 16 -c 1 -e s -r 44100 sound.raw

でsound.rawに録音します.それをsend_servで自分のIPに送り,soxで再生します.ターミナルを二つ立ち上げてください.それらをターミナル1,ターミナル2とします.まず,ターミナル1で以下を入力してください.

./serv_send ポート番号 < sound.raw

次にターミナル2で以下を入力してください.

./client_recv 127.0.0.1 ポート番号 | play -t raw -b 16 -c 1 -e s -r 44100 -

なお,終了させるにはCTRL+Cで終わらせます.

もちろん,逆でも構いません.つまり

  • soxで録音している音声をserv_sendで送る
  • client_recvで音声データを受け取り,それをファイルに出力する

具体的にはターミナル1で以下を入力してください.

rec -t raw -b 16 -c 1 -e s -r 44100 - | ./serv_send ポート番号

次にターミナル2で以下を入力してください.

./client_recv 127.0.0.1 ポート番号 > sound.raw

なお,終了させるにはCTRL+Cで終わらせます.このsound.rawを再生するには

play -b 16 -c 1 -e s -r 44100 sound.raw

もし,二台以上のPCを所有している場合は,一方通行のインターネット電話はCygwinでも実装することができます.