Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!
Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.
zrobiłem coś takiego:
#include <ncurses.h> #include <cstdlib> int main () { WINDOW* mainwin = initscr(); halfdelay(1); keypad(stdscr, true); noecho(); int ch = 0; while ( ch != 'q' ) { ch = getch(); //ZsXdC VgBhNjM // p = 69 + 12 * log2(f / 440) // 261,6 277,2 293,7 311,1 329,5 349,2 370,0 392,0 415,3 440,0 466,2 493,9 523,2 switch (ch) { case 'z': //69, aka A system("beep -l 50 -f 262"); break; case 'x': system("beep -l 50 -f 294"); break; case 'c': system("beep -l 50 -f 330"); break; case 'v': system("beep -l 50 -f 350"); break; case 'b': system("beep -l 50 -f 392"); break; case 'n': system("beep -l 50 -f 440"); break; case 'm': system("beep -l 50 -f 494"); break; case ',': system("beep -l 50 -f 523"); break; case 's': system("beep -l 50 -f 277"); break; case 'd': system("beep -l 50 -f 311"); break; case 'g': system("beep -l 50 -f 370"); break; case 'h': system("beep -l 50 -f 415"); break; case 'j': system("beep -l 50 -f 466"); break; } } endwin(); return 0; }
$ g++ -lncurses -o a.out beepator.cpp
pomysł: rozbić program na klienta i serwer, serwery poinstalować na kilku maszynach w lanie, klient niech połączy się ze wszystkimi naraz, i mamy orkiestrę z PC-speakerów :D
Offline
gratuluję nieprzeciętnej wyobraźni :)
Sory, ale ten pomysł rozśmieszył mnie bardziej niż większość kawałów przeczytanych na tym forum.
Offline
kiedyś widziałem program, który grał melodyjkę na stacji dyskietek, ale nie mogę go teraz znaleźć ;)
Offline
program ma jedną małą wadę... pograsz sobie na tym kilka minut a tu nagle /var/log/account/pacct ma kilkadziesiąt mb :P
generalnie forkuje procesy jak szalony. tworzenie wersji sieciowej chyba zacznę od sklejenia beep i beepator w jeden program.
(mówię cały czas poważnie! xD)
Offline
buehehehe zsynchronizuje czas z czasem na serwerze w kafejce i walne to do crona :D i co godzine bede patrzył na ich miny jak wszystkie kompy zaczną grać
DOBRE! :D:DD:
Offline
wstrzymaj swoje bity, już pracuję nad inteligentniejszą wersją, fuzją beep i beepator. część kodu beep jest już przeniesiona, ale praca idzie nadzwyczaj powoli -> w okienku obok gram w tetrisa xD
gdy wyjdzie beepator 0.2, nadejdzie czas na DPSO, czyli Distributed PC-Speaker Orchestra :D
Offline
kiedyś widziałem program, który grał melodyjkę na stacji dyskietek, ale nie mogę go teraz znaleźć ;)
znalazłem! :D
diskplay.zip
Stworzony na szybko odtwarzacz melodyjek na stacji dyskietek. Po włożeniu dyskietki do stacji manipuluje głowicą w rytm melodii Alphaville - Big in Japan. Póki co nie umie odtwarzać mp3, mimo ze algorytm mniej więcej mam już opracowany ;) Może kiedyś...
Offline
kurde, będę musiał poszukać jakiegoś napędu flopa i to obczaić :]
<zastanawia się nad wykorzystaniem napędu dyskietek w charakterze sekcji basowej>
tymczasem prace nad beepatorem 0.2 idą do przodu. myślę że jeszcze dziś wrzucę w tym temacie 0.2RC1 xD
Offline
diskplay.zip
Stworzony na szybko odtwarzacz melodyjek na stacji dyskietek. Po włożeniu dyskietki do stacji manipuluje głowicą w rytm melodii Alphaville - Big in Japan. Póki co nie umie odtwarzać mp3, mimo ze algorytm mniej więcej mam już opracowany ;) Może kiedyś...
Albo ja nie mam wyczucia rytmu bo dla mnie to chaotyczne pierdzenie, żadnej melodii nie wychwyciłem ;)
PS. A co trzeba zrobić żeby ten beepator beepał bo mi nie beepa?
Offline
Zastrzele Was moim pytaniem jak to odpalić? :]
s$ g++ -lncurses -o a.out beepator.cpp beepator.cpp:63:2: warning: no newline at end of file
powstał plik a.out, uruchamiam go ale nic sie nie dzieje.
Z tego co pamietam to za pcspeaker chyba jakis moduł był odpowiedzialny
Offline
kiedyś widziałem program, który grał melodyjkę na stacji dyskietek, ale nie mogę go teraz znaleźć ;)
znalazłem! :D
diskplay.zip
Stworzony na szybko odtwarzacz melodyjek na stacji dyskietek. Po włożeniu dyskietki do stacji manipuluje głowicą w rytm melodii Alphaville - Big in Japan. Póki co nie umie odtwarzać mp3, mimo ze algorytm mniej więcej mam już opracowany ;) Może kiedyś...
a ja kurczaki pieczone ściągnąłem ten programik, chce sobie go sprawdzić, a tu zonk:
w całej chacie nie mam dyskietki :P
a przewaliłem co mogłem do góry nogami :)
eeech....
ale ta technika poszła do przodu ;)
pozdrawiam
miłosz
Offline
Zastrzele Was moim pytaniem jak to odpalić? :]
Kod:
s$ g++ -lncurses -o a.out beepator.cpp beepator.cpp:63:2: warning: no newline at end of filepowstał plik a.out, uruchamiam go ale nic sie nie dzieje.
Z tego co pamietam to za pcspeaker chyba jakis moduł był odpowiedzialny
Use the source, Luke...
Z = c1
s = cis1
X = d1
d = dis1
C = e1
V = f1
g = fis1
B = g1
h = gis1
N = a1 (440 hz, kamerton)
j = b1 (nie "zachodnie" b, inaczej a#)
M = h1 ("zachodnie" b)
, = c2 - oktawę wyżej od c1
poza tym musisz mieć zainstalowaną paczkę beep:
# apt-get install beep
gdy debconf zapyta o suid, odpowiedz koniecznie tak, chyba że beepatora też chcesz uruchamiać jako root :P
generalnie obecna implementacja ssie. jak już wspominałem prace nad inteligentniejszą wersją idą pełną parą.
kto chce sobie pograć, oto kilka kawałków:
nie wiem jak to się nazywa ale jest prześmiesznie proste :P
zzbbnnbvvccxxz bbvvccx bbvvccx zzbbnnbvvccxxz
judas priest - breaking the law (wiemy już od czego halfordowi wypadły włosy :P)
nmknmknmk vbnvbnbkmn
metallica - master of puppets (dość ciężko to zagrać, i lekko zmieniłem tonację by "wskoczyć" w zakres beepatora)
(minus oznacza dłuższy dźwięk - musimy na razie go sobie wyobrazić, bo wszystkie nuty i tak mają długość 50 ms)
(intro) z m-- j-- n-- zz,zzkzz m-- j-- n-- zzhzzbzzgzvzczdzxz zz,zzkzz m-- j-- n-- zzhzzbzzgzvzczdzxz (i tak parę razy) (teraz fajny moment, przed-zwrotka) zsbzshzsnzshzsbb zsbzshzsnzshzsb-- zsbzshzsnzshzsbb zsbzshzs dxzdxzdxdxzdxzdx (ten fragment wymyka się skali) z-- zzzzzzzz dvgvdv z-- zzzzz dvdv (i tak parę razy) (potem to samo ale o dwa półtony wyżej) (przed-refren, lekko zmieniony, wyrzucone wstawki solowe (wymykają się skali... ;/ a zkoda, bo są świetne)) ,- ,,m, bbbhb nnnmb (jeszcze dwa razy) ,- ,,m, bbbnb (tutaj musiałem znów wyrzucić kawałek >:|) (i refren!) z- z- (mas-ter!) s- s- ((mas-ter!)) z-- zzz x- zz d-- (master of puppets i'm pulling your strings) h-- vvv b- vv v-- (twisting your mind and smashing your dreams) j-- vvv h- vv b-- (blinded by me you can't see a thing) ,-- vvv j- vv h- (just call my name 'cause i'll hear you scream) z- z- (mas-ter!) s- s- ((mas-ter!)) z-- zzz x- zz h-- (just call my name 'cause i'll hear you scream) z- z- (mas-ter!) s- s- ((mas-ter!)) (znów przed-zwrotka, zwrotka, przed-refren i refren, a po refrenie solówka, solówka, interlude, zwrotka, przed-refren, refren, i śliczne wyjście :D)
m.o.p. to kawał drania, lepiej grać to na gitarze ;] nie jestem pewien czy gdzieś nie popełniłem błędu, ale jak ktoś zna kawałek i wyczai tempo to pójdzie z górki :D
Offline
harry666t, nie kumam co mam zrobić, beep oczywiście mam instalnięty.
Offline
odpalasz a.out na przykład tak ./a.out
i klepiesz w klawisze poszczególne odpowiadają za różne dźwięki.
Klawiszologie masz wyżej.
Offline
ha, nowa wersja korzysta już ze starego dobrego Makefile :) to powinno ułatwić kompilację.
0.18 na razie kompiluje się bez przeszkód (aczkolwiek nie wiem co to może być:
beepator.cpp: In function 'int dobeep(unsigned int)': beepator.cpp:104: warning: control reaches end of non-void function
)
kod jest tutaj:
inline int dobeep ( unsigned int freq ) { if ( freq == 0 ) return 0; /* try to snag the console */ if((console_fd = open("/dev/console", O_WRONLY)) == -1) { // fprintf(stderr, "Could not open /dev/console for writing.n"); // printf("a"); /* Output the only beep we can, in an effort to fall back on usefulness */ perror("open"); /* sry but wtf is perror()? */ return 1; } /* Beep */ if(ioctl(console_fd, KIOCSOUND, (int)(CLOCK_TICK_RATE/freq)) < 0) { // printf("a"); /* Output the only beep we can, in an effort to fall back on usefulness */ perror("ioctl"); } /* Look ma, I'm not ansi C compatible! */ usleep(1000*50); /* wait... */ ioctl(console_fd, KIOCSOUND, 0); /* stop beep */ close(console_fd); } /* im bardziej wpatruję się w okno emacsa tym silniejsze odnoszę wrażenie, że ta właśnie linia nosi numer 104 */
usunięcie "inline" nic nie daje. może wystarczy zmienić typ funkcji na "void", a błąd zasygnalizować podniesieniem wyjątku?
uwaga, kod ten nie jest już w public domain. część tutaj zaprezentowana jest objęta GNU GPL (autor programu beep nie sprecyzował wersji, więc przyjmujemy "druga lub wyższa").
cholera mnie wie czy na koniec nie zrobię z tego paczki debianowej, + debconf żeby ustawić suid root podczas instalacji.
ponadto mam mały problem, jakiś bug czy co. aktualnie tylko X wydaje jakiś dźwięk, ale to chyba związane jest z niezbyt trafnym sposobem tłumaczenia klawiszy na częstotliwości. wydanie stabilnej 0.2 trochę się odwlecze...
w przygotowaniu jest też strona manuala... ech, coś mi mówi że właśnie kończy się etap "patrzcie, taki śmieszny kawałek kodu tu mam :)", a zaczyna się "prawdopodobnie masz złą wersję glibc lub nie zainstalowałeś najnowszych nagłówków jądra"...
taki los :P
Offline
Aaaaa to ttrzba w klawiature pstrykać no ale i tak mi nie dzwięczy.
Offline
sprawdź czy:
1.
$ beep
wydaje jakiś dźwięk
2. jeśli nie, czy /usr/bin/beep ma ustawiony suid root. powinien mieć.
3. jeśli ma suid a nadal nic nie słychać, czy nie wywaliłeś modułu kernela odpowiedzialnego za pc speaker
4. czy nie masz jakiegoś aliasa o nazwie beep czy innej aplikacji o tej nazwie (np. w /usr/local/bin/ czy ~/bin/)
5. w osobnym xtermie patrz (najlepiej htopem w trybie drzewa) jednym okiem czy beepator forkuje jakieś procesy podczas grania
6. czy pc speaker wogóle kiedykolwiek wydaje jakiekolwiek dźwięki
7. cierpliwie poczekaj, dziś powinna być wersja 0.2 >_< prawie działa, tylko nadal nie słychać żądanego dźwięku... pracujemy nad tym
Offline
Uprawnienia są takie
rwsr-x-r--
beep nie piszczy, nie wiem jak sie nazywa ten moduł odpowiedzialny za ta ale jak znam zyci epenwie go nie wkompilowalem:-/
Po odpaleniu program znajduje sie na liscie procesów.
Offline
http://freeshells.ch/~bsah/downloads/beepator-0.2.tar.gz
oto i beepator w wersji 0.2. miałem niewiele czasu w weekend i dlatego z takim właśnie opóźnieniem, no i w dodatku łączenie beep z beepatorem to dość partańska robota. nie działają żadne cmdline argumenty, nawet --help, nie ma nadal żadnego UI (mimo iż używa ncurses, które obok aalib są jedną z najlepszych bibliotek "graficznych" pod konsolę), w sumie jedyne zmiany to makefile i - od strony technicznej - bezpośrednie wykorzystywanie sprzętu (co wymaga uprawnień roota). ale był to krok konieczny ;]
=====================
ficzersy planowane na wersję 0.3: eliminacja wszystkich wymienionych przypadłości z wersji 0.2 (brak ui i podstawowych choćby argumentów cmdline), dodanie strony manuala.
wersja 0.4 powinna zostać rozbita na beepator i beepd. beepator nie będzie już wymagał roota, zaś beepd tak. ponadto oba powinny gadać ze sobą po sockecie. być może jeden beepator będzie mógł łączyć się z kilkoma beepd na różnych kompach. beepd powinien przyjmować połączenia na porcie 440 (standardowa częstotliwość PC speakera ;] skoro już i tak musi mieć uprawnienia roota to czemu ma nie skorzystać z portu <1024). ze względów bezpieczeństwa absolutnie odradziłbym odpalania beepd na cennych maszynach (a szczególnie tych z zewnętrznym ip). nigdy nie programowałem bezpośrednio na socketach bsd, jeśli ktoś mógłby być moim przewodnikiem w dżungli, byłbym wdzięczny za wszelką pomoc :P
termin wydania następnej wersji: jak będzie to będzie.
Offline
jest coś podobnego już w necie i bardziej zaawansowane
http://www.linux.com.pl/forum/index.php?t=msg&g … 262&rid=0
Offline
ładne, tylko że
1. trzeba się chwilkę pomęczyć z usuwaniem końcówki którą httpd dokleja pod koniec pliku ;]
2. nie działa pod pseudo terminalem, a jedynie pod tty. zapewne kwestia poprawienia jakiegoś buga, bo u mnie działa tak i tak (ale dla odmiany tylko gdy ma się roota).
3. mój projekt ma inny cel - umożliwienie grania na wielu pc speakerach jednocześnie. ;p
4. docelowo rozważam zrobienie klienta pod Xy wykorzystującego do przechwytywania klawiatury libsdl. w praktyce umożliwi to niezwykle precyzyjną (w porównaniu z konsolą) regulację długości trwania nutki oraz umożliwi polifonię (na tyle głosów, na ile mamy kompów :P). klient "inteligentnie" rozdzielałby nutki pomiędzy różne kompy.
5. kto da linka do tutoriala o socketach? :D
Offline