Prima di tutto una premessa, i canarini imparano a cantare bene solo sentendo altri maschi. Per questo motivo il canarino della signora Jacqueline Landman-Gay, solo in tutta la casa, aveva bisogno di creare un programma che facesse sentire al suo canarino i vari cinguettii di altri canarini maschi.
Per prima cosa la signora ha scaricato degli MP3 contenenti i versi dei canarini, poi ha creato il programma con un elenco selezionabile contenente la lista degli MP3, il player e un pulsante:
Il codice del pulsante è il seguente:
on mouseUp if the label of me = "start" then set the label of me to "Stop" playSong else set the label of me to "Start" stopSongs end ifend mouseUp
Il resto del codice è tutto qui:
on preOpenCard put "" into fld "next play" set the hilitedlines of fld "playlist" to 0 get songPath() set the directory to it put the files into tSongs filter tSongs with "*.mp3" if tSongs = "" then put "No songs found." into tSongs put tSongs into fld "playlist"end preOpenCard
on closeCard stopSongsend closeCard
on playSong -- randomly choose an mp3, play it at a random time put any line of fld "playlist" into tSongName put songPath() & tSongName into tSong lock messages set the filename of player "canary" to tSong unlock messages set the hilitedlines of fld "playlist" to lineoffset(tSongName,fld "playlist") set the currentTime of player "canary" to 1 start player "canary"end playSong
on stopSongs -- stop playback lock messages -- prevent "playstopped" from being sent stop player "canary" put "" into fld "next play" set the hilitedlines of fld "playlist" to 0 repeat for each line tLine in the pendingmessages if tLine contains "playSong" then cancel (item 1 of tLine) end repeat unlock messagesend stopSongs
on playStopped pPlayer set the hilitedlines of fld "playlist" to 0 if the label of btn "start" = "start" then pass playStopped -- not in auto mode put random(word 1 of the label of btn "Lag") into tSecs displayTime tSecs if "playSong" is not in the pendingmessages then send "playSong" to me in tSecs secondsend playStopped
function songPath put the filename of this stack into tPath set the itemdel to slash put "songs" into last item of tPath return tPath & slashend songPath
on displayTime pSecs get the long time convert it to seconds add pSecs to it convert it to long time put "Next song at:" && it into fld "next play"end displayTime
Il messaggio preOpenCard serve a caricare tutte le musiche all'avvio.
Il messaggio playSong serve ad avviare la musica scelta e mandarne un'altra a caso ogni intervallo stabilito.
Il messaggio stopSongs ferma l'esecuzione della musica.
Migliorando la grafica, il programma finale è il seguente:
Il programma può essere scaricato da qui: http://newsletters.livecode.com/july/issue29/Canary_Stack.zip
Tempo per ottenere il programma completo: 20 minuti! Con quale altro linguaggio di programmazione potevate ottenere lo stesso risultato con così poco tempo?


Nessun commento:
Posta un commento