↓を参考に勉強していたのですが・・・
http://www001.upp.so-net.ne.jp/yama-k/c ... cture.html
#include<stdio.h>
int printf_bit(int z,int bit){
int a;
printf(",");
for(a=0;a<8;a++){
printf("%d",!(z&1<<7-a)?0:1);
if(a==bit-1 && a<7)printf("\n,");
else if(a==3)printf(",");
}
return 0;
}
int syncword(long int a){
if(a==0xfff)printf("同期用(12bitすべて\"1\")の値を収納");
else printf("エラー");
printf("\n");
return 0;
}
int ID(int a){
if(a==1)printf("ISO/IEC 11172-3(MPEG Audio規格)");
else printf("エラー");
printf("\n");
return 0;
}
int Layer(int a){
if(a==1)printf("LayerIII(mp3)");
else printf("エラー");
printf("\n");
return 0;
}
int protection_bit(int a){
if(a==0)printf("エラーチェックあり。16bitのCRCエラーチェックを付加");
else if(a==1)printf("エラーチャックなし");
else printf("エラー");
printf("\n");
return 0;
}
int bitrate_index(int a){
switch(a){
case 0:printf("フリービットレート");break;
case 1:printf("32kbps");break;
case 2:printf("40kbps");break;
case 3:printf("48kbps");break;
case 4:printf("56kbps");break;
case 5:printf("64kbps");break;
case 6:printf("80kbps");break;
case 7:printf("96kbps");break;
case 8:printf("112kbps");break;
case 9:printf("128kbps");break;
case 10:printf("160kbps");break;
case 11:printf("192kbps");break;
case 12:printf("224kbps");break;
case 13:printf("256kbps");break;
case 14:printf("320kbps");break;
default:printf("エラー");
}
printf("\n");
return 0;
}
int sampling_frequency(int a){
switch(a){
case 0:printf("44.1kHz");break;
case 1:printf("48kHz");break;
case 2:printf("32kHz");break;
default:printf("エラー");
}
printf("\n");
return 0;
}
int padding_bit(int a){
switch(a){
case 0:printf("パディングビットなし");break;
case 1:printf("パディングビットあり");break;
default:printf("エラー");
}
printf("\n");
return 0;
}
int mode(int a){
switch(a){
case 0:printf("ステレオ");break;
case 1:printf("ジョイントステレオ");break;
case 2:printf("デュアルチャンネル");break;
case 3:printf("モノラル");break;
default:printf("エラー");
}
printf("\n");
return 0;
}
int mode_extension(int a){
switch(a){
case 1:printf("Intensityステレオを適用");break;
case 2:printf("M/Sステレオを適用");break;
case 3:printf("IntensityステレオとM/Sステレオを適用");break;
case 0:printf("どちらも非適用");break;
default:printf("エラー");
}
printf("\n");
return 0;
}
int copyright(int a){
switch(a){
case 0:printf("著作権が保護される");break;
case 1:printf("著作権なし");break;
default:printf("エラー");
}
printf("\n");
return 0;
}
int original_copy(int a){
switch(a){
case 0:printf("コピー");break;
case 1:printf("オリジナル");break;
default:printf("エラー");
}
printf("\n");
return 0;
}
int emphasis(int a){
switch(a){
case 0:printf("エンファシスなし");break;
case 1:printf("50/15us");break;
case 3:printf("CCITT J.17");break;
default:printf("エラー");
}
printf("\n");
return 0;
}
int main_data_begin(int a){
printf("%dByte\n",a);
}
int main(void){
int i,j;
int a,b,c;
FILE *fp;
fp=fopen("C:\\~省略~\\参考資料\\音楽ファイル\\夕陽も沈む.mp3","rb");
for(i=0;i<3;i++)printf("%c",getc(fp));
printf("\n");
for(i=0;i<7;i++){
printf_bit(getc(fp),8);
printf("\n");
}
printf("\n");
//ヘッダ
a=getc(fp);
b=getc(fp);
syncword(a<<4|b>>4);
ID(b&8>>3);
Layer((b>>1)&3);
protection_bit(b&1);
printf("\n");
a=getc(fp);
bitrate_index(a>>4);
sampling_frequency(a&3);
padding_bit(a&1);
a=getc(fp);
mode(a>>6);
mode_extension(a&0x3f>>6);
copyright(a&8>>3);
original_copy(a&4>>2);
emphasis(a&3);
//ここからオーディオデータ
printf("\n");
//ここからわからない
a=getc(fp);
b=getc(fp);
main_data_begin((a<<1)|(b>>7));
fclose(fp);
return 0;
}
オーディオデータというところらしいのですが・・・
そのサイトでは続くとなってますし・・・
その続きを解説しているサイト知りませんか?
(ここで教えていただけても、うれしいのですが・・・まださきが長そうなので。)
オーディオデータからが音楽に関係するとは思うのですが・・・
====
Gu-daraさんの
夕陽も沈む.mp3
を使わせていただいてます。