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/.

Członek DUG


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


wieczny student



gratuluję nieprzeciętnej wyobraźni :)
Sory, ale ten pomysł rozśmieszył mnie bardziej niż większość kawałów przeczytanych na tym forum.
Offline






Admin łajza







kiedyś widziałem program, który grał melodyjkę na stacji dyskietek, ale nie mogę go teraz znaleźć ;)
Offline

Członek DUG


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


Członek DUG
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

Członek DUG


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






Admin łajza







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

Członek DUG


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

Członek DUG


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



Członek DUG




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


Członek DUG



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



Członek DUG

Członek DUG


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



Członek DUG




harry666t, nie kumam co mam zrobić, beep oczywiście mam instalnięty.
Offline


były zielony_83 :)
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

Członek DUG


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



Członek DUG




Aaaaa to ttrzba w klawiature pstrykać no ale i tak mi nie dzwięczy.
Offline

Członek DUG


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



Członek DUG




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

Członek DUG


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

Członek DUG


jest coś podobnego już w necie i bardziej zaawansowane
http://www.linux.com.pl/forum/index.php?t=msg&g … 262&rid=0
Offline

Członek DUG


ł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