Wątek przeniesiony 2022-01-01 13:37 z PHP przez cerrato.

Jak odtwarzać dzwięk w pętli?

0

Witam,
Jak odtwarzać dźwięk w pętli, w obecnej sytuacji dźwięk słyszymy tylko raz na końcu, a mi chodzi żeby to się odtwarzało w każdym przejściu pętli, czyli 10 razy.

for($x = 0; $x < 10; $x++)
                    {
                        echo $x." ";
                        sleep(1);
                        ?>
                        <script>
                            const sound = new Audio('jest.wav');
                            sound.play();
    
                        </script>
                        <?php 
                    }
1

setInterval [setTimeout] [while, for]

Nie mieszaj C++, PHP i JS.
Całość napiszesz w JS.

var i=0;
window.setInterval(function() {
  i++;
  // Play music,()
  if(i>9) {
    // Wyjdź z interwału
  }
}, 1000);

Do setInterval przypisz identyfikator, zmienną. A przy wychodzeniu z interwału, daj clearInterval(identifier);.

3
sentence napisał(a):

Witam,
Jak odtwarzać dźwięk w pętli, w obecnej sytuacji dźwięk słyszymy tylko raz na końcu, a mi chodzi żeby to się odtwarzało w każdym przejściu pętli, czyli 10 razy.

Najlepiej by było dla Ciebie gdybyś najpierw napisał ten program który chcesz w gołym JavaScript, samym tylko, w index.html, i jak już to Ci będzie działać, to dopiero dodaj renderowanie na serverze w PHP czy w czym tam chcesz.

0
TomRiddle napisał(a):
sentence napisał(a):

Witam,
Jak odtwarzać dźwięk w pętli, w obecnej sytuacji dźwięk słyszymy tylko raz na końcu, a mi chodzi żeby to się odtwarzało w każdym przejściu pętli, czyli 10 razy.

Najlepiej by było dla Ciebie gdybyś najpierw napisał ten program który chcesz w gołym JavaScript, samym tylko, w index.html, i jak już to Ci będzie działać, to dopiero dodaj renderowanie na serverze w PHP czy w czym tam chcesz.

Ale JavaScript ma tylko odtwarzać dzwiek i tyle. I to by działo co napisałem jak by nie było pętli, bo w pętli zadziała raz na końcu.

0
sentence napisał(a):
TomRiddle napisał(a):
sentence napisał(a):

Witam,
Jak odtwarzać dźwięk w pętli, w obecnej sytuacji dźwięk słyszymy tylko raz na końcu, a mi chodzi żeby to się odtwarzało w każdym przejściu pętli, czyli 10 razy.

Najlepiej by było dla Ciebie gdybyś najpierw napisał ten program który chcesz w gołym JavaScript, samym tylko, w index.html, i jak już to Ci będzie działać, to dopiero dodaj renderowanie na serverze w PHP czy w czym tam chcesz.

Ale JavaScript ma tylko odtwarzać dzwiek i tyle. I to by działo co napisałem jak by nie było pętli, bo w pętli zadziała raz na końcu.

Napisz kod w samym JavaScripcie, niech Ci odtwarzacz ten dźwięk kilka razy.

Twój problem nie leży w PHP, tylko w tym że Twój kod w JS nie odpala dzięku kilka razy.

Mieszasz nie tylko dwa języki ale dwie aplikacje. Twój sleep() w php nie ma żadnego wpływu na Twoją aplikacje w JS, więc posłuchaj rady: napisz to najpierw w samym JS.

0
TomRiddle napisał(a):
sentence napisał(a):
TomRiddle napisał(a):
sentence napisał(a):

Witam,
Jak odtwarzać dźwięk w pętli, w obecnej sytuacji dźwięk słyszymy tylko raz na końcu, a mi chodzi żeby to się odtwarzało w każdym przejściu pętli, czyli 10 razy.

Najlepiej by było dla Ciebie gdybyś najpierw napisał ten program który chcesz w gołym JavaScript, samym tylko, w index.html, i jak już to Ci będzie działać, to dopiero dodaj renderowanie na serverze w PHP czy w czym tam chcesz.

Ale JavaScript ma tylko odtwarzać dzwiek i tyle. I to by działo co napisałem jak by nie było pętli, bo w pętli zadziała raz na końcu.

Napisz kod w samym JavaScripcie, niech Ci odtwarzacz ten dźwięk kilka razy.

Twój problem nie leży w PHP, tylko w tym że Twój kod w JS nie odpala dzięku kilka razy.

Mieszasz nie tylko dwa języki ale dwie aplikacje. Twój sleep() w php nie ma żadnego wpływu na Twoją aplikacje w JS, więc posłuchaj rady: napisz to najpierw w samym JS.

Ja mam cały kod w php, tu podałem tylko prosty przykład z wypisaniem 10 cyfr co sekunde z dzwiękiem. Bo jak znajdę rozwiązanie do tego to i zastosuje tam gdzie mi potrzeba bo przykład analogiczny też w pętli tylko tam więcej kodu i bardziej rozbudowany. Więc musi się jakoś dać ten dźwięk odtwarzać w petli, przeciez to tylko dzwiek, a ja niestety js nie znam.

0
sentence napisał(a):

Ja mam cały kod w php, tu podałem tylko prosty przykład z wypisaniem 10 cyfr co sekunde z dzwiękiem. Bo jak znajdę rozwiązanie do tego to i zastosuje tam gdzie mi potrzeba bo przykład analogiczny też w pętli tylko tam więcej kodu i bardziej rozbudowany. Więc musi się jakoś dać ten dźwięk odtwarzać w petli, przeciez to tylko dzwiek, a ja niestety js nie znam.

Pierwsze, zasadnicze pytanie - czy ten dźwięk ma się odtwarzać w przeglądarce?

Bo jeśli tak, to tego się nie da zrobić w samym PHP. W PHP najwyżej możesz wygenerować kod JavaScript, który to kod JavaScript odtworzy Ci ten dźwięk 10 razy w przeglądarce.

0
TomRiddle napisał(a):
sentence napisał(a):

Ja mam cały kod w php, tu podałem tylko prosty przykład z wypisaniem 10 cyfr co sekunde z dzwiękiem. Bo jak znajdę rozwiązanie do tego to i zastosuje tam gdzie mi potrzeba bo przykład analogiczny też w pętli tylko tam więcej kodu i bardziej rozbudowany. Więc musi się jakoś dać ten dźwięk odtwarzać w petli, przeciez to tylko dzwiek, a ja niestety js nie znam.

Pierwsze, zasadnicze pytanie - czy ten dźwięk ma się odtwarzać w przeglądarce?

Bo jeśli tak, to tego się nie da zrobić w samym PHP. W PHP najwyżej możesz wygenerować kod JavaScript, który to kod JavaScript odtworzy Ci ten dźwięk 10 razy w przeglądarce.

W przeglądarce, jest tylko dla własnych celów więc ważne żeby tylko działało.

0
sentence napisał(a):
TomRiddle napisał(a):
sentence napisał(a):

Ja mam cały kod w php, tu podałem tylko prosty przykład z wypisaniem 10 cyfr co sekunde z dzwiękiem. Bo jak znajdę rozwiązanie do tego to i zastosuje tam gdzie mi potrzeba bo przykład analogiczny też w pętli tylko tam więcej kodu i bardziej rozbudowany. Więc musi się jakoś dać ten dźwięk odtwarzać w petli, przeciez to tylko dzwiek, a ja niestety js nie znam.

Pierwsze, zasadnicze pytanie - czy ten dźwięk ma się odtwarzać w przeglądarce?

Bo jeśli tak, to tego się nie da zrobić w samym PHP. W PHP najwyżej możesz wygenerować kod JavaScript, który to kod JavaScript odtworzy Ci ten dźwięk 10 razy w przeglądarce.

W przeglądarce, jest tylko dla własnych celów więc ważne żeby tylko działało.

No to musisz to napisać w JavaScript.

1

W Javascript masz zdarzenie wywoływane na koniec odtwarzanego utworu:
https://www.w3schools.com/tags/av_event_ended.asp

Wystarczy w jego obsłudze ponownie uruchomić utwór.

https://jsfiddle.net/3wsL1q4v/

<html>
  <body>
 
    <button onclick="myAudioElement.play();">Graj</button> 
    <script>    
      var myAudioElement = null ;
      var counter = 1;
      window.addEventListener ( 'load', ()=>{

        myAudioElement = new Audio ( "https://ms.xksi.pl/sng.mp3" ) ;

        // podłączam zdarzenie wywoływane na koniec utworu
        myAudioElement.addEventListener ( "ended", () => {
          console.log ( "Odtwarzam ponownie i zliczam." ) ;
          if ( counter < 10 ) {
            myAudioElement.play();          
            counter++
          }          
        });        
        
      });    
    </script>  
  </body>
</html>
0
katakrowa napisał(a):

W Javascript masz zdarzenie wywoływane na koniec odtwarzanego utworu:

https://www.w3schools.com/tags/av_event_ended.asp

Wystarczy w jego obsłudze ponownie uruchomić utwór.

https://jsfiddle.net/3wsL1q4v/

<html>
  <body>
 
    <button onclick="myAudioElement.play();">Graj</button> 
    <script>    
      var myAudioElement = null ;
      var counter = 1;
      window.addEventListener ( 'load', ()=>{

        myAudioElement = new Audio ( "https://ms.xksi.pl/sng.mp3" ) ;

        // podłączam zdarzenie wywoływane na koniec utworu
        myAudioElement.addEventListener ( "ended", () => {
          console.log ( "Odtwarzam ponownie i zliczam." ) ;
          if ( counter < 10 ) {
            myAudioElement.play();          
            counter++
          }          
        });        
        
      });    
    </script>  
  </body>
</html>

Mój kod w php w którym chciałem zastosować dźwięk jest taki, że zapętlony cały czas sprawdza czy w pliku .txt znajduje się dany ciąg(w tym pliku .txt cały czas się tam coś pojawia). Jeśli dany ciąg się pojawi to chciałem aby było to sygnalizowane dźwiękiem. Skrypt jest uruchamiany z poziomu przeglądarki. Obecnie zrobiłem tak, że jak znajdzie dany ciąg to daje break, wychodzi z pętli, odtwarza dźwięk, i skrypt kończy działania. I muszę go włączać ręcznie w przeglądarce od nowa. Też jest to jakieś rozwiązanie, ale ogólnie chciałem że jak dany ciąg zostanie znaleziony, to usłyszę dźwięk, a skrypt dalej sobie działa, i dźwięk usłyszę za każdym razem jak ciąg zostanie znaleziony. Ale powyższego kodu nie mogę dołożyć do php, a z tego co już było pisane wychodzi na to że się nie da...

0
sentence napisał(a):

Mój kod w php w którym chciałem zastosować dźwięk jest taki, że zapętlony cały czas sprawdza czy w pliku .txt znajduje się dany ciąg(w tym pliku .txt cały czas się tam coś pojawia). Jeśli dany ciąg się pojawi to chciałem aby było to sygnalizowane dźwiękiem. Skrypt jest uruchamiany z poziomu przeglądarki. Obecnie zrobiłem tak, że jak znajdzie dany ciąg to daje break, wychodzi z pętli, odtwarza dźwięk, i skrypt kończy działania. I muszę go włączać ręcznie w przeglądarce od nowa. Też jest to jakieś rozwiązanie, ale ogólnie chciałem że jak dany ciąg zostanie znaleziony, to usłyszę dźwięk, a skrypt dalej sobie działa, i dźwięk usłyszę za każdym razem jak ciąg zostanie znaleziony. Ale powyższego kodu nie mogę dołożyć do php, a z tego co już było pisane wychodzi na to że się nie da...

No dobra, przynajmniej trochę wiem o co Ci chodzi.

Ale Ty to chcesz mieć tylko u siebie na swoim kompie? To znaczy lokalnie odpalić PHP i przeglądarke?

Czy chcesz mieć PHP na jednym kompie, a klienta z przeglądarką i JSem na drugim?

0
TomRiddle napisał(a):
sentence napisał(a):

Mój kod w php w którym chciałem zastosować dźwięk jest taki, że zapętlony cały czas sprawdza czy w pliku .txt znajduje się dany ciąg(w tym pliku .txt cały czas się tam coś pojawia). Jeśli dany ciąg się pojawi to chciałem aby było to sygnalizowane dźwiękiem. Skrypt jest uruchamiany z poziomu przeglądarki. Obecnie zrobiłem tak, że jak znajdzie dany ciąg to daje break, wychodzi z pętli, odtwarza dźwięk, i skrypt kończy działania. I muszę go włączać ręcznie w przeglądarce od nowa. Też jest to jakieś rozwiązanie, ale ogólnie chciałem że jak dany ciąg zostanie znaleziony, to usłyszę dźwięk, a skrypt dalej sobie działa, i dźwięk usłyszę za każdym razem jak ciąg zostanie znaleziony. Ale powyższego kodu nie mogę dołożyć do php, a z tego co już było pisane wychodzi na to że się nie da...

No dobra, przynajmniej trochę wiem o co Ci chodzi.

Ale Ty to chcesz mieć tylko u siebie na swoim kompie? To znaczy lokalnie odpalić PHP i przeglądarke?

Czy chcesz mieć PHP na jednym kompie, a klienta z przeglądarką i JSem na drugim?

Odpale u siebie lokalnie w przeglądarce na kompie, ale skrypt będzie się wykonywał na VPS, bo tam czyta ten plik .txt

1
sentence napisał(a):

No dobra, przynajmniej trochę wiem o co Ci chodzi.

Ale Ty to chcesz mieć tylko u siebie na swoim kompie? To znaczy lokalnie odpalić PHP i przeglądarke?

Czy chcesz mieć PHP na jednym kompie, a klienta z przeglądarką i JSem na drugim?

Odpale u siebie lokalnie w przeglądarce na kompie, ale skrypt będzie się wykonywał na VPS, bo tam czyta ten plik .txt

Czyli chcesz odpalić PHP zdalnie, a u siebie lokalnie odpalić tylko przeglądarkę.

Ehh, czemuś tego od początku nie powiedział, klasyczny problem XY.

No to to co musisz zrobić:

  1. Aplikacja w PHP musi co jakiś czas otwierać Twój plik .txt (albo mieć go otwartego w trybie r, read) i szukać zmian.
  2. Musi powstać jakiś kanał komunikacji PHP z Twoją przeglądarką:
  • Możesz to zrobić tak że co jakiś czas Twoja apka w JS strzela do PHP
  • Możesz ustawić websockety tak żeby to PHP strzelił z powrotem do klienta
  • Dowolny inny
  1. Nie żadna "pętla" w JS, tylko po prostu kiedy dostaniesz info od PHP że coś się zmieniło odpalasz dźwięk.

Swoją drogą gratulację, przez to że nie napisałeś od razu co chcesz zrobić, zmarnowałeś trzem osobom które próbowały Ci pomóc pół dnia.

Ale teraz co do samego problemu: sądząc po jakości Twojego kodu, websockety odpadają.

Zrób dwa pliki: index.html oraz check.php:

index.html - krótki kawałek JavaScript, który co 10 sekund zrobi żądanie pod check.php, załaduje dane w formacie JSON, i jeśli odpowiedź to jest success to zagra dźwięk:

<html>
<body>
function start() {
  setTimeout(() => performCheck(start), 10 * 1000);
}

function performCheck(done) {
  fetchCheck(response => {
    if (response.success) {
      playSound();
    }
    done();
  }, done);
}

function fetchCheck(onSuccess, onError) {
  fetch("/check.php")
    .then(response => response.json())
    .then(onSuccess)
    .catch(() => {
      console.log("Problem z załadowaniem zasobu");
      onError();
    });
}

function playSound() {
  new Audio('jest.wav').play();
}
</body>
</html>

check.php - krótki plik PHP, który spróbuje ponownie wczytać jakiś plik, i sprawdzi czy doszły w nim zmiany, od ostatniego requesta. Żeby to zrobić "w pętli", tak jak pisałeś wcześniej, musiałbyś podpiąć websockety (albo próbować to inaczej obejśc, jakieś prehistoryczne sposoby jak long-poll, albo comet), ale do tego raczej Ci brakuje umiejętności na razie. Więc to co musisz zrobić to jakoś na serverze przetrzymać informacje o poprzednim sprawdzeniu Twoich danych, i użyć je do podownego sprawdzenia. Np w pliku albo w sesji, albo ewentualnie w cookie.

<?php
function countWordsInFile(string $filename, string $word): int {
  $content = \file_get_contents($filename);
  return \substr_count($content, $word);
}

$previousWordsCount = ; // tutaj je sobie odczytaj skąś poprzednie "policzenie słów"
$currentWordCount = countWordsInFile('file.txt', 'some word');

$success = $currentWordCount > $previousWordsCount; // Jeśli nowych jest więcej niż starych - zwróć success=true

// tutaj sobie gdzieś zapisz, ile Tych słów jest, w pliku, w sesji, gdzie chcesz

echo \json_encode(['success' => $success]);

1 użytkowników online, w tym zalogowanych: 0, gości: 1