Canvi de dispositius d’audio amb PowerShell (2)

He actualitzat l’script per canviar de dispositius degut a un problema amb els anteriors.

Sembla que els dispositius “canvien” d’ordre donades algunes sircumstàncies, i per tant l’script anterior basat en l’ordre en que llistàvem els dispositius ja no serveix, per tant, toca automatitzar una mica l’script.

La idea es llistar els dispositius, filtrar els que interessen i activar el que necessitem i la mateixa comanda que varem utilitzar per llistar tots els dispositius ens servirà.

Get-AudioDevice -List

Per poder treballar amb ells la posarem en una variable i ja que hi sóm, farem una taula sols amb les dades que ens interessen. En aquest cas l’Index i Name.

$llista = Get-AudioDevice -List | Select Index, Name

El següent serà recorre la llista per poder saber quin dispositiu hem d’activar, per tant ens falten 2 coses, un nom amb el que comparar i el número index+1.

$disp1 = "BenQ PD2500Q (NVIDIA High Definition Audio)"
$disp =  "Altavoces (Realtek High Definition Audio)"

$llista = Get-AudioDevice -List | Select Index, Name

Foreach($i in $llista)
{
	$nom = $i.Name
	$in = $i.Index + 1
	if ( $nom -like $disp ) 
	{
		Set-AudioDevice -Index $in
	}
}

Veureu que utilitzar Select ens permet accedir molt fàcilment al les columnes de la taula $var.NomCol i que tal com varem fer en l’script anterior, sumem 1 a l’index de la taula. Ara sols ens queda una cosa, dir quin dispositiu volem activar ja que ara sols activaria $disp que són els auriculars.

Podriem fer dos scripts, però en aquest cas utilitzarem $Args i passarem un valor, en cas de no passar res activara els auriculars.

$disp1 = "BenQ PD2500Q (NVIDIA High Definition Audio)"
$disp =  "Altavoces (Realtek High Definition Audio)"

if ($Args -eq 'benq')
{
    $disp = $disp1
}

$llista = Get-AudioDevice -List | Select Index, Name

Foreach($i in $llista)
{
	$nom = $i.Name
	$in = $i.Index + 1
    if ( $nom -like $disp ) 
    {
        Set-AudioDevice -Index $in
    }
}

Ara si passem el paràmetre ‘benq’ a l’hora de cridar l’script activarà l’audio del monitor. Per mi ja estaria OK, però podriem expremer una mica mes l’script i ja que definim els dos dispositius, podem recorrer la taula i mitjançant el camp Default, quedant un Script com aquest.

$disp1 = "BenQ PD2500Q (NVIDIA High Definition Audio)"
$disp =  "Altavoces (Realtek High Definition Audio)"

$llista = Get-AudioDevice -List | Select Index, Name, Default

Foreach($i in $llista)
{
	$nom = $i.Name
	$in = $i.Index + 1
    if ( $nom -like $disp ) 
    {
		if ( $i.Default -like 'False' )
		{
			Set-AudioDevice -Index $in
            exit
		}
    }
	   if ( $nom -like $disp1 ) 
    {
		if ( $i.Default -like 'False' )
		{
			Set-AudioDevice -Index $in
            exit
		}
    }
}

És important acabar l’script un cop cambiem el dispositiu ja que si es canvia el primer, podem tornar a activar el segón.

I feina feta, jo em quedo amb l’script anterior ja que tinc un botó per cada cosa en l’Stream Deck però si mai tinc que reduir l’espai dels botons ja tinc l’altre.

Monitor en mode Estalvi d’energia amb PowerShell

Seguint amb les ulilitats que pot donar el meu Stream Deck de Elgato i que anteriorment ja n’he parlat sobre treure profit amb Powershell.

Canvi de dispositius d’audio amb PowerShell

Com alguns podeu saber, el meu escriptori és el terra, tinc el meu setup (monitors, stream deck, micro, etc) tot al terra davant la TV i moltes vegades em passa que vull veure la TV inmediatament i tinc que tancar els monitors perquè no molestin, així que vaig pensar que potser amb PowerShell podría fer-ho.

Una cerca ràpida per google em va portar a Windows Tip: 4 Different Ways to Turn Off Desktop Monitor or Laptop Screen ón expliquen entre altres coses, una crida amb un script de PowerShell.

Copiar i enganxar i l’script funciona perfectament, configuro tal i com vaig fer amb els altre botons de l’Stream Deck i els monitors entren en estalvi d’energia, l’únic inconvenient és que la finestra de PowerShell queda oberta i no m’interessa, molesta trobarla oberta al despertar els monitors.

function Set-DisplayOff
{
	$code = @"
	using System;
	using System.Runtime.InteropServices;
	public class API
	{
		[DllImport("user32.dll")]
		public static extern
		int SendMessage(IntPtr hWnd, UInt32 Msg, IntPtr wParam, IntPtr lParam);
	}
	"@
	$t = Add-Type -TypeDefinition $code -PassThru
	$t::SendMessage(0xffff, 0x0112, 0xf170, 2)
}

Set-DisplayOff

Una mica més investigació m’ha portat a descobrir que a part de SendMessage existeix PostMessage, que és dintre de la API Win32 la versió asincrona de SendMessage i per tant no interfereix en el fil d’execució.

Així que el codi de l’script final queda tal que:

function Set-DisplayOff
{
	$code = @"
	using System;
	using System.Runtime.InteropServices;
	public class API
	{
		[DllImport("user32.dll")]
		public static extern
		int PostMessage(IntPtr hWnd, UInt32 Msg, IntPtr wParam, IntPtr lParam);
	}
	"@
	$t = Add-Type -TypeDefinition $code -PassThru
	$t::PostMessage(0xffff, 0x0112, 0xf170, 2)
}

Set-DisplayOff

Canvi de dispositius d’audio amb PowerShell

Després de comprar l’Stream Deck de Elgato li trobava a faltar la manera de poder canviar entre dispositius d’àudio en calent.

Les investigacions em varen portar cap a PowerShell però de sèrie no pot fer aquestes funcions (que sàpiga) però si amb aquesta extensió que vaig trobar a github:

AudioDeviceCmdlets: https://github.com/frgnca/AudioDeviceCmdlets

Amb ella podem llistar els dispositius (tant de reproducció com de gravació) i poder canviar-lo, a part de canviar valors com el volum, etc.

Amb aquesta comanda llistem els dispositius

PS C:\Users\User> Get-AudioDevice -list

Index : 1
Default : False
Type : Playback
Name : Altavoces (Steam Streaming Microphone)
ID : {0.0.0.00000000}.{1a5fae48-a964-4d5a-ba5c-509e63ea6afd}
Device : CoreAudioApi.MMDevice

Index : 2
Default : True
Type : Playback
Name : Altavoces (Realtek High Definition Audio)
ID : {0.0.0.00000000}.{265fcc99-7fa6-4fa2-97bf-93236b4a1391}
Device : CoreAudioApi.MMDevice

Index : 3
Default : False
Type : Playback
Name : BenQ PD2500Q (NVIDIA High Definition Audio)
ID : {0.0.0.00000000}.{45ef6901-5ee0-4752-a0d9-d2fad76fe12c}
Device : CoreAudioApi.MMDevice

Index : 4
Default : False
Type : Playback
Name : Altavoces (Steam Streaming Speakers)
ID : {0.0.0.00000000}.{5deb3169-df93-4c68-b73d-a576584badc6}
Device : CoreAudioApi.MMDevice

Index : 5
Default : False
Type : Recording
Name : Línea de entrada (Realtek High Definition Audio)
ID : {0.0.1.00000000}.{17278a24-459b-4768-b332-b553a81ec097}
Device : CoreAudioApi.MMDevice

Index : 6
Default : False
Type : Recording
Name : Micrófono (Steam Streaming Microphone)
ID : {0.0.1.00000000}.{1bd0aa36-eedd-48a6-a9a5-404e80a7bc14}
Device : CoreAudioApi.MMDevice

Index : 7
Default : True
Type : Recording
Name : Micrófono (HD Pro Webcam C920)
ID : {0.0.1.00000000}.{2831395a-a41e-4285-9078-cb3558e5a024}
Device : CoreAudioApi.MMDevice

Necessitem l’Index al que volem canviar i podem canviar llençant aquesta comanda:

Set-Audiodevice -Index <yournumber>

Amb aquesta comanda ja tindrem canviat el dispositiu, però, com ho podem cridar? Si intentem cridar directament un fitxer d’script ens trobem que no tenim permisos per executar el (nostre propi) script, que per cert, són amb extensió ps1.

Tenim dos opcions, autoritzar TOTS els permisos i per tant no tenir problemes, o per altre part cridar powershell.exe amb alguns comandament extra quan cridem l’script.

powershell -executionPolicy bypass -file "c:\path\to\file\haedphones.ps1"

Amb això saltem els permisos d’execució de l’script… ehm… sí… amb aquesta comanda i jasta, seguretat a tope a powrshell si pots llançar powrshell des de linia de comandes… “hurra”

Evidentment tindrem que fer un altres script per tornar al dispositiu anterior, “obvious”.

Espero que us hagi servit ;)

Nou sistema de decarrega 3alacarta (part 1)

Avui he volgut posar-me a intentar recuperar una eina que tenia una mica oblidada i que había modificat per mí, el gnulinux.cat tv3 que fa molt bé la seva feina però es va deixar d’actualitzar de fa molt temps.

Els developers es van posar en contacte amb mí per afegir-me al projecte (gràcies per pensar amb mí!) però alguna cosa vaig fer malament i m’han suprimir (o no vaig arribar a crear) la meva compra de SourceForge.net… un desastre.

» Read more

Nova versió bytesplitter 0.03b [cat]

Treballant en un altre codi que capgirava el bytes d’un fitxer (swapbyte), m’he adonat que el codi estava malament, enlloc de treballar amb 8 bits (1byte) treballava amb 8bytes! Per tant els fitxers finals no eren correctes.

Aquesta versió sol·luciona aquest error i canvia els noms dels fitxers per file_L.bin (0-7bits) i file_H.bin (8-16 bits).

Byte Splitter for Mac OS X 0.03b (111 downloads)

 

Raspberry PI, VGA i 4:3

Amb l’arribada de la Raspberry PI 3 vaig decidir que seria una bona opció per emular consoles a la recreativa, així que necessitava poder connectar la RBP al monitor del moble.

En el meu cas, el monitor té VGA, euroconenctor, s-video i video compost, però per evitar problemes ja que no tinc accés a la botonera per canviar el canal, així que la millor opció era convertir la senyal HDMI a VGA.

Vaig fer-me amb un adaptador no gaire econòmic en una botiga d’electrònica de consum i em vaig posar a investigar.

» Read more

Programació shell script i la web de ccma

Ja fa uns anys em vaig veure en la necessitat de voler descarregar alguns programes que emetia TVC i que m’agradaria tenir per poder veure quan em vingués de gust.

Com sabeu, tv3alacarta sol donar una data de caducitat als seus programes, i molts cops no tenim temps de veure’ls però si que ens agradaria veurels en algunes hores mortes que tenim de tant en tant, i veuren uns quants de seguits.

Fa uns anys vaig trobar aquests treball que permet fer descarrega dels vídeos: http://gnulinux.cat/2009/05/22/descarregat-videos-de-tv3/ » Read more

bankswap provat

Bé, encara no havia provat el bankswap per mac que vaig penjar fa uns mesos, ahir ho vaig poder provar.

Després de veure unes recomanacions de jocs de SFC/SNES vaig decidir fer-ne un parell.

El primer Ghost Sweeper Mikami (JAP), un joc de plataformes basat en una sèrie de manga, buscant per youtube podreu trobar capítols de l’anime, amb la musica del joc. El que agradava en aquella època, jocs de series de TV amb les músiques que sortien.

Un joc de 8mb que passat el bankswap sols es van tenir que cablejar els dos pins habituals.

El segon joc és el Pocky n Rocky 2 (EUR), aquest és un joc de 12mb, això vol dir que no és múltiple de 8mb i que per tant es tenia que afegir 4mb en blanc al final. Bankswap per mac reconeix aquest problema i emplena la resta de l’arxiu, creant 2 fitxers de 8mb/1MB llestos per gravar a la EPROM, cablejar els dos pins i llestos!

Per tant, la versió de bankswap for mac de la web funciona perfectament! TESTED AND APROVED!

bytesplitter para Mac OSX [es]

El otro día me encontré un cartucho de Mega Drive de los que antes llamábamos, pirata o de los chinos. Lo compré para aprovechar la caja y la carcasa, por suerte, el juego no funcionaba.

En su interior había una placa con dos memorias, estas dos eran de 8bits, algo extraño ya que los juegos de Mega Drive son de 16bits de bus… Así que decidí seguir las pistas y descubrí que una de las dos memorias contenía los primeros 8 bits y la otra los últimos 8bits.

Mega Drive PCB 2x1mbx8bits

Parte de delante y detrás de una PCB de juego de Mega Drive que usa 2 memorias de 8bits.

» Read more

bytesplitter per Mac OSX [cat]

L’altre dia em vaig trobar amb un cartutx de Mega Drive del que abans en dèiem, pirates o xinos. El vaig comprar per aprofitar la caixa i la carcassa, per sort, ja que el joc no funcionava.

En el seu interior hi havia una placa amb dues memòries, aquestes dues memòries eren de 8bits, cosa estranya, ja que els jocs de Mega Drive son de 16bits de bus… Així que vaig decidir seguir les pistes i vaig descobrir que una de les memòries donava els primers 8bits i l’altre els últims 8bits.

Mega Drive PCB 2x1mbx8bits

Part del davant i del redera d’una PCB d’un joc de Mega Drve, utilitza 2 memòries de 8bits en lloc de una de 16bits.

» Read more

1 2