Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - Eleкtro

#1411
Cita de: Pisangas en 21 Diciembre 2017, 15:26 PMQuite ciertos parámetros por que a pesar de que existen, el power shell no me los reconocía tales como -ENCODING y -PassThru con esos parámetros me arroja una respuesta "A parameter cannot be found that matches parameter name...."

La disponibilidad de algunos parámetros depende de la versión de PowerShell que tengas instalada en tu sistema operativo, ya que en cada nueva versión de Windows viene integrada una versión más reciente de PowerShell con más funcionalidades.

Saludos
#1412
.NET (C#, VB.NET, ASP) / Re: Grabadora de Sonido
21 Diciembre 2017, 17:40 PM
Cita de: rigorvzla en 21 Diciembre 2017, 15:27 PM
EDITO: Resulta que probando la grabadora NO graba lo que sale de las cornetas , solo captura el microfono, tomaba las cornetas por que es sensible y a lo capturaba el sonido de las cornetas por el microfono, vuelvo al inicio. en este caso como puedo hacer que en vez de el microfono me capture las cornetas este ejemplo que consegui en internet?

Se graba lo que suena en el dispositivo de grabación predeterminado, así que en tu sistema operativo debes establecer el dispositivo de salida de grabación correcto, que en mi caso sería este (para que te hagas una idea):



Si quieres obtener más control para poder seleccionar el dispositivo de grabación en tiempo de ejecución, y grabar lo que suena en ese dispositivo, entonces te recomiendo usar la librería de terceros que ya te mencioné, nAudio:

Con esa librería es bastante sencillo enumerar los dispositivos o mixers instalados en el equipo, e iniciar una grabación en varios formatos de audio. Aquí tienes un ejemplo aleatorio:

Saludos.
#1413
Cita de: rigorvzla en 21 Diciembre 2017, 15:14 PMsiempre me pregunte si era posible redirigir la configuracion que se guardaba en las settings por el ususario en otro lado que no fuera %appdata%

Si, es posible hacerlo, pero mejor ni lo intentes o te morirás del asco xD, requiere bastante esfuerzo para implementar varias funcionalidades.

Yo también siempre tuve esa misma duda en el pasado, y apenas existe información al respecto en Internet o en la MSDN (y en los libros absolutamente nada de nada), así que tuve que recurrir a una comunidad de gurús como StackOverflow, donde me ofrecieron la solución que puedes ver aquí:





...pero, si quieres mi opinión, y suponiendo que solo tengas la necesidad de manipular tipos de string, booleanos o numéricos en tus "settings" (no Bitmaps, Arrays, ni cualquier otra cosa que no sea un string, un boolean o un número), entonces te aconsejo que mejor inviertas el tiempo en desarrollar (o copiar y pegar) cualquier parseador de archivos INI, y así podrás guardar la configuración de tu programa en un simple archivo.ini en el mismo directorio que tu programa, y con el beneficio de que es un formato que cualquier usario con o sin experiencia informática puede manipular facilmente... y gracias a eso tu programa será "portable", ya que será suficiente con copiar el executable y el archivo.ini a un USB para hacerlo funcionar sin necesidad de instalación previa, pero bueno, esto ya es cuestión de gustos.

Saludos.
#1414
.NET (C#, VB.NET, ASP) / Re: Grabadora de Sonido
21 Diciembre 2017, 16:55 PM
Cita de: rigorvzla en 21 Diciembre 2017, 15:27 PMlo probe y si graba lo que sale de las cornetas (con una calidad baja cabe mencionar)

En la función MciSendString puedes establecer la calidad para grabar un archivo.wav a 44.1000 khz y 192.000 kbps. Es que no lees... copias y pegas códigos sin documentarte de las funciones de la API de Windows que estás usando en el código copiado, y así obtienes resultados mediocres hechos por gente con conocimientos medicores (no me refiero a ti, sino al árabe ese, y al otro del que le copiaste el código), en este caso obtienes un código que efectua una grabación con calidad muy mediocre (y no sabes por qué, ni tampoco si eso tiene solución, por que no has leido nada al respecto).

Estoy cansado de decirlo, pero no me rendiré, en la MSDN tienes todo lo que necesitas saber sobre la programación de .NET Framework y de Windows en general....


...Ahí tienes todos los parámetros disponibles para el tipo waveaudio del comando "set" de MCI... para establecer la calidad de audio.

La sintaxis para realizar una grabación WAVE estéreo y de calidad decente, sería así:
Código (csharp) [Seleccionar]
string alias = "nombre_de_alias";

string openCommand =
   string.Format("open new type waveaudio alias {0} wait", alias);

string setCommand =
   string.Format("set {0} time format ms bitspersample {1} channels {2} samplespersec {3} bytespersec {4} alignment {5}",
                 alias, 16, 2, 44100, 192000, 4);

string recordCommand =
   string.Format("record {0}", alias);

NativeMethods.MciSendString(openCommand, null, 0, IntPtr.Zero);
NativeMethods.MciSendString(setCommand, null, 0, IntPtr.Zero);
NativeMethods.MciSendString(recordCommand, null, 0, IntPtr.Zero);





Cita de: rigorvzla en 21 Diciembre 2017, 15:27 PMahora te pregunto hay alguna manera de adaptarla a wpf?

No entiendo la pregunta, ¿adaptar exactamente el que?. Que yo sepa los ensamblados de WPF no exponen ningún miembro administrado para la grabación de audio (quizás me equivoco, es un conjunto de namespaces muy extenso, pero he buscado y no hay nada), así que si no quieres depender de librerías de terceros (ej. nAudio) (algo que en mi opinión sería mucho mejor opción que utilizar MCI), la API de MCI es tu única opción.




Citarrec y stop/save(automatico) alguna idea ?

Para grabar, arriba te mostré como.

Para detener la grabación solo tienes que enviar el comando "stop" de MCI, junto al alias que le hayas asignado a la grabación...
Código (csharp) [Seleccionar]
NativeMethods.MciSendString(string.Format("stop {0}", alias), null, 0, IntPtr.Zero);

Y por último usarías el comando "save" de MCI para guardar la grabación en un archivo local:
Código (csharp) [Seleccionar]
NativeMethods.MciSendString(string.Format(@"save {0} ""{1}""", alias, @"C:\Ruta existente\audio.wav"), null, 0, IntPtr.Zero);





EDITO:

Por cierto, te sugiero que utilices la misma definciión que uso yo en mi librería ElektroKit:

Código (vbnet) [Seleccionar]
<SuppressUnmanagedCodeSecurity>
<DllImport("WinMM.dll", EntryPoint:="mciSendString", SetLastError:=True, CharSet:=CharSet.Auto, BestFitMapping:=False, ThrowOnUnmappableChar:=True)>
Public Shared Function MciSendString(ByVal command As String,
                                     ByVal buffer As StringBuilder,
                                     ByVal bufferSize As Integer,
                                     ByVal hWndCallback As IntPtr
) As Integer
End Function


Saludos.
#1415
Cita de: Pisangas en 21 Diciembre 2017, 14:22 PM
Parce tenes razón, tal vez ignorancia en el tema, casi no me involucro mucho con estos temas, pero tratare de conocerlo un poco mas, te agradezco profundamente tomes tiempo de tu día en responder las inquietudes, muy agradecido, con lo que me das me arreglas la vida.

Ahora has hecho que me sienta mal :P, no sé ya como habrá sonado lo que dije, pero me gustaría aclararlo:

lo de ignorante no lo decia por ti, solo estaba generalizando, quise decir que existe una ignorancia global, por que Batch está sobrevalorado por el 90% de los usuarios informáticos (por decir una cifra aleatoria pero realista), que por un motivo o por otro desconocen el resto de opciones a su alcance (como Powershell), y entonces, sin darse cuenta caen en el "error", por que se empeñan en hacer cosas con Batch para las cuales Batch sencillamente no está capacitado (o en algunos casos si, pero no vale la pena debido al consumo de tiempo y la ineficacia de esa herramienta).

No te lo tomes a mal, no era mi intención llamarte ignorante de forma despectiva ni nada parecido, tampoco me estaba refiriendo a ti. Y la gran mayoria hemos empezado a programar en Windows creyendo que Batch era una buena herramienta de programación, yo incluido.

En fin, espero que el código que te mostré te haya servido, lo puedes ejecutar como si se tratase de un archivo.bat, pero con extensión .ps1.

Un saludo.
#1416
.NET (C#, VB.NET, ASP) / Re: Grabadora de Sonido
21 Diciembre 2017, 13:56 PM
Cita de: rigorvzla en 21 Diciembre 2017, 13:39 PMme podrian decir que falta ?

En mi caso el código me funciona, pero claro el directorio de salida debe existir...
Código (csharp) [Seleccionar]
System.IO.Directory.CreateDirectory(@"C:\work");

Si ya te diste cuenta de eso y ya probaste en un directorio que si existe pero la grabación de audio sigue sin funcionarte, entonces depura el valor de retorno de la función mciSendString (todas las veces que la llamas), es la forma más efectiva para descubrir y comprender por que motivo no funciona en tu PC...

Cita de: MSDNReturn value

Returns zero if successful or an error otherwise. The low-order word of the returned DWORD value contains the error return value. If the error is device-specific, the high-order word of the return value is the driver identifier; otherwise, the high-order word is zero. For a list of possible error values, see MCIERR Return Values.

To retrieve a text description of return values, pass the return value to the mciGetErrorString function.

En este enlace tienes los nombres de los errores y sus descripciones:

Y aquí tienes los valores, los he sacado de la SDK de Windows 8.1 (lo más aconsejable sería que te descargues la SDK de tu misma versión de Windows ya que podría haber valores añadidos).


/* mmsyscom.h */
#define MCIERR_BASE            256

/* mciapi.h */
/* MCI error return values */
#define MCIERR_INVALID_DEVICE_ID        (MCIERR_BASE + 1)
#define MCIERR_UNRECOGNIZED_KEYWORD     (MCIERR_BASE + 3)
#define MCIERR_UNRECOGNIZED_COMMAND     (MCIERR_BASE + 5)
#define MCIERR_HARDWARE                 (MCIERR_BASE + 6)
#define MCIERR_INVALID_DEVICE_NAME      (MCIERR_BASE + 7)
#define MCIERR_OUT_OF_MEMORY            (MCIERR_BASE + 8)
#define MCIERR_DEVICE_OPEN              (MCIERR_BASE + 9)
#define MCIERR_CANNOT_LOAD_DRIVER       (MCIERR_BASE + 10)
#define MCIERR_MISSING_COMMAND_STRING   (MCIERR_BASE + 11)
#define MCIERR_PARAM_OVERFLOW           (MCIERR_BASE + 12)
#define MCIERR_MISSING_STRING_ARGUMENT  (MCIERR_BASE + 13)
#define MCIERR_BAD_INTEGER              (MCIERR_BASE + 14)
#define MCIERR_PARSER_INTERNAL          (MCIERR_BASE + 15)
#define MCIERR_DRIVER_INTERNAL          (MCIERR_BASE + 16)
#define MCIERR_MISSING_PARAMETER        (MCIERR_BASE + 17)
#define MCIERR_UNSUPPORTED_FUNCTION     (MCIERR_BASE + 18)
#define MCIERR_FILE_NOT_FOUND           (MCIERR_BASE + 19)
#define MCIERR_DEVICE_NOT_READY         (MCIERR_BASE + 20)
#define MCIERR_INTERNAL                 (MCIERR_BASE + 21)
#define MCIERR_DRIVER                   (MCIERR_BASE + 22)
#define MCIERR_CANNOT_USE_ALL           (MCIERR_BASE + 23)
#define MCIERR_MULTIPLE                 (MCIERR_BASE + 24)
#define MCIERR_EXTENSION_NOT_FOUND      (MCIERR_BASE + 25)
#define MCIERR_OUTOFRANGE               (MCIERR_BASE + 26)
#define MCIERR_FLAGS_NOT_COMPATIBLE     (MCIERR_BASE + 28)
#define MCIERR_FILE_NOT_SAVED           (MCIERR_BASE + 30)
#define MCIERR_DEVICE_TYPE_REQUIRED     (MCIERR_BASE + 31)
#define MCIERR_DEVICE_LOCKED            (MCIERR_BASE + 32)
#define MCIERR_DUPLICATE_ALIAS          (MCIERR_BASE + 33)
#define MCIERR_BAD_CONSTANT             (MCIERR_BASE + 34)
#define MCIERR_MUST_USE_SHAREABLE       (MCIERR_BASE + 35)
#define MCIERR_MISSING_DEVICE_NAME      (MCIERR_BASE + 36)
#define MCIERR_BAD_TIME_FORMAT          (MCIERR_BASE + 37)
#define MCIERR_NO_CLOSING_QUOTE         (MCIERR_BASE + 38)
#define MCIERR_DUPLICATE_FLAGS          (MCIERR_BASE + 39)
#define MCIERR_INVALID_FILE             (MCIERR_BASE + 40)
#define MCIERR_NULL_PARAMETER_BLOCK     (MCIERR_BASE + 41)
#define MCIERR_UNNAMED_RESOURCE         (MCIERR_BASE + 42)
#define MCIERR_NEW_REQUIRES_ALIAS       (MCIERR_BASE + 43)
#define MCIERR_NOTIFY_ON_AUTO_OPEN      (MCIERR_BASE + 44)
#define MCIERR_NO_ELEMENT_ALLOWED       (MCIERR_BASE + 45)
#define MCIERR_NONAPPLICABLE_FUNCTION   (MCIERR_BASE + 46)
#define MCIERR_ILLEGAL_FOR_AUTO_OPEN    (MCIERR_BASE + 47)
#define MCIERR_FILENAME_REQUIRED        (MCIERR_BASE + 48)
#define MCIERR_EXTRA_CHARACTERS         (MCIERR_BASE + 49)
#define MCIERR_DEVICE_NOT_INSTALLED     (MCIERR_BASE + 50)
#define MCIERR_GET_CD                   (MCIERR_BASE + 51)
#define MCIERR_SET_CD                   (MCIERR_BASE + 52)
#define MCIERR_SET_DRIVE                (MCIERR_BASE + 53)
#define MCIERR_DEVICE_LENGTH            (MCIERR_BASE + 54)
#define MCIERR_DEVICE_ORD_LENGTH        (MCIERR_BASE + 55)
#define MCIERR_NO_INTEGER               (MCIERR_BASE + 56)

#define MCIERR_WAVE_OUTPUTSINUSE        (MCIERR_BASE + 64)
#define MCIERR_WAVE_SETOUTPUTINUSE      (MCIERR_BASE + 65)
#define MCIERR_WAVE_INPUTSINUSE         (MCIERR_BASE + 66)
#define MCIERR_WAVE_SETINPUTINUSE       (MCIERR_BASE + 67)
#define MCIERR_WAVE_OUTPUTUNSPECIFIED   (MCIERR_BASE + 68)
#define MCIERR_WAVE_INPUTUNSPECIFIED    (MCIERR_BASE + 69)
#define MCIERR_WAVE_OUTPUTSUNSUITABLE   (MCIERR_BASE + 70)
#define MCIERR_WAVE_SETOUTPUTUNSUITABLE (MCIERR_BASE + 71)
#define MCIERR_WAVE_INPUTSUNSUITABLE    (MCIERR_BASE + 72)
#define MCIERR_WAVE_SETINPUTUNSUITABLE  (MCIERR_BASE + 73)

#define MCIERR_SEQ_DIV_INCOMPATIBLE     (MCIERR_BASE + 80)
#define MCIERR_SEQ_PORT_INUSE           (MCIERR_BASE + 81)
#define MCIERR_SEQ_PORT_NONEXISTENT     (MCIERR_BASE + 82)
#define MCIERR_SEQ_PORT_MAPNODEVICE     (MCIERR_BASE + 83)
#define MCIERR_SEQ_PORT_MISCERROR       (MCIERR_BASE + 84)
#define MCIERR_SEQ_TIMER                (MCIERR_BASE + 85)
#define MCIERR_SEQ_PORTUNSPECIFIED      (MCIERR_BASE + 86)
#define MCIERR_SEQ_NOMIDIPRESENT        (MCIERR_BASE + 87)

#define MCIERR_NO_WINDOW                (MCIERR_BASE + 90)
#define MCIERR_CREATEWINDOW             (MCIERR_BASE + 91)
#define MCIERR_FILE_READ                (MCIERR_BASE + 92)
#define MCIERR_FILE_WRITE               (MCIERR_BASE + 93)

#define MCIERR_NO_IDENTITY              (MCIERR_BASE + 94)

/* all custom device driver errors must be >= than this value */
#define MCIERR_CUSTOM_DRIVER_BASE       (MCIERR_BASE + 256)


Saludos.
#1417
Cita de: rigorvzla en 21 Diciembre 2017, 13:17 PM
ahora  que lo mencionas, se me crean varios archivos como lo que es. el .pdb, este sirve como reporte de debug? lo puedo leer ?

Cita de: rigorvzla en 21 Diciembre 2017, 13:17 PM
.exe.manifiest y .exe.config sirven para algo como para encontrar errores?

El archivo.pdb no sirve para reportar nada, ni para encontrar errores, sino para depurar tu app. Si quieres saber que se guarda exactamente en ese archivo, lee el primer enlace de la MSDN que te mostré.

El reporte de errores lo harias por ti mismo desarrollando un algoritmo que leyese la excepción generada que hayas controlado (el objeto de tipo Exception), el contenido de la propiedad Exception.Message y Exception.StackTrace, y los demás datos de utilidad que quieras "reportar"... luego lo envias por email (desde el código fuente, desde .NET/C#, vaya), o haces lo que quieras con esa información obtenida.




No, para nada. En el archivo.config y archivo.manifest se almacena cierta información ( como la versión necesaria de las dependencias .dll de tu app ) y se puede especificar diversas propiedades para controlar ciertos aspectos de tu app, aquí tienes la documentación de todas esas propiedades y su propósito:


En el archivo .config también se guarda la configuración de tu programa (el valor de las propiedades específicas a nivel de aplicación), lo que estuviste preguntando aquí, las "settings":

Nota: las propiedades a nivel de usuario se almacenan en otro directorio (otro archivo.config), aunque por otro lado si lo deseas siempre puedes especificar dichas propiedades en el archivo.config que se genera junto al .exe en la misma carpeta para overridear el valor inicial por defecto de dichas propiedades.

Saludos
#1418
Cita de: Pisangas en 20 Diciembre 2017, 22:13 PM
alguien me puede colaborar, tengo un archivo csv separado por | del cual solo me interesan algunas columnas, existe alguna manera a traves de un bat de extraer esta data a otro archivo txt.

Desde siempre ha existido el mal hábito, ignorancia o la desinformación de pensar que Batch es un lenguaje de programación, que sirve para todo y que es la mejor solución y la solución más sencilla ante cualquier problema programático... pero NO, ninguna de esas declaraciones es cierta, y mucho menos cuando de trata de llevar a cabo un parsing de datos para parsear un formato específico (una tabla CSV) ya que Batch no provee ninguna funcionalidad built-in para ello, es muy limito e ineficiente, así que tendrías que usar un bucle de tipo For /F para parsear el contenido del texto y delimitar palabras mediante el uso de tokens. Se puede hacer en Batch, por supuesto, pero hacerlo sería muy tedioso (demasiado tiempo de desarrollo en comparación con cualquier otro lenguaje de verdad), y dando como resultado un código engorroso y poco eficiente en ciertos escenarios.

En otras palabras, no vale la pena ni molestarse en intentar hacerlo en Batch habiendo mejores opciones, sí, me estoy refiriendo a PowerShell...

Te explico. Teniendo un CSV con este contenido:

File.csv
Product|Price|Amount
Broccoli|75|1
Carrots|122|2
Beans|350|3


Puedes usar PowerShell de la siguiente manera para importar una tabla CSV desde un archivo, "extraer" las columnas que quieras, y opcionálmente crear una simple interfáz gráfica con un gridview para mostrar el resultado:

Script.ps1
Código (css) [Seleccionar]
$csv     = Import-Csv -Path "C:\File.csv" -Delimiter "|" -Encoding "Default"
$columns = ($csv | select "Product","Price")

$columns | Out-GridView -PassThru -Title "Title"

#$products = ($columns).Product
#ForEach ($product in $products){
#  Write-host $product
#}

#$prices = ($columns).Price
#ForEach ($price in $prices){
#  Write-host $price
#}




PD: las lineas de código comentadas son para demostrarte como puedes hacer una iteración de las celdas de una columna específica.

Saludos.
#1419
Cita de: TheJucas21 en  1 Marzo 2016, 17:12 PMetc como lo cambio..?

Cita de: IgnaGame5 en 21 Diciembre 2017, 11:16 AMDebes Hacer Ësta Combinación,"Fn + W"

Si esa solución no te funcionase, siempre puedes usar programas como SharpKeys o KeyTweak para remapear las teclas a tu antojo...








Saludos.
#1420
Cita de: **Aincrad** en 20 Diciembre 2017, 21:07 PMPD : Al remplazar el código por el que me pusiste me laza errores por doquier.
a ti también te salen?

No es una simple cuestión de copiar y pegar (no voy a modificarte todo el proyecto para hacer yo todas las correcciones, solo compartí contigo los P/Invokes que deberías usar en tu proyecto), como ya te comenté:

Cita de: Elektro...Evidentemente vas a tener que realizar las adaptaciones necesarias en el resto de tu código, puesto que los parámetros de las funciones cambian de tipo (son portables), del código que tenías, al que te acabo de mostrar.

Te van a salir muchos errores por que en tu código original usas tipos diferentes para llamar a esas funciones, entre otras cosas.

Saludos