©2007 by T.IZUMI

いずみ研 Cプログラミング練習課題

WAV音声をハンドルするプログラム


課題0

Windows サウンドレコーダー(Start Menu → プログラム → アクセサリ → エンターテイメント) で自分の歌声を録音&再生してみよ。wav 形式で保存せよ。

Windows Media Player で Wav ファイルを再生させて、波形を確認せよ(タイトルバー右クリック → 表示 → 視覚エフェクト → バーとウェーブ → スコープ)。周波数成分を確認せよ。(同 → 海の霧)

課題1

WAVファイルを読み込んで、音の大きさを半分にして出力するプログラムを書け。

課題2

ステレオのWAVファイルを読み込んで、モノラルにして出力するプログラムを書け。

課題3

WAVファイルを読み込んで倍速にして出力するプログラムを書け。サンプリング周波数は変更せずにデータ間引きで実現すること。

例: 変換前変換後

課題4

WAVファイルを読み込んで時間は半分なんだけど音の高さは変わらない、そんな変換をして出力するプログラムを書け。

例: 変換前変換後


テスト用データ

立命館大学歌
立命館大学歌の冒頭、人による歌唱
test-orig.wav
PCM, 16bit, monoral, 44.1kHz, 917504samples, 1.8Mbytes, 20sec
ステレオ→モノラル変換のテストデータ
作為的に構成した意地悪データ。左右正相、右のみ、左のみ、左右逆相の4音。 これはうまく扱えなくても良い。
trickyexample-stereo2mono.wav
PCM, 16bit, stereo, 44.1kHz, 352800samples, 1.4Mbytes, 8sec
単純正弦波の和音
ch0: 周期512/3=171サンプルの sin と周期512/7=73サンプルのcos
ch1: 周期512/5=102サンプルの sin と周期512/9=57サンプルのcos
フーリエ変換後は相当する場所にピークがでる。 ブロックサイズ 4096 なら ch0 の +24 虚部にプラス、-24(4072) 虚部にマイナス、 +56 実部にプラス、-56(4040) 実部にプラス、 ch1 の +40 虚部にプラス、-40(4056) 虚部にマイナス、 +72 実部にプラス、-72(4024) 実部にプラス。
test-16-s3c7-s5c9.wav
PCM, 16bit, stereo, 44.1kHz, 65536samples, 256Kbytes, 1.5sec
test-16-s3c7.wav
PCM, 16bit, monoral, 44.1kHz, 65536samples, 128Kbytes, 1.5sec
test-08-s3c7-s5c9.wav
PCM, 8bit, stereo, 44.1kHz, 65536samples, 128Kbytes, 1.5sec
test-08-s3c7.wav
PCM, 8bit, monoral, 44.1kHz, 65536samples, 64Kbytes, 1.5sec
test-16-s3c7-s5c9-freq.txt
参考までにフーリエ変換後の生データの例
数値確認用データ
16/8bit, monoral/stereo のデータ形式が正しく読めているかどうか確認するためのデータ。 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7 が繰り返し並んでいるだけ。 それぞれ読み込んだときに次のような値になっているか確認すること。 ※恐らく音は鳴らない。プログラム中で printf するなどして確認する。
test-triv-16s.wav
PCM, 16bit, stereo, 44.1kHz, 16384samples, 64Kbytes
0ch = {-15936, -14908, -15936, -14908, …の繰り返し… }
1ch = {-15422, -14394, -15422, -14394, …の繰り返し… }
test-triv-16m.wav
PCM, 16bit, monoral, 44.1kHz, 32768samples, 64Kbytes
0ch = {-15936, -15422, -14908, -14394, -15936, -15422, -14908, -14394, …の繰り返し… }
1ch = なし
test-triv-08s.wav
PCM, 8bit, stereo, 44.1kHz, 32768samples, 64Kbytes
0ch = {192, 194, 196, 198, 192, 194, 196, 198, …の繰り返し… }
1ch = {193, 195, 197, 199, 193, 195, 197, 199, …の繰り返し… }
test-triv-08m.wav
PCM, 8bit, monoral, 44.1kHz, 65536samples, 64Kbytes
0ch = {192, 193, 194, 195, 196, 197, 198, 199, 192, 193, 194, 195, 196, 197, 198, 199, …の繰り返し… }
1ch = なし
単純正弦波のデータ
wav ファイルではないが、フーリエ変換等周波数操作の基本的確認のための生データ。
cos56sin24.txt 4096サンプル、周波数56のcosと周波数24のsinの和の数列
real56imag24.txt 4096サンプル、上記に対応する周波数データの複素数列

tips


参考

泉の参考プログラムと結果
泉 知論立命館大学 理工学部 電子情報デザイン学科
戻る