Windows > BeepSong

Premier! Beepsong windowson. :D
Azaz dolgoztassuk a beephangszórót :D.

runanydll.exe

play_song_list.bat:


@echo off
for /F "tokens=1,2 delims= " %%i in (song_list.txt) do (
REM @echo %%i %%j
runanydll.exe kernel32.dll Beep UINT %%i UINT %%j
)

song_list.txt:


659 120  #  Treble E
622 120  #  Treble D#
659 120  #  Treble E
622 120  #  Treble D#
659 120  #  Treble E
94 120   #  Treble B
587 120  #  Treble D
523 120  #  Treble C
440 120  #  Treble A
262 120  #  Middle C
330 120  #  Treble E
440 120  #  Treble A
494 120  #  Treble B
330 120  #  Treble E
415 120  #  Treble G#
494 120  #  Treble B
523 120  #  Treble C
330 120  #  Treble E
659 120  #  Treble E
622 120  #  Treble D#
659 120  #  Treble E
622 120  #  Treble D#
659 120  #  Treble E
494 120  #  Treble B
587 120  #  Treble D
523 120  #  Treble C
440 120  #  Treble A
262 120  #  Middle C
330 120  #  Treble E
440 120  #  Treble A
494 120  #  Treble B
330 120  #  Treble E
523 120  #  Treble C
494 120  #  Treble B
440 120  #  Treble A

Ötlet innen lopva: http://debianforum.de/forum/viewtopic.php?f=28&t=103335&start=0
Frekvenciák: http://www.flutepage.de/deutsch/goodies/frequenz.shtml

Runanydll és bat nélküli lejátszás

Vigyázat! Nagyon ronda kód!

beepsong.c:


#include < windows.h >
#include < stdio.h >
typedef struct {
		int f;
		int l;	
}hang;

hang linedecoder(char * line){
	hang h1;
	int isnumber;
	int i=0;
	char f[10];
	char l[10];
	int step=0;
	int j=0;
  
	do{
		
	isnumber=(47 < line[i] && line[i] < 58)? 1 : 0;	// [0-9]+
	f[i]=line[i];
	if(!isnumber)f[i]='\0';
	i++;
	}while(isnumber);
	
	do{
		
	isnumber=(47 < line[i] && line[i] < 58)? 1 : 0;	// [0-9]+
	l[j]=line[i];
	if(!isnumber)l[j]='\0';
	i++;
	j++;
	}while(isnumber);
	
	//printf("%s %s", f, l);
	
	
	
	h1.f=atoi(f);
	h1.l=atoi(l);
	return h1;
}

int beep_file(char * filename){
	FILE * file;
	char line[100];
	hang h2 ;
	
	file = fopen(filename, "r");
	if (file==NULL) return -1;
	
	while(fgets(line, 100, file)){
	// vagy ujsorig, vagy az elso 100 bajtig olvas
	
	  h2=linedecoder(line);
	  //printf(" %s ", line);
	  printf("[+] f:%d h:%d\n", h2.f, h2.l);
	  Beep(h2.f, h2.l);
	  

	}
	fclose(file);
	return 1;
}
int main(int argc, char * argv[]){
	char * fname = "song_list.txt";
	beep_file(fname);
}

Hozzászólások

Hoppá, akkor már meg is van, hogy fogom portolni a linuxos speekeres lylipond lejátszómat windowsra. :)
Egyébként ahogy nézem kb. ugyanezt akarják megcsinálni ők is (mármint a linuxosat).
Na majd közzéteszem, olyan 1 hét múlva, mivel az otthoni gépen van.

Jó lenne beüzemelni rundll32-vel, hogy ne kelljen hozza 3d party app.

while read -sn1 p;do s="";for((i=0;i<$p;i++));do s=x$s;done; yes $s > /dev/audio&sleep 0.1;kill %%;done

szerk.: 0-9ig a gombok :)
:D