Eukleides project

from http://d.hatena.ne.jp/u5_h/

(WIN32API、システム関連)waveプレーヤー

今回は関数だけは参考にしました。そして他の部分である再生の処理に
アラームを組み込み再生時間後に終了処理をするように制御した。そのため再生中に停止もできる設計。
//■コンパイル方法
//gcc m1.c -o m1 -lwinmm
//
//■実行
//input file name>sample.wav
//sample.wav再生中
//再生時間 280秒
//停止する場合はsを押してください>
//
//■説明
//曲が終わると5秒後に終了
//再生中にsを押すとstopする
//■ソース
#include
#include
#include
#include
#include
#include
#include

int InitMciDev(char* wav_file);
void TermMciDev();
int PlayMciDev();
int MCILength();

jmp_buf stack;

void timeout( int n )
{
longjmp( stack, 1 );
}



int main()
{
int len;
char file[25];
char msg[1];
printf("input file name>");
scanf("%s",file);
if(InitMciDev(file))
{
printf("failed device opened \n");
return -1;
}

len=MCILength();
if(len<= 0)
{
printf("failed to get time \n");
}

if(!setjmp(stack))
{
if(PlayMciDev())
{
printf("play error\n");
return -1;
}

printf("%s再生中\n",file);
printf("再生時間 %d秒\n",len);
printf("停止する場合はsを押してください> ");

signal( SIGALRM, timeout );
len+=5;
alarm(len);
scanf("%s",msg);
if(!strcmp("s",msg))
TermMciDev();
alarm(0);
}
else
{
TermMciDev();
printf("\n");
}
return 0;
}

//fileopen

int InitMciDev(char* wav_file)
{
char cmd[256];
memset(cmd,0,sizeof(char)*256);
sprintf(cmd,"open %s type waveaudio alias wav1",wav_file);
return mciSendString(cmd,NULL,0,0);
}
//colse dev
void TermMciDev()
{
mciSendString("stop wav1",NULL,0,0);
}
//play
int PlayMciDev()
{
return mciSendString("play wav1",NULL,0,0);
}
//time get
int MCILength()
{
int ret;
char status[30];
mciSendString("set wav1 time format milliseconds",NULL,0,0);
ret = mciSendString("status wav1 length",status,30,0);
if(ret) return 0;
return atoi(status)/1000;
}