roAudioPlayer
26 min
se utiliza un reproductor de audio para reproducir archivos de audio mediante la interfaz genérica ifmediatransport si el puerto de mensajes está configurado, el objeto enviará eventos del tipo roaudioevent todas las llamadas al objeto son asíncronas en otras palabras, la reproducción de audio se maneja en un hilo diferente del script el script puede continuar ejecutándose mientras se reproduce el audio el equivalente en javascript es usar la etiqueta de audio html ifmessageport setport(port as romessageport) as void publica mensajes del tipo roaudioevent en el puerto de mensajes adjunto ifuserdata setuserdata(user data as object) configura los datos del usuario que se devolverán cuando se generen eventos getuserdata() as object devuelve los datos del usuario que se configuraron previamente mediante setuserdata() devolverá invalid si no se ha configurado ningún dato ifidentity getidentity() as integer la interfaz siidentity ha quedado obsoleta recomendamos usar la interfaz ifuserdata en su lugar ifmediatransport consulte rovideoplayer docid\ oszbyfpamasbwnd6w7jsh para obtener una descripción de los métodos ifmediatransport ifaudiocontrol setpcmaudiooutputs(outputs as dynamic) as boolean especifica qué conectores de audio deben emitir audio pcm este método acepta una instancia de roaudiooutput o una matriz de instancias de roaudiooutput setcompressedaudiooutputs(outputs as dynamic) as boolean especifica qué conectores de audio deben emitir audio comprimido (por ejemplo, audio codificado dolby ac3) este método acepta una instancia de roaudiooutput o una matriz de instancias de roaudiooutput cuando se llama al método setpcmaudiooutputs() , setmultichannelaudiooutputs() , o setcompressedaudiooutputs() , se invalidarán las configuraciones de los siguientes métodos de ifaudiocontrol setaudiooutput() , mapstereooutput() , setusbaudioport() , mapdigitaloutput() setmultichannelaudiooutputs(array as object) as boolean especifica qué conectores de audio deben emitir audio pcm multicanal está diseñado para reproducir contenido de audio que tenga más de dos canales estéreo, como sonido envolvente 5 1 o 7 1 el método acepta un roaudiooutput o una matriz de instancias de roaudiooutput nota también debe llamar a setaudiomode con el parámetro establecido en 0, es decir, sonido envolvente ac3 example video player = createobject("rovideoplayer") output = createobject("roaudiooutput", "hdmi") video player setmultichannelaudiooutputs(output) video player setaudiomode(0) setaudiomode(audio mode as integer) as boolean configura el modo de audio del objeto roaudioplayer este método acepta los siguientes valores 0 sonido envolvente ac3 1 ac3 mezclado a estéreo 2 sin audio 3 izquierdo 4 derecho las opciones 0 y 1 solo se aplican a archivos de video, mientras que las opciones 2, 3 y 4 se aplican a todas las fuentes de audio setvolume(volume as dynamic) as boolean especifica el volumen de la salida de audio como un porcentaje o una cantidad en decibelios para usar una medición porcentual, pase un valor entero entre 0 y 100 para usar una medición en decibelios, pase un roassociativearray que contenga un único parámetro {db \<value as float>} la medición en decibelios es un valor absoluto pasar 0 no especifica ningún cambio en la salida de audio, y el rango efectivo de mediciones es de aproximadamente 80 a 20 decibelios el valor del volumen se recorta antes de usarse (es decir, setvoume(101) establecerá el volumen en 100 y devolverá verdadero ) el volumen es el mismo para todas las salidas asignadas y usb/spdif/analógicas se almacenan niveles de volumen separados para roaudioplayer y rovideoplayer setchannelvolumes(channel mask as integer, volume as integer) as boolean puede controlar el volumen de canales de audio individuales este comando de volumen toma una máscara de canal hexadecimal, que determina los canales a los que aplicar el volumen, y un nivel, que es un porcentaje de la escala completa el control de volumen funciona según el canal de audio en lugar de la salida la máscara de canal es una máscara de bits con los siguientes bits para la salida mp3 \&h01 izquierdo \&h02 derecho \&h03 ambos, izquierdo y derecho setpreferredaudio(description as string) as boolean selecciona qué pista de audio usar si hay múltiples pistas de audio en el flujo consulte flujos preferidos docid\ oszbyfpamasbwnd6w7jsh para obtener más detalles configureaudioresources() as boolean setaudiodelay(delay in milliseconds as integer) as boolean agrega un desplazamiento de marca de tiempo de presentación (pts) al audio esto permite ajustar las diferencias de multiplexación de archivos los retrasos están limitados a 150 ms o menos actualmente, el software del sistema solo admite retrasos positivos; por lo tanto, si necesita adelantar el audio respecto al video, deberá usar setvideodelay() en su lugar setvideodelay(delay in milliseconds as integer) as boolean agrega un desplazamiento de marca de tiempo de presentación (pts) al video esto permite ajustar las diferencias de multiplexación de archivos los retrasos están limitados a 150 ms o menos storeencryptionkey(a as string, b as string) as boolean storeobfuscatedencryptionkey(a as string, b as string) as boolean métodos obsoletos setaudiooutput(audio output as integer) as boolean mapstereooutput(mapping as integer) as boolean mapdigitaloutput(mapping as integer) as boolean setstereomappingspan(a as integer) as boolean setaudiostream(stream index as integer) as boolean setspdifmute(a as boolean) as boolean setusbaudioport(a as integer) as boolean setaudiooutputaux(audio output as integer) as boolean setaudiomodeaux(audio mode as integer) as boolean mapstereooutputaux(mapping as integer) as boolean setvolumeaux(volume as integer) as boolean setchannelvolumesaux(channel mask as integer, volume as integer) as boolean setaudiostreamaux(stream index as integer) as boolean configuración de salidas de audio si se está reproduciendo un archivo de audio/video o se ha reproducido, debe llamar a stop() antes de cambiar la salida de audio el siguiente script muestra cómo usar los métodos setpcmaudiooutputs() y setcompressedaudiooutputs() junto con roaudiooutput # el reproductor de audio/video está configurado para emitir audio decodificado a la salida analógica o audio comprimido a las salidas hdmi ® y spdif ao1=createobject("roaudiooutput", "analog") ao2=createobject("roaudiooutput", "hdmi") ao3=createobject("roaudiooutput", "spdif") a1=createobject("roaudioplayer") a1 setpcmaudiooutputs(ao1) ar = createobject("roarray", 2, true) ar\[0] = ao2 ar\[1] = ao3 a1 setcompressedaudiooutputs(ar) en la mayoría de los casos, redirigir las salidas de audio durante la reproducción de audio/video hará que la reproducción se detenga el software del sistema seguirá respondiendo, por lo que puede usar comandos para salir de la reproducción durante o después de una modificación de la salida de audio este script establece la salida de audio en el tercer puerto de audio analógico analog3 = createobject("roaudiooutput", "analog 3") video = createobject("rovideoplayer") video setpcmaudiooutputs(analog3) este script configura múltiples salidas para un reproductor de audio analogout = createobject("roaudiooutput", "analog") hdmiout = createobject("roaudiooutput", "hdmi") audio = createobject("roaudioplayer") audio setpcmaudiooutputs(\[analogout, hdmiout]) este script establece el nivel de volumen para canales individuales audio = createobject("roaudioplayer") audio setchannelvolumes(\&h01, 60) 'left channel to 60% audio setchannelvolumes(\&h02, 75) 'right channel to 75% audio setchannelvolumes(\&h03, 65) 'all channels to 65% reproducir múltiples archivos de audio simultáneamente múltiples archivos mp3, así como la pista de audio de un archivo de video, pueden reproducirse en cualquier combinación de lo siguiente salidas analógicas spdif / hdmi usb solo se puede enviar un único archivo a una salida en un momento dado por ejemplo, dos roaudioplayers no pueden reproducir simultáneamente en la salida spdif el segundo que intente realizar una llamada a reproducirarchivo obtendrá un error para liberar una salida, se debe detener el flujo de audio o video (mediante las llamadas a ifmediatransport detener o stopclear ) tenga en cuenta lo siguiente sobre la funcionalidad de múltiples archivos de audio la salida de audio analógica integrada y la salida hdmi utilizan el mismo reloj de frecuencia de muestreo por lo tanto, si se reproduce contenido diferente en cada una, el contenido debe tener la misma frecuencia de muestreo actualmente, solo se admite un único conjunto de altavoces usb cada flujo de audio y video reproducido consume parte de los recursos finitos de cpu la cantidad consumida depende de las tasas de bits de los flujos las pruebas son la única forma de determinar si un conjunto determinado de archivos de audio puede reproducirse al mismo tiempo que un video el uso máximo recomendado es un archivo de video de 16mbps con tres flujos mp3 de 160kbps simultáneos este script reproduce un video con audio a través de hdmi y un archivo mp3 en el puerto analógico integrado hdmiout = createobject("roaudiooutput", "hdmi") analogout = createobject("roaudiooutput", "analog") video = createobject("rovideoplayer") video setpcmaudiooutputs(hdmiout) audio = createobject("roaudioplayer") audio setpcmaudiooutputs(analogout) video playfile("video mpg") audio playfile("audio mp3")