Visualizzazione post con etichetta audio. Mostra tutti i post
Visualizzazione post con etichetta audio. Mostra tutti i post

venerdì 7 ottobre 2016

id3lib

La libreria per leggere i tag id3 degli MP3 è passata su github, poichè l'autore originale è morto, il nuovo programmatore che mantiene la libreria è Paul McClernan, potete scaricare la libreria da: https://github.com/PaulMcClernan/id3lib

mercoledì 16 marzo 2016

Analizzare un file audio WAV

Se volessimo analizzare un file audio, dovremmo prima di tutto sapere come è fatto. Uno dei formati più semplici è il wav, che non è compresso e i dati partono dopo il byte 44.
Il formato WAV, stereo, dopo il byte 44, pone due byte per il canale sinistro, due byte per il canale destro, e poi ricomincia. Per questo motivo possiamo fare un grafico leggendo questi byte.
Facciamo uno stack con:
  • un bottone
  • un campo di testo
  • un grafico di tipo linea
A questo punto nel pulsante mettiamo il seguente codice:

on mouseUp
   put URL "binfile:C:\Users\MAX\Documents\fanhit.wav" into MioAudio #percorso dell'audio da analizzare
   put 0 into cont #contatore byte
   put 0 into cont2 #contatore canale sinistro
   put 0 into cont3 #contatore punti del grafico
   repeat for each byte theByte in mioAudio
      add 1 to cont
      if cont > 44 then    #dopo il byte 44 possiamo analizzare l'audio
         add 1 to cont2 #contiamo i byte dei canali, 1 e 2 sinistro, 3 e 4 destro
         switch cont2
            case 1 #primo byte canale sinistro               
               put byteTonum(theByte) into temp
               break
            case 2 #secondo byte canale sinistro
               put temp + (256 * byteTonum(theByte)) into temp
               add 1 to cont3 #spostiamo lungo x sull'asse del grafico
               put cont3,byteTonum(theByte) & return after punti #aggiungiamo una riga di coordinate x,y per il grafico
               break
            case 4
               put 0 into cont2 #resettiamo il contatore dei canali
         end switch         
      end if      
   end repeat
   put punti into field 1 #vediamo l'elenco dei punti
   set the points of graphic "line" to punti #facciamo il grafico del canale sinistro
end mouseUp


Premendo il pulsante otterremo questo:

Ovviamente questo è solo un esempio molto semplice, ma da qui potete proseguire voi a fare od aggiungere effetti.

giovedì 30 aprile 2015

Mappa d'Europa interattiva

Il programmatore Viktoras Didziulis ha scritto questo semplice programma per dimostrare come creare una cartina interattiva.

Cliccando su una regione, una voce ci dice le informazioni di un paese. Il programma è scaricabile da qui: iMap.livecode.
Oppure in alternativa potete lanciare il seguente comando:

go url "http://ekoinf.net/revolution/ParentScripts.rev" 

Il programma utilizza la libreria revSpeak, per creare la voce narrante, che è sempre inclusa in livecode. In questo modo non ci sono pesanti registrazioni da allegare, ma basta scrivere il testo e il computer lo legge.
Il programma inoltre usa i poligoni che cambiamo trasparenza per evidenziare i vari paesi dove passa sopra il mouse.

lunedì 20 aprile 2015

Registrare l'audio

Livecode si appoggia a QuickTime su Windows e Mac per gli elementi multimediali. Una delle funzionalità di quicktime che possiamo utilizzare grazie a livecode è quella di registrare l'audio.
Possiamo impostare ogni dettaglio della registrazione se vogliamo, oppure lasciare le impostazioni de default. Ad esempio prima di registrare l'audio possiamo impostare il formato di file che vogliamo ottenere.
La funzione recordCompressionTypes() ci dà dei codec disponibili, ad esempio su windowsXp ottengo:
  • No compression,raw 
  • MACE 3:1,MAC3
  • MACE 6:1,MAC6
  • QDesign Music 2,QDM2
  • Qualcomm PureVoice,Qclp
  • Apple Lossless,alac
  • ALaw 2:1,alaw
  • 32-bit Floating Point,fl32
  • 64-bit Floating Point,fl64
  • IMA 4:1,ima4
  • 24-bit Integer,in24
  • 32-bit Integer,in32
  • AAC a bassa complessità MPEG 4,mp4a
  • 16-bit Little Endian,sowt
  • 16-bit Big Endian,twos
  • µLaw 2:1,ulaw
 Per impostare un particolare codec, basta impostare la proprietà recordComporession.
 Possiamo impostare il tipo di file, utilizzando la proprietà recordformat, tra:
  • aiffrecords per il formato AIF
  • waverecords per il formato WA
  • ulawrecords per il formato AU
  • movierecords per il formato video QuickTime

Possiamo impostare la fonte da cui registrare l'audio, impostando la proprietà recordInput tra le seguenti:
  • imic - microfono interno
  • emic -il jack audio esterno
  • cd - il lettore CD
  • irca - il jack  RCA
  • tvfm - da una radio FM
  • idav - da un input analgicoDAV
  • mbay - dispositivo media-bay
  • modm - da un modem
  • zvpc - da un zoom video input
  • none - non registra
Possiamo impostare la frequenza di campionamento in kilohertz con la proprietà recordrate.
Una volta scelto se e cosa impostare i comandi da utilizzare sono:

record sound file "registrazione.aiff"

mentre per mettere in pausa e riprendere la registrazione abbiamo:

record pause
record resume

Infine per chiudere la registrazione abbiamo:
stop recording

In questo modo potete fare programmi di registrazione molto complessi.
Per gli utenti linux, che non hanno quicktime a disposizione, c'è il programma sox oppure arecord che possimo utilizzare dentro il nostro livecode, ad esempio:

shell("sox -t alsa default output.wav")

martedì 17 marzo 2015

revSpeak

Dentro livecode è presente una libreria per poter far parlare i nostri programmi: revSpeak. Questa libreria funziona con Windows e Mac.
L'uso è semplicissimo:

revspeak "Hello, I'm talking!"

In pratica il computer legge ciò che vogliamo. Su windows si appoggiano alle Micorsoft Speech API, che hanno installato di solito solo una lingua di default: Microsoft Sam. Questa voce ha l'inflessione inglese, per l'italiano non è il massimo.
Per vedere le voci disponibili sul vostro computer basta usare la funzione revspeechVoices(), vi restituirà tutte le voci disponibili. Altre voci sono scaricabili gratuitamente o a pagamento.
A partire da Windows 8 esistono anche le seguenti voci, che però hanno dei nomi abbastanza anonimi:
  • Microsoft David (USA male) 
  • Hazel (UK female) 
  • Zira (USA female) 
  • Microsoft Helena (Spagnolo)
  • Microsoft Sabina (Spagnolo)
  • Microsoft Hortense (Francese)
  • Microsoft Hedda (Tedesco)
  • Microsoft Haruka (Giapponese)
  • Microsoft Heami (Koreano)
  • Microsoft Hanhan (Cinese)
  • Microsoft Elsa (Italiano)
  • ...
Quindi se volete utilizzare un'inflessione italiana, vi serve di impostare:

revSetSpeechVoice "Microsoft Elsa"

Oltre la lingua, si può impostare il volume con il comando revSetSpeechVolume, utilizzando un numero tra zero e cento.
Per caricare la libreria utilizzate il comando revLoadSpeech, mentre per non utilizzarla più e risparmiare la memoria revUnloadSpeech.
Potete anche cambiare il tremolio della voce col comando revSetSpeechPitch, utilizzando un numero tra 30 e 127.

mercoledì 20 agosto 2014

Insegnante di canto per canarini

Oggi vi mostro un esempio di creare un software molto particolare per le nostre esigenze con Livecode.
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 if
end 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
   stopSongs
end 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 messages
end 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 seconds
end 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 & slash
end 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?

martedì 20 maggio 2014

Applicazioni multimediali

Con Livecode è possibile inserire all'interno del proprio programma lettori audio o video. Ma la cosa più interessane è che si può attivare messaggi al raggiungimento di un determinato fotogramma o minuto di esecuzione.
Una volta inserito il nostro lettore e selezionato il file da eseguire, potete leggere di quanti secondi (o frames o altra unità di misura) è composto. Nel nostro caso 19'797:

Se andate alla voce "callbacks" delle proprietà, potete impostare quando attivare alcuni eventi.

In questo modo potete creare film sottotitolati, audiolibri interattivi, karaoke, ecc.