//crea ventana var win = Titanium.UI.currentWindow; //variables var archivo; var tiempo; var sonido; var duracion = 0; var etiqueta = Titanium.UI.createLabel({ text: ' ', top:150, color: '#999', textAlign:'center', width: 250, height:'auto' }); win.add(etiqueta); //label volumen var volumen = Titanium.UI.createLabel({ text: "Volumen: "+Ti.Media.volume, bottom:50, color:'#999', textAlign:'center', width: 250, height: 'auto' }); //label de switch var etiquetaSwitch = Titanium.UI.createLabel({ text:'Alta fiedilidad: ', width: 250, height:'auto', textAlign:'center', color:'#999', bottom:115 }); //switch var switchL = Titanium.UI.createSwitch({ value:false, bottom:80 }); win.add(etiquetaSwitch); win.add(switchL); //boton del play var play = Titanium.UI.createButton({ title:'Reproduce Grabacion', width:200, height:40, top:80 }); win.add(play); //boton de grabacion var start = Titanium.UI.createButton({ title:'Comenzar Grabacion', width:200, height:40, top:20 }); win.add(start);
Y veremos una interfaz como esta:
Ahora le daremos funcionalidad haciendo lo siguiente:
//crea ventana var win = Titanium.UI.currentWindow; //variables var archivo; var tiempo; var sonido; var duracion = 0; var etiqueta = Titanium.UI.createLabel({ text: ' ', top:150, color: '#999', textAlign:'center', width: 250, height:'auto' }); win.add(etiqueta); //label volumen var volumen = Titanium.UI.createLabel({ text: "Volumen: "+Ti.Media.volume, bottom:50, color:'#999', textAlign:'center', width: 250, height: 'auto' }); //label de switch var etiquetaSwitch = Titanium.UI.createLabel({ text:'Alta fiedilidad: ', width: 250, height:'auto', textAlign:'center', color:'#999', bottom:115 }); //switch var switchL = Titanium.UI.createSwitch({ value:false, bottom:80 }); win.add(etiquetaSwitch); win.add(switchL); //boton del play var play = Titanium.UI.createButton({ title:'Reproduce Grabacion', width:200, height:40, top:80 }); win.add(play); //boton de grabacion var start = Titanium.UI.createButton({ title:'Comenzar Grabacion', width:200, height:40, top:20 }); win.add(start); //Creamos la instancia de un objeto del metodo AudioRecorder llamado grabando var grabacion = Ti.Media.createAudioRecorder(); /* Para una compresion por default usamos Ti.Media.AUDIO_FORMAT_LINEAR_PCM Nos comprimira el archivo en un tamanio pequenio y optimo para el telefono Para un formato por default usamos Ti.Media.AUDIO_FILEFORMAT_CAF Nos dara una buena calidad en el audio */ grabacion.compression = Ti.Media.AUDIO_FORMAT_LINEAR_PCM; grabacion.format = Ti.Media.AUDIO_FILEFORMAT_CAF; Ti.Media.addEventListener('recordinginput',function(e){ //en caso de grabacion se da un click en el evento de start if(!e.available && grabacion.recording){ start.fireEvent('click',{}); } }); //si se modifico el volumen se actualizara Ti.Media.addEventListener('volume', function(e){ volumen.text = "Volumen: "+e.volume; }); //muestra los niveles de sonido y duracion function muetraNiveles() { var peak = Ti.Media.peakMicrophonePower; var avg = Ti.Media.averageMicrophonePower; duracion ++; etiqueta.text ='Duracion: '+duracion+' segundos\npeak power: '+peak+'\navg power: '+avg; } //evento al comenzar grabacion start.addEventListener('click', function() { if(start.title == "Detener Grabacion") { //guarda lo grabado en archivo archivo = grabacion.stop(); //cambia la etiqueta start start.title= "Comienzar Grabacion"; //nos muestra la opcion de reproducir play.show(); //limpia el intervalo de tiempo clearInterval(tiempo); Ti.Media.stopMicrophoneMonitor(); } else { //dar error en caso de que no haiga hardware necesario if (!Ti.Media.canRecord) { Ti.UI.createAlertDialog({ title:'Error!', message:'No hay dispositivo de grabacion disponible' }).show(); return; } //cambia etiqueta start start.title = "Detener Grabacion"; //comienza grabar grabacion.start(); //esconde etiqueta Reproducir play.hide(); Ti.Media.startMicrophoneMonitor(); //inicia en ceros duracion y luego nos muestra el tiempo transcurido duracion = 0; tiempo = setInterval(muestraNiveles,1000); } }); play.addEventListener('click', function() { if (sonido && sonido.playing) { //detiene la grabacion sonido.stop(); //libera sonido.release(); sonido = null; //cambia etiqueta play.title = 'Reproduce Grabacion'; } else { //guarda el nuevo archivo sonido = Titanium.Media.createSound({sonido:archivo}); sonido.addEventListener('complete', function() { //cambia etiqueta play play.title = 'Reproduce Grabacion'; }); //cambia etiqueta play y reproduce sonido.play(); play.title = 'Detiene Grabacion'; } }); //cambia formato por medio del switch switchL.addEventListener('change',function(e) { if (!switchL.value) { grabacion.compression = Ti.Media.AUDIO_FORMAT_ULAW; } else { grabacion.compression = Ti.Media.AUDIO_FORMAT_LINEAR_PCM; } });
Y como resultado veremos lo siguiente: