Jump to content

SUBIECTE NOI
« 1 / 5 »
RSS
Instalatii sanitare

Program de slabire cu succes gara...

Reconditionare cada baie din fonta

Problema imprimanta
 Here goes nothing

BCR sau Raiffeisen

Visual Studio 2022 instaleaza Epi...

Sfat alegere parbriz
 EMAG - recenzii false facute de ei?

Recomandare telefon 900-950

Nivel de trai

Semnal bun da'... prost
 De ce statiile de radio FM nu ren...

Pe unde pot sa gasesc statistici ...

Este reconditionat acest laptop?

Prelungire fire electrice
 

sunet pendula la ora fixa in javascript

- - - - -
  • Please log in to reply
17 replies to this topic

#1
colombo2003

colombo2003

    Senior Member

  • Grup: Senior Members
  • Posts: 6,312
  • Înscris: 16.07.2008
As dori ca la fix sa se auda atatea sunete cate ore sunt. Ca o pendula.

M-am gandit la un for, dar nu functioneaza. Am incercat de asemenea, sa manipulez obiectul audio, si sa folosesc audio.play() si pause(), dar fara rezultat.

function pendula() {
	var Digital=new Date();
	var hours=Digital.getHours();
	var minutes=Digital.getMinutes();
	var seconds=Digital.getSeconds();
	mysound="<audio id='sound' src='../audio/Clock.mp3' autoplay='autoplay'></audio>";
	if (seconds===0) {
	  for (var i=1; i<=hours; i++) {  
	   document.getElementById("pendula").innerHTML=mysound;
	  }
	  setTimeout("pendula()",1000);
	}
   }
   pendula();


E clar ca ceva nu fac bine. Ma poate ajuta cineva?
Multumesc

#2
OriginalCopy

OriginalCopy

    I'm harmful, fear me please! :))

  • Grup: Senior Members
  • Posts: 27,268
  • Înscris: 10.08.2006
Bucla for se executa foarte rapid (dureaza nanosecunde), si tu i-ai dat autoplay, deci toate cele hours instante canta aproximativ simultan, deci nu auzi diferenta.

Trebuie sa adaugi un singur element audio, sa ii dai play, si cand se termina sa ii mai dai replay. Bineinteles trebuie sa salvezi numarul de bucle si sa il decrementezi la fiecare repetitie, si sa te opresti la 0.

Logica ta e buna, insa timingul e gresit.

PS: si in general, faptul ca duplici ceva (aici: tagul audio) e un code smell, mai mereu gresit, si iti va crea probleme mai tarziu - pentru ca daca vrei sa manipulezi ceva, va trebui sa manipulezi in n locuri, in loc de unul. De aceea cauta mereu solutii doar cu un element.

#3
colombo2003

colombo2003

    Senior Member

  • Grup: Senior Members
  • Posts: 6,312
  • Înscris: 16.07.2008
Am pus si un alert, sa vad daca intra pe ramura respective.
N-am reusit mare lucru inca.
Posted Image

#4
OriginalCopy

OriginalCopy

    I'm harmful, fear me please! :))

  • Grup: Senior Members
  • Posts: 27,268
  • Înscris: 10.08.2006
Vino cu codul complet, html si js, postat pe http://codepen.io/

#5
DILAS

DILAS

    Member

  • Grup: Members
  • Posts: 320
  • Înscris: 03.12.2007
nu inteleg exact ce vrei. vrei sa se auda o secventa de sunete consecutiv pt toate orele sau altceva?
ce a zis originalcopy e corect, codul tau se excecuta f rapid si nu are timingul bun. un setTimeout sau setInterval era mai potrivit, desi in genere e considerat bad practice.
Mai da si tu niste detalii de ce vrei exact ca sa te putem ajuta

#6
colombo2003

colombo2003

    Senior Member

  • Grup: Senior Members
  • Posts: 6,312
  • Înscris: 16.07.2008
Voi posta si codul ( inca mai incerc variante.... :) )

Vreau ca la ora 1:00:00 sa se auda un ding-dong. La ora doua, sa se auda de doua ori, la ora trei, de trei ori samd. Exact cum e pendula de perete.

#7
colombo2003

colombo2003

    Senior Member

  • Grup: Senior Members
  • Posts: 6,312
  • Înscris: 16.07.2008
codul; o varianta

#8
pcezar

pcezar

    Member

  • Grup: Members
  • Posts: 818
  • Înscris: 21.08.2005
if (seconds<=hours)  audio.play();
setTimeout("pendula()",1000);

hours+/- ceva ...

Edited by pcezar, 11 March 2016 - 09:58.


#9
DILAS

DILAS

    Member

  • Grup: Members
  • Posts: 320
  • Înscris: 03.12.2007
ai aici un fiddle: https://jsfiddle.net/fq20wtn2/
nu am facut cu audio pt ca n-am lucrat pana acum cu el si nu am timp de reasearch in mom asta, daca nu-ti merge ce incerci, o sa revin cu o varianta updatata;

cateva OBS pe codul tau:
- nu mai pune nume de functii in romana, arata ca naiba;
- la if se pun mereu paranteze ca sa delimiteze blocul, ce ai scris tu s-ar putea sa aiba cazurin cand intra mereu in if, chiar daca expresia se evaluaza ca falsy;
- nu se foloseste nicidiodata setTimeout(string, timer) ci setTimeout(functie, timer) pentru ca in primul caz functioneaza exact ca eval si e vulnerabilitate de securitate;

#10
colombo2003

colombo2003

    Senior Member

  • Grup: Senior Members
  • Posts: 6,312
  • Înscris: 16.07.2008
Multumesc pentru raspunsuri!

@pcezar: e bine, insa, canta de mai putine ori!

Sa fie oare de la faptul ca durata melodiei este mai mare de o secunda (de timpul ei de apelare)?
Adica e ora 15, se aud doar 8 sunete, la secundele impare, iar la cele pare e pauza (si ma gandeam ca de 8 ori sunetul repetat + 7 pauze intre ele = 15)
Am modificat ora si am pus 23. Se aud doar 12 sunete (si cu 11 pause, ar face 23).

Am incercat sa rescriu conditia if ((seconds==0) && (seconds<=hours)), gandindu-ma ca daca intru in pagina, sau dau refresh, si ora este 23 si secundele 15 (15<23) sa nu inceapa sa cante (ca nu e cumva fix). Insa, asa nu se mai aude nimic!!!


@DILAS: asa nu se aude nimic!!!

#11
DILAS

DILAS

    Member

  • Grup: Members
  • Posts: 320
  • Înscris: 03.12.2007
bineinteles ca nu se aude din moment ce nu are cod care sa faca play...pe ala tre sa-l pui tu in loop-up unde e console.log

#12
pcezar

pcezar

    Member

  • Grup: Members
  • Posts: 818
  • Înscris: 21.08.2005
if ((minutes<1) && (seconds<hours*2)  { audio.play(); }
setTimeout( pendula(),1000 );

care este durata Clock.mp3 ? mysound.duration   ...

Edited by pcezar, 11 March 2016 - 21:22.


#13
colombo2003

colombo2003

    Senior Member

  • Grup: Senior Members
  • Posts: 6,312
  • Înscris: 16.07.2008
@pcezar: nu inteleg de ce nu vrea sa-mi afiseze nimic (nici cu echo, nici cu alert, nici cu innerHTML); de fapt se afiseaza NaN (ceea ce inseamna ca nu este initializat? cu toate ca sunetul se aude!!!)
Daca insa dau click dreapta pe fisier, in proprietati, gasesc length: 1,3 secunde.

Acest sunet insa este decupat din ce-am gasit de pe net, ca sa fie un sunet cat de cat, sa vad ca functioneaza, urmand ca mai apoi, sa il inlocuiesc cu ceva care-mi place mai mult.

@DILAS: pai daca e in console.log, nu inseamna ca se afiseaza in consola (ca un fel de alert)? Posted Image  Posted Image Posted Image

PS. Atasat si sunetul actual.

Attached Files



#14
colombo2003

colombo2003

    Senior Member

  • Grup: Senior Members
  • Posts: 6,312
  • Înscris: 16.07.2008
@pcezar: acel 2 de la inmultire vine pentru ca ti-am spus ca sunetul dureaza mai mult de o secunda? Sa inteleg ca daca sunetul ar fi fost de 3 sau 4 secunda, atunci hours ar fi trebuit inmultit cu valoara duratei?

Si daca durata fisierului mp3 ar fi prea mare (exageram acum, sa zicem 10 secunde)? Pentru ore mari (sa zicem 9 sau 11), s-ar depasi durata unui minut! Si atunci ce s-ar intampla?
S-ar repeta sunetul de cate ori ar intra in 60 de secunte (sa zicem 6) si restul (pana la 9 sau 11) nu s-ar mai auzi, pentru ca nu se mai indeplineste conditia cu minute<1? Iar ca sa pui la prima conditie minute<2,iar nu va fi bine, pentru ca atunci, cred ca va canta un ciclu comlet la ora fixa si inca o fractie pana la minutul 2, nu-i asa? Era doar o curiozitate legata de comportament si logica...

PS. Mai trebuia o paranteza ), la a doua conditie (cea cu ora), pentru a inchide corect if-ul

#15
colombo2003

colombo2003

    Senior Member

  • Grup: Senior Members
  • Posts: 6,312
  • Înscris: 16.07.2008
@pcezar: Este exact ceea ce doream (cu conditia din al doilea post al tau). Am adoptat-o! Rapid si simplu (mai ales pentru un voluntar, amator, ca mine, pentru care, uneori, anumite solutii sunt greu de "digerat"). Multumesc :)
@ DILAS: multumesc pentru solutia rafinata. Si de asemenea  lui OriginalCopy.


PS. Rezolvat. Se poate inchide!

#16
colombo2003

colombo2003

    Senior Member

  • Grup: Senior Members
  • Posts: 6,312
  • Înscris: 16.07.2008
Revin.

@DILAS: multumesc pentru observatiile/precizarile tale. Ciudat insa (si nu stiu si nu inteleg de ce), daca scot " " de la numele functiei din setTimeout, nu se mai intampla nimic (adica nu mai canta)!
Si pe w3school, in definitie si exemple este tot cu " "; de acolo m-am inspirat si cand am vazut am facut si eu la fel.

#17
pcezar

pcezar

    Member

  • Grup: Members
  • Posts: 818
  • Înscris: 21.08.2005
... o sa mai fie nevoie de un if ( (hours==0 ) && ( minutes<1 ) && ( seconds<24*2 )) { audio.play() }  ... ca sa sune de 24 de ori ...

#18
colombo2003

colombo2003

    Senior Member

  • Grup: Senior Members
  • Posts: 6,312
  • Înscris: 16.07.2008
Multumesc mult inca o data pentru solutia oferita. Posted Image

Am adus insa o modificare, pentru a fi mai realistic (caci pendula nu stie de AM sau PM; deci cand e ora 22:00:00 nu emite 22 de sunete ci doar 10; si maxim 12 cand e ora 12 ziua sau 12 noaptea (ora 00)).
Asa incat am lasat conditia ta cu if, din al doilea post (aia cu hours*2) asa cum este, si, inainte, am convertit orele intre 1 si 12, adaugand linia asta, dupa declaratia lui Digital si definitia lui hours, minutes si secundes

hours = hours % 12;
hours = hours ? hours : 12;



Anunturi

Chirurgia spinală minim invazivă Chirurgia spinală minim invazivă

Chirurgia spinală minim invazivă oferă pacienților oportunitatea unui tratament eficient, permițându-le o recuperare ultra rapidă și nu în ultimul rând minimizând leziunile induse chirurgical.

Echipa noastră utilizează un spectru larg de tehnici minim invazive, din care enumerăm câteva: endoscopia cu variantele ei (transnazală, transtoracică, transmusculară, etc), microscopul operator, abordurile trans tubulare și nu în ultimul rând infiltrațiile la toate nivelurile coloanei vertebrale.

www.neurohope.ro

0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users

Forumul Softpedia foloseste "cookies" pentru a imbunatati experienta utilizatorilor Accept
Pentru detalii si optiuni legate de cookies si datele personale, consultati Politica de utilizare cookies si Politica de confidentialitate