プログラム

火曜のレポート

CASLで書けという部分があるんだけど念のために書く

火曜のやつ

とりあえず全部できた。ソース汚いけど、さらりと流す。まとめと言うことで今までのも載せる。ちょっとだけ変えてあるやつもある。

火曜のやつ

uptoよ。やばくなったらここみんしゃい。ただ、まだ4.の(1)はやってない(面倒臭いから)。

Wave file formatの部分

public static void putbyte(int x, int n) { byte[] bit = new byte[n]; for (int i = 0; i < n; i++) bit[i] = (byte)0; for (int i = 0; i < n; i++) bit[i] = (byte)((x >> (8 * i)) % 256); System.out.write(bit, 0, n); }これで例えば putbyte(16, 4)…

Waveファイルが鳴った

ありがとkuri.でも、「ファイルよこせ」とか辛辣。

Waveファイルが何でかできね

音が鳴らない。どないしようねこれ。

WAVEファイルをパソ様に作らせる

file formatはクリア。作成できたファイルはちゃんと動きました。問題は、欄の内容であるnバイトのデータがおかしいことだ。

なんとかencode()は終わった。

あとはdecode()だけど、これは家でやろう。てか簡単だし。要は圧縮されたファイルの始めの1bitを取得して、1か0かで、処理がわかれてる。1なら文字として続く8bitを出力。0なら数字として、続く21bitを適当な処理を施し(ソースに書いてある)、出力。以上。疲…

void putbit0(void)

bit_maskを右論理シフトし、0になれば以下を処理。書き込み用ファイルに、bitbuffer(0)を書き込み、ファイルの最後だったら強制終了。bit_buffer, bit_maskを初期化、codecountを1増やす。

void putbit1(void)

bit_buffer(0)とbit_mask(128)を論理和したものをbit_bufferに格納。bit_maskを右論理シフトし、0になれば以下を処理。書き込み用ファイルに、bit_bufferを書き込み、ファイルの最後だったら、強制終了。bit_buffer, bit_maskを初期化、codecountを1増や…

void output2(int x, int y)

putbit0()を処理する。 初期化 maskに2048(100000000000)を設定。 maskを右論理シフトし0になるまで、以下をループ。(1)もし、xとmaskの論理積が0以外であれば、putbit1()を処理。 0であればputbit0()を処理。(1)のループ終了。ループは11回回る(戻…

void output1(int c)

putbit1()を処理する。 初期化 maskに256(100000000)を設定。 maskを右論理シフトし0になるまで、以下をループ。(1)もし、引数のcとmaskとの論理積が0以外であれば、putbit1()を処理。 0であればputbit0()を処理。(1)のループ終了。ループは8回回る…

void encode(void)のアバウト解釈

一致した最初の文字の位置と一致した文字列の長さを取得。 配列の更新。 大まかにこんな感じ。

void encode(void)

N-F=2048-17=2031なので0〜2030までスペースを流し込む。2031〜4096まで読み込み用ファイルから、配列に流し込み流し込んだ文字の数をtextcountに格納。 初期設定 最後に流し込んだ文字が格納されている配列の添字をbufferendに設定。 rを2031と設定。 sを0…

int main(int argc, char *argv[])

コマンドライン引数により入力。第一引数がe, Eであれば encode() が動き d, Dであれば decode() が動く。第二引数で指定したファイルを読み込み用として開く。第三引数で指定したファイルを書き込み用として開く。最後に開いたファイルを閉じる。

WAVE file formatに悪戦苦闘してみる

Systemクラスのwrite()メソッドを使ってみる。 System.out.write(byte[] buff, int index, int byte)buffの内容をindexからbyteバイト分出力する。これで例えば byte[] buff = {16, 0, 0, 0}; System.out.write(buff, 0, 4);とすればbuffの内容を最初から4バ…

file formatをまとめてみる

(数値は全て16進表記であり、little endianである) バイト データ 備考 4バイト "RIFF" 4バイト これ以下のバイト数 ファイルサイズ - 8 8バイト "WAVEfmt " tの後にスペースあり 4バイト WAVEfmt欄のバイト数 常に 16 (10 00 00 00) 2バイト データ形式 P…

WAVEファイルをコンピュータに作らせる

前途多難。

ちなみにfile formatの部分がこうなったよ?

我ながら無茶が多い。

実行してみるもファイル動かず・・・

ファイルを再生できません。プレーヤーがそのファイルの種類をサポートしていないか、そのファイルの圧縮に使用したコーデックをサポートしていない可能性があります。 と言われる。疲れた。

それとなくできたっぽい

import java.util.*; public class Wave{ static final int max = 44100; static int counter = 0, filesize = 0; static String[] wave = {"RIFF", "WAVEfmt ", "data"}; static byte[][] fmt = {{0x10,0,0,0}, {0x01, 0}, {0x02, 0}, {0x44, (byte)0xAC, 0…

こんな感じなのかな

実行結果はこうなったまだ音の方のデータが作ってないので、「これ以下のバイト数」とかが抜けているが、他は1byteで表示できているのでOKなのではないかと思われ。とりあえずデータ作ってみない事には・・・。

Dijkstraのやつ

もういいやって感じで提出。今はそんなにかまってあげられる時間がない。

月曜の課題を済ませたい

まだ出してないんだよね、ダイクストラの最短経路問題のやつ。出力結果を面白くするにはどうすればいいかな・・・。どこからどこまで行きたいのか聞いて、距離や時間など、複数の結果を表示させるといいかな。まぁ、やってみよう。

実験結果。

text: 27 bytes code: 11 bytes (40%)・・・。だからなんでこんな微妙にずれるの?orz

もうちょっと規模を大きくして考えよう。

データ:0123401230123401230123401238(bit)×27(文字)=216bit(27byte) フラグ 文字 戻る距離 取り出す長さ 0 0 0 1 0 2 0 3 0 4 1 5 4 1 9 15 1 24 3 取り出せる長さを15文字と設定したので、最後らへんでちょっとあぶれちゃってます。何か勿体無いな。(1+8)…

さっそく実験してみる。

先生のプログラムをお借りしてやってみた。結果。 text: 10 bytes code: 7 bytes (70%)んん?何か微妙な誤差が・・・。なんで7byteになってるの?先生も確か戻る距離は12bit、取り出す長さは4bitとしてたはずなのに。・・・。6.625byteを四捨五入して7byteに…

とりあえずアルゴリズムを学ぶ

まず、圧縮するデータを準備しよう。1231231234でいいかな。このデータは1文字が8bitなので8(bit)×10(文字)=80bit(10byte)で、LZSSの考え方に沿って次の表が作成できた。(フラグは、今見ている1個のデータが文字であるか数値であるかのフラグ。0→文字、1→数…

明日締め切りの課題

LZSSのプログラム書くか、手書きでアルゴリズムを理解するか、どっちか。・・・後者になりそうだ。

ダイクストラの最短路問題。その2

上のプログラムなんだけど、一応コマンドライン引数にしてみた。これで、重みのベクトルの行と列の数を指定できるようにした。で、引数に10000以上の数を指定すると、Integer.MAX_VALUEになるようにした。コメントアウトしてる部分を貼り付けてエンター押せ…