Ver la versión completa : Frecuencia de muestreo en Wiz
Puck2099
14/05/2010, 08:37
Hola,
Ayer estuve haciendo pruebas y, por defecto, estableciendo la frecuencia de muestreo de audio a través del ioctl SNDCTL_DSP_SPEED, los únicos valores válidos que me aceptó fueron 22050, 33000, 44100, 48000 y 64000 hz.
Me gustaría poder configurarlo con 12000 y 24000 o, al menos, con estos 24000 hz.
¿Sabéis si es posible que acepte más valores cambiando algún parámetro?
He probado a cambiar el tamaño del fragmento (SNDCTL_DSP_SETFRAGMENT), pero ni así...
Muchas gracias :)
Ni idea, pero ¿para qué necesitas esos valores tan raros? ¿no te valen los estandar?
Ten en cuenta que algunos chips, al programarlos, sólo admiten ciertos valores por cómo están construidos (en ocasiones esos valores de traducen a 2 o 4 bits de un comando de tamaño byte y sólo dispones de unos valores concretos). Tendría que mirar el datasheet o los registros del DSP para darte una respuesta más concreta.
Hola,
Ayer estuve haciendo pruebas y, por defecto, estableciendo la frecuencia de muestreo de audio a través del ioctl SNDCTL_DSP_SPEED, los únicos valores válidos que me aceptó fueron 22050, 33000, 44100, 48000 y 64000 hz.
Me gustaría poder configurarlo con 12000 y 24000 o, al menos, con estos 24000 hz.
¿Sabéis si es posible que acepte más valores cambiando algún parámetro?
He probado a cambiar el tamaño del fragmento (SNDCTL_DSP_SETFRAGMENT), pero ni así...
Muchas gracias :)
Efectivamente no acepta otras frecuencias, y cambiando el tamaño del fragmento no se consigue nada (bueno si, se consigue que no suene bien, pongas el fragmento que pongas, en la GP2X si iba bien eso).
Puck2099
14/05/2010, 22:10
Ni idea, pero ¿para qué necesitas esos valores tan raros? ¿no te valen los estandar?
Es para el WS4ALL, pues la Wonderswan internamente genera el audio a 12 Khz y si se pudiera configurar la Wiz a 12 o 24 Khz solo tendría que usar la salida tal cual o bien doblar las muestras para obtener el mismo sonido.
Usando los valores "estandar" hay que "aproximar" el sonido, pero bueno, al menos puedo usar los 48 Khz y si se quiere más velocidad pues que suene algo diferente al original.
Ten en cuenta que algunos chips, al programarlos, sólo admiten ciertos valores por cómo están construidos (en ocasiones esos valores de traducen a 2 o 4 bits de un comando de tamaño byte y sólo dispones de unos valores concretos). Tendría que mirar el datasheet o los registros del DSP para darte una respuesta más concreta.
Yo creo que el Pollux permite un amplio rango sin problemas, pero la restricción me da que viene por cómo estará configurado el kernel.
Efectivamente no acepta otras frecuencias, y cambiando el tamaño del fragmento no se consigue nada (bueno si, se consigue que no suene bien, pongas el fragmento que pongas, en la GP2X si iba bien eso).
Ya, lo del fragmento vi que jodía el sonido pero bien... Bueno, si no acepta otras frecuencias habrá que amoldarse a lo que hay.
Muchas gracias por la ayuda :brindis:
Rivroner
14/05/2010, 23:04
Pues sí, ponlo a 48 tío, que yo creo que en ese emu se puede poner el sonido con esa calidad. :)
Puck2099
14/05/2010, 23:07
Pues sí, ponlo a 48 tío, que yo creo que en ese emu se puede poner el sonido con esa calidad. :)
No te creas, parece que la Wonderswan es una "gameboy", pero en realidad el hardware es bastante potente y costoso de emular...
No obstante tampoco estoy dejando el sonido fijo, sino que doy la opción de que cada uno elija a su gusto la frecuencia, filtros, etc.
Rivroner
14/05/2010, 23:14
No, si ya lo sé Puck, pero cuando lo depures yo creo que se podrá jugar sin problemas a 60 frames con sus filtros y sonidaco a 48 khz y todo. :)
Puck2099
14/05/2010, 23:30
No, si ya lo sé Puck, pero cuando lo depures yo creo que se podrá jugar sin problemas a 60 frames con sus filtros y sonidaco a 48 khz y todo. :)
No, si a 60 sí, pero la WS encima es que va a 75 FPS :p
No obstante la verdad es que ahora mismo ya consigo unas velocidades bastante aceptables sin overclocking, pero ya es obsesión mia por optimizar a tope para que vaya "bien" también en la GP2X :)
De todos modos me da a mi que ya poco más puedo "rascar", prácticamente he reescrito todo el código con el que empecé (si queréis puedo poner una comparativa de velocidad de distintas releases) y ya se me agotan las ideas para optimizar (salvo pasar al ensamblador, lo cual quiero hacer en partes críticas del código).
Rivroner
14/05/2010, 23:37
Oño, no sabía lo de los 75 frames.
¿Entonces va tb a 75 hz de sincronización vertical ¿no?
Tendrás que poner la Wiz y la GP2X a 75 hz supongo para no perder la sincronización vertical.
Por suerte ambas soportan 120 hz :)
Puck2099
14/05/2010, 23:42
Oño, no sabía lo de los 75 frames.
¿Entonces va tb a 75 hz de sincronización vertical ¿no?
Tendrás que poner la Wiz y la GP2X a 75 hz supongo para no perder la sincronización vertical.
Por suerte ambas soportan 120 hz :)
Sí, van a 75 hz. En la Wiz creo que la tengo puesta a 120 hz y no he visto problemas (salvo cuando hago pruebas de velocidad y se ponen a más de 100 FPS, pero luego con el autoframeskip no creo que se note.
De todos modos me da a mi que ya poco más puedo "rascar", prácticamente he reescrito todo el código con el que empecé (si queréis puedo poner una comparativa de velocidad de distintas releases) y ya se me agotan las ideas para optimizar (salvo pasar al ensamblador, lo cual quiero hacer en partes críticas del código).
Pues si quieres enviarme una pre-release, puedo hacer un nuevo vídeo con la evolución del emu. [wei] Y si no, al menos para catarlo. :lol:
Puck2099
14/05/2010, 23:56
Pues si quieres enviarme una pre-release, puedo hacer un nuevo vídeo con la evolución del emu. [wei] Y si no, al menos para catarlo. :lol:
Pues a decir verdad me he traído el código "al pueblo" con la idea de meterle el menú y demás opciones este fin de semana para pasarte otra versión nueva.
Esta es la "rama alternativa" de la que te hablé en algún mail en la que llevo un tiempo trabajando y solo se lanza en modo texto. En cuanto integre de nuevo el menú te paso una nueva release :brindis:
Segata Sanshiro
15/05/2010, 00:14
No te creas, parece que la Wonderswan es una "gameboy", pero en realidad el hardware es bastante potente y costoso de emular...
Desde luego, no hay más que ver cómo el beatmania (por poner un ejemplo) usa a tope los cuatro canales de audio digital, con un resultado impresionante para una portátil.
Juer, pues vaya una frecuencia rara que se gasta la WS (bueno, 44100 tampoco es que sea un valor muy corriente ^^U).
Te diría que usases 22050Hz porque la diferencia es mínima, pero claro, el espíritu del emulador es hacer que sea lo más parecido posible al original, así que no digo nada :D:D:D
Juer, pues vaya una frecuencia rara que se gasta la WS (bueno, 44100 tampoco es que sea un valor muy corriente ^^U).
Te diría que usases 22050Hz porque la diferencia es mínima, pero claro, el espíritu del emulador es hacer que sea lo más parecido posible al original, así que no digo nada :D:D:D
¿Que no es un valor corriente? Por dios, yo creo que es el valor MAS corriente de hertzios que hay... es a lo que se samplean los cd's xDDDD
¿Te refieres a los 12000 o a los 44100? porque si son los segundos es porque ya podrían haber escogido 45000 o 40000 o cualquier número fácilmente recordable (44100 lo recordamos fácilmente porque estamps acostumbrados a verlo :D:D:D).
Dice la leyenda, y desconozco si es cierta, que el origen está en utilizar una frecuencia de muestreo que se pudiese emitir usando los sistemas de televisión.
- Sistemas NTSC: 60Hz, 490 líneas útiles, 245 líneas por campo, multiplicamos por 3 para llegar a un rango de frecuencias útiles y tenemos... 60 * 245 * 3 = 44.1 KHz
- Sistemas PAL: 50Hz, 588 líneas útiles, 294 por campo, volvemos a multiplicar por 3 y tenemos... 50 * 294 * 3 = 44.1 Khz.
Dice la leyenda que los CDs se creaban al principio usando equipo de televisión, y de ahí que se usase esa misma frecuencia. Porque, claro, dónde vas a guardar pistas de música CD mientras estás creando el estándar CD. Exacto: en cintas de vídeo.
Dice la misma leyenda que 40KHz no se podía usar porque estaba demasiado cerca del límite de Nyquist, y 48KHz tampoco porque ya existían equipos digitales que grababan a esa frecuencia y no era plan de facilitarla la cosa a los piratillas :D Más frecuencia de 48KHz es tontería porque gasta inútilmente ancho de banda, el oído humano no lo notaría.
Más nfo por ejemplo aquí: http://www.cs.columbia.edu/~hgs/audio/44.1.html
Efectivamente, lo que ha dicho juanvvc es completamente correcto.
Dice la leyenda, y desconozco si es cierta, que el origen está en utilizar una frecuencia de muestreo que se pudiese emitir usando los sistemas de televisión.
- Sistemas NTSC: 60Hz, 490 líneas útiles, 245 líneas por campo, multiplicamos por 3 para llegar a un rango de frecuencias útiles y tenemos... 60 * 245 * 3 = 44.1 KHz
- Sistemas PAL: 50Hz, 588 líneas útiles, 294 por campo, volvemos a multiplicar por 3 y tenemos... 50 * 294 * 3 = 44.1 Khz.
Dice la leyenda que los CDs se creaban al principio usando equipo de televisión, y de ahí que se usase esa misma frecuencia. Porque, claro, dónde vas a guardar pistas de música CD mientras estás creando el estándar CD. Exacto: en cintas de vídeo.
Dice la misma leyenda que 40KHz no se podía usar porque estaba demasiado cerca del límite de Nyquist, y 48KHz tampoco porque ya existían equipos digitales que grababan a esa frecuencia y no era plan de facilitarla la cosa a los piratillas :D Más frecuencia de 48KHz es tontería porque gasta inútilmente ancho de banda, el oído humano no lo notaría.
Más nfo por ejemplo aquí: http://www.cs.columbia.edu/~hgs/audio/44.1.html
Yo entro aqui desde el abusoluto desconocimiento del funcionamiento de la wiz, pero con algo de conocimiento de tratamiento de señales. Como bien dices los 40 khz no se eligieron porque hay personas que son capaces de escuchar rangos superiores a los 20 khz, y como tambien dices ese seria el limite de nesqui. Por lo que hay que muestrear al doble de la frecuencia. Porque no se eligio una mayor para no estar tan justo. espacio. de aquella lo único a mano era el CD, y con eso conseguían llenarlo.
Ahora al tema del post. si tienes un audio con una frecuencia inferior puedes utilizar la tecnica del zero-padding para llegar a completar la frecuencia deseada. de esta forma no modificas la respuesta del original y consigues hacer que a determinada frecuencia la forma sea la misma, a base de rellenar con ceros. (creo que era asi la teoria, xD que ya no la tengo muy fresca :rolleyes:)
No se que capacidad de modificacion habra con los programas de audio. yo lo se por tecnicas de estudio de frecuencia y utilizando el matlab.
Un saludo
Funciono ?? quede con la intriga !
Puck2099
19/05/2010, 21:11
Funciono ?? quede con la intriga !
No, no fue posible que funcionara a 12 o 24 kz.
La frecuencia generada es mayor de la usada, así que he optado por perder esas muestras extra y tampoco suena mal (no me cargo 2000 muestras seguidas sino 26 muestras cada 1/75 de segundo).
Sino con la técnica que te digo de rellenar con ceros (que supongo que los procesadores de audio tendrán) puedes adaptar los audios para funcionar a 33khz.
y si es por velocidad de procesado u optimizacion igual puedes espaciar mas la eliminación de esas muestras. ej: quitar de 1 en 1 cada menos tiempo hasta las necesarias.o de 2 en 2. Lo que te quiero decir que quitando 26 del golpe igual se nota mas en el audio que no de una forma mas progresiva.
Lo de añadir ceros hasta la frecuencia deseada tiene la ventaja de que el espectro de la señal va a quedar inalterado, por lo que supongo que a la hora de reproducirlo no habra ninguna diferencia.
Como no se muy a fondo como funciona este tema de programar videojuegos tampoco te puedo ayudar mucho mas ;)
Puck2099
19/05/2010, 21:59
Sino con la técnica que te digo de rellenar con ceros (que supongo que los procesadores de audio tendrán) puedes adaptar los audios para funcionar a 33khz.
Pero si rellenas con ceros lo que consigues son silencios y creo que es peor perder 2000 muestras de sonido que añadir 11000 muestras de silenco.
y si es por velocidad de procesado u optimizacion igual puedes espaciar mas la eliminación de esas muestras. ej: quitar de 1 en 1 cada menos tiempo hasta las necesarias.o de 2 en 2. Lo que te quiero decir que quitando 26 del golpe igual se nota mas en el audio que no de una forma mas progresiva.
Sí, quedaría mejor, pero también implicaría más tiempo de proceso para calcular en qué momentos quitar esas muestras.
Lo de añadir ceros hasta la frecuencia deseada tiene la ventaja de que el espectro de la señal va a quedar inalterado, por lo que supongo que a la hora de reproducirlo no habra ninguna diferencia.
Lo que no entiendo es esto que dices de que el sonido queda inalterado añadiendo ceros... ¿podrías explicarlo un poco, please?
Igual tengo alguna pequeña pero matona mezcla de conceptos en la neurona. y ahora que lo estoy pensando puede que este equivocado. Con esa técnica lo único que permanece inalterado es el espectro de frecuencias.
Claramente no es lo mismo modificar una señal en el tiempo que en la frecuencia, por lo que te estoy diciendo creo que es totalmente mentira xD
Tienes que disculparme, en el master estamos dando tratamiento de señales, pero la mayoria de las tecnicas se utilizan en el dominio de la frecuencia, tema de filtrados y todo eso.
Con el Zero padding lo que consigues es añadiendo ceros hasta las muestras que necesites para luego obtener una mayor resolución para el estudio en frecuencia.
Creo que aun tengo verde esos temas jajaja.
Suerte con el game ;)
Pues eso me parecía la primera vez que leí la solución, un error muy grande, porque lo que haces al poner ceros es añadir una señal cuadrada al sonido original y multimplicarla, que en el dominio de la frecuencia implica añadir una señal sinc y convolucionarla con el espectro... cosa que ya es demasiado complicada para hacerlo de cabeza (matlab powa).
Lo que sí se puede hacer es usar una frecuencia mayor y aproximar la señal. Lo más fácil sería añadir muestras de forma que, gráficamente, representen una linea recta. Por ejemplo, tenemos una primera muestra que vale 10 y una segunda que vale 20, y tenemos que añadir tres valores intermedios, que serían 12, 15 y 17.
el sonido saldría con un retardo de una muestra a 12KHz, lo que es un tiempo más que aceptable, y la pérdida de calidad por aproximar mediante rectas creo que es inapreciable (si encima le metemos el filtrado de los parásitos y la calidad de los altavoces...).
Si quieres algo de más calidad, tendrás que buscar algoritmos de estimación mediante sinusoides, o tirar de FFT y IFFT para reconstruir la señal.
Siento el fallo, mezcle cosas :llorosr:
Siento el fallo, mezcle cosas :llorosr:
No te preocupes: en un exámen nos pusieron análisis de señales continuas, cuya transformada de Fourier eran deltas... y acabé haciendo transformaciones inversas y convoluciones como si fuera una señal discreta :D:D:D
La mirada asesina de la profesora no se me olvida en la vida :quepalmo:
Powered by vBulletin® Version 4.2.5 Copyright © 2025 vBulletin Solutions Inc. All rights reserved.