La conversión de wav a mp3 y de vuelta
Este artículo cubre una breve introducción a la de windows Administrador de Compresión de Audio API.
Esta es una copia de un artículo que escribí para los Desarrolladores de Delphi Boletín de noticias
Los componentes que he escrito para este artículo son parte de un proyecto de código abierto y está disponible en mi página de inicio.
Administrador de Compresión de Audio
hace Muchos años, antes de que realmente sabía lo que era internet, he oído un rumor de un 'Teléfono de Internet'. Esta pieza de software podría supuestamente transmisión de voz entre dos personas conectadas a internet en tiempo real, permitiendo Mundial de llamadas de teléfono para el precio de una llamada local. Con Lyn hermano que vive en los U. S. A. y los que viven en el reino unido, las llamadas telefónicas eran pocos y distantes entre sí, y siempre demasiado caro. Así, se puede imaginar lo emocionante de este rumorea que la tecnología era para nosotros. Tan emocionante, de hecho, que tenemos de nosotros mismos conectado.
cortar una larga historia corta, hemos probado este software de teléfono y fue horrible ! Tan malo en el hecho de que estamos atrapados con nuestro teléfono normal y ridículo cargos de teléfono.
¡BUENAS NOTICIAS ! Eso fue hace mucho tiempo, y desde entonces las cosas han venido una manera larga (y las llamadas de teléfono son también mucho más barato). Con la creciente popularidad de la internet, los medios de comunicación se ha convertido en mayor calidad pero de menor tamaño.
en la actualidad Hay numerosos formatos de sonido de transmisión alrededor, e incluso streaming de vídeo, y todo esto ha sido hecho accesible a personas de muy bajo ancho de banda. Eso no es todo, no sólo tienen estos formatos (Quicktime, RealAudio, e incluso MP3) se vuelven más populares, que también se han vuelto más accesibles para el desarrollador.
Codecs
Algunas de estas rutinas de compresión se han hecho accesibles a través de la introducción de 'codecs'. Un número de códecs instalado como estándar en la instalación de Windows (gracias Microsoft !)
GSM - creo que este formato es utilizado por algunas redes de telefonía móvil
DSP TrueSpeech - he oído una demostración de este 1 de bits formato de audio, muy claro !
Fraunhofer IIS MP3 - Este es sin duda mi favorito de todos ellos, que le permite hacer su propio MP3
PCM - El estándar utilizado por windows, la mayoría de los códecs pueden convertir a/desde el PCM
Nota :
Una lista completa se puede obtener en la sección MultiMedia de tu panel de control. Haga doble clic en 'MultiMedia', a continuación, haga clic en la ficha 'dispositivos' y, a continuación, expanda de compresión de audio
Así que, ¿cuál es el punto de un codec ? Así, un códec es un poco como un componente ActiveX. Los componentes ActiveX permite a los desarrolladores implementar la funcionalidad en sus aplicaciones sin tener que escribir todo el código (por ejemplo, la incorporación de un documento de Word). Códecs de hacer el mismo tipo de cosa sino que se concentran en la conversión de formatos de medios en otros formatos de medios. Por ejemplo, si quieres escribir una aplicación con la que tomó los datos de audio desde un CD de audio, y luego se convierte en un MP3, el único trabajo que tendría que hacer usted mismo sería
- Extraer los datos de audio de la pista
- Escribir una válida MP3 encabezado de tu disco duro
- Instruir el correspondiente codec para codificar los datos de audio como MP3
ACM y de la API
en primer lugar, Voy a mencionar que ACM significa 'Administrador de Compresión de Audio'. Esta es la biblioteca escrito por Microsoft como parte de Windows que actúa como la interfaz del programador a los codecs.
El ACM realmente pertenece MMSystem.pas (el cual se encarga multimedia de Windows), pero, por alguna razón, ha sido omitido. La primera tarea, por tanto, es encontrar una copia de MSACM.pas, que es una API de conversión de esta API. La que yo he encontrado más útil fue la conversión por Francois Piette, que fue publicado el Proyecto Jedi (www.Delphi-Jedi.org).
ACM requiere que el programador para realizar los siguientes pasos para convertir a los medios de comunicación entre los formatos
- Usted debe decidir sobre su formato de Entrada y Salida. Esto se basa en la TWaveFormatEX registro, pero, advirtió, este registro se estructura en realidad, no es lo suficientemente grande para almacenar la información necesaria de la mayoría de los codecs.
es debido a esto que he utilizado mi propia TACMFormat registro, que no es más que una TWaveFormatEX registro con un extra de unos pocos bytes marcados por el final. Usted realmente no tiene forma (que yo sepa) de averiguar lo que
estos bytes adicionales decir, o cómo se debe configurar. Mi solución a este problema fue el uso de la acmFormatChoose para permitir al desarrollador elegir los formatos en tiempo de diseño, y luego tener los valores transmitidos en el IDE como una propiedad personalizada (más sobre esto más adelante). - Usted debe, a continuación, abra un ACM corriente. Esto se hace llamando a cmStreamOpen, pasando por los formatos de Entrada y Salida para que el ACM es consciente de lo que se requiere de él. En este punto, el ACM devolver un identificador válido de un arroyo, o devolverá un código de error como ACMERR_NotPossible para indicar que la conversión solicitada no se puede realizar (más sobre esto más adelante).
- El elemento siguiente a realizar es determinar el tamaño del búfer de salida. Llamar acmStreamSize informará de la ACM de cuántos bytes tiene la intención de suministrar con cada vez que, a continuación, devolver el
tamaño del búfer de salida (esto casi siempre ser sobre estimada para asegurarse de que usted proporciona un búfer suficientemente grande). - El último paso de la preparación es preparar un encabezado. Todo lo que tenemos que hacer es llamar a acmStreamPrepareHeader pasar el flujo de manejar que hemos recibido de acmStreamOpen. El encabezado que podemos preparar también le dirá al ACM la dirección de nuestra 'fuente' de búfer, y la dirección de nuestro 'destino' buffer (El ACM no asignar esta memoria para nosotros, tenemos que asignar nosotros mismos).
En este punto, todos los de nuestra preparación se realiza el trabajo. Todo lo que necesitamos hacer ahora es, en realidad, la solicitud de que nuestros datos se convierten. Dado que todos los de nuestra preparación es completa, esto es realmente una muy simple paso. Esto se consigue llamando a acmStreamConvert. Esta rutina requiere de nosotros para el suministro de la Corriente de Manejar (Para que sepa cuáles son los formatos que estamos trabajando), y el Encabezado de la Manija (para que no se conoce el tamaño, la ubicación de la fuente y de destino buffers). Esta rutina se especifique el número real de bytes utilizados en la conversión,
cbDstLengthUsed dentro de la cabecera. Su ACM sesión está ahora listo para otro fragmento de datos !
una Vez que haya terminado con su ACM sesión es el momento de liberar los recursos que hemos utilizado. Esta es la parte más sencilla de todas. El encabezado es liberado mediante acmStreamUnprepareHeader, y la corriente se libera mediante acmStreamClose.
la Elección de un formato
Antes de realizar cualquiera de los pasos anteriores, debemos tener nuestro formatos de entrada y salida listo. Como he dicho antes, estos formatos se basan en TwaveFormatEX (declarado en MMSystem.pas), que es simplemente un registro especificando las tasas de bits, frecuencia, etc. etc. A menos que usted sólo tiene la intención de convertir entre diferentes formatos PCM (que es realmente muy poco probable), este formato no es sólo va a ser suficiente. El siguiente formato se utiliza en lugar de todo el código del componente conectado.
TACMWaveFormat = lleno de registro
& nbsp & nbsp caso entero de
& nbsp & nbsp & nbsp & nbsp 0 : (Formato : TWaveFormatEx)
& nbsp & nbsp & nbsp & nbsp 1 : (RawData : Array[0..128] de bytes)
& nbsp & nbsp final
La idea aquí es que podemos acceder a la TWaveFormatEX de datos haciendo referencia al Formato de la parte del registro, sin embargo, RawData nos proporciona suficiente espacio para cualquier información adicional requerida para los diferentes códecs.
a Pesar de que no sabemos el tamaño de esta información adicional, o lo que representa, es todavía una tarea sencilla para adquirirlo. Esto se hace usando acmFormatChoose.
AcmFormatChoose requiere sólo un parámetro de tipo TACMFormatChooseA. Este parámetro es una estructura simple, la celebración de la siguiente (relevante) de la información.
pwfx
Un puntero a un TWaveFormatEX estructura para recibir el resultado (que en realidad pasa TACMFormat)
cbwfx
El tamaño en bytes del buffer que es para recibir el resultado.
cbStruct
El tamaño de esta estructura
Nota:
Otro elemento que vale la pena mencionar es fdwStyle, que contiene indicadores que especifican las opciones adicionales para la selección del formato de cuadro de diálogo. En particular, es el (muy larga) indicador de ACMFORMATCHOOSE_STYLEF_INITTOWFXSTRUCT, que informa el cuadro de diálogo que el buffer apuntado por pwfx ya contiene un formato válido, que debe mostrarse como el valor predeterminado cuando la dailog aparece).
Un poco de Chino susurro
ya mencioné la ACMERR_NotPossible de error. Esto puede ocurrir por un par de razones.
Los dos primeros a la nota (simplemente porque son los más fáciles de explicar)
- El códec que se especifica en su máquina, puede no estar disponible en una máquina del cliente
- a Pesar de que usted puede convertir de un determinado formato de audio, no se puede convertir. Este es el caso con el Fraunhofer IIS MP3. Mientras que Windows 9x y Windows NT usuarios pueden crear archivos MP3 al contenido de su corazón, por alguna razón, la capacidad fue eliminado en Windows 2000 (Sí, de nuevo gracias de Microsoft). Aunque Win2K los usuarios pueden escuchar los resultados, no se les permite a generar menos que pagar a alguien primero !
El final es un poco más complicado, y garantiza la frase
'Chino Susurro'.
No todos los ACM formatos son intercambiables, por ejemplo (apenas estoy haciendo, así que si realmente funcionan no escribir diciendo que yo estaba equivocado) usted no puede ser capaz de convertir
GSM 8BIT MONO > MP3 8BIT MONO
Usted necesita para encontrar un 'hombre medio'. Esto es muy a menudo un formato PCM, ya que la mayoría (si no todos) de los códecs fueron diseñados para convertir PCM en un formato adecuado.
El ejemplo anterior sería, por tanto, ser logrado como así.
GSM 8BIT MONO > PCM de 8 bits MONO > MP3 8BIT MONO
Convertir a 'MP3 16BIT ESTÉREO' probablemente requerirían otro paso (entre el PCM y MP3, con el fin de convertir a 8 bits PCM PCM de 16 bits).
creo que ahora entiendo por qué esta sección se llama 'Chino Susurro'. (Si alguien me puede decir el significado de esa frase, yo estaría muy agradecido !)
Los talentos ocultos de ACM
Usted puede o no puede aún estar convencido de que el ACM es una buena cosa. Este parece un buen montón de trabajo para convertir de un formato de medios de comunicación a otro. Considerando la alternativa de escribir su propio formato de audio lo suficientemente pequeño como para su transmisión por internet, o escribir tu propio MP3 rutina de compresión, ACM es lo que nos Británica llamada 'instalan fácilmente'.
Imagina una aplicación simple que toma de entrada de micrófono, lo comprime a un formato adecuado para la transmisión a través de un ancho de banda muy bajo, y luego la transmite a un equipo de destino a través de TCP/IP. Al mismo tiempo que recibe los datos comprimidos, lo descomprime y luego juega fuera de su altavoz (también conocido como un simple teléfono a través de internet).
¿que me dicen de simple ? Bueno, en realidad, sí !
Esto suena como un montón de trabajo, y probablemente es (con la excepción de los componentes suministrados en realidad es muy sencillo).
aquí es donde los talentos ocultos de la ACM entran en juego. Muy pocos de los códecs ACM son la Onda-representable. Lo que básicamente significa que puede ser tratada como un estándar de dispositivo de ONDA cuando la reproducción / grabación de audio.
Por ejemplo. Es muy fácil abrir una entrada para un GSM fuente de sonido. Una vez que usted reciba un búfer de datos desde el dispositivo de entrada de onda ya es comprimido y listo para transmitir. Por otro lado, tan pronto como se reciben datos a través de su socket TCP/IP, es posible jugar a estos datos directamente a través de una ola de dispositivos.
- los Datos en el MIC
- Enviar datos a través del socket
- Datos de socket
- Enviar datos a la onda de salida del dispositivo
El estándar de los datos PCM sería demasiado grande para la transmisión en tiempo real a través de un módem. Mientras que GSM 6.1 puede ser transmitido como baja de 1.5 k/segundo, y MP3 MONO de 16 bits puede ser transmitido en un mero 2k/segundo.
Aparte de Win2K no ser capaz de (o incluso se permite) para crear MP3, hay algo más que valga la pena mencionar acerca de este formato. Aunque puede ser fácilmente tratada como una onda de salida del dispositivo, no parece funcionar como una ola en el dispositivo. Es por eso que me pareció necesario convertir los datos PCM, MP3 manualmente (que se volvió a hacer un muy buen proyecto de demostración)
Componentes, demos y código fuente
pues Bien, todo bien y dandy hablando de estas cosas, pero esto no es realmente mucho uso sin un duro en la evidencia para la copia de seguridad.
Por esta razón he incluido tres componentes, y dos manifestaciones (demos fueron compilado en Delphi 5). Estos componentes están disponibles para su descarga en mi Delphi sitio.
Componentes
- TACMConvertor : Esto realmente sirve para dos propósitos. En primer lugar, convierte los datos entre 2 diferentes formatos de medios. En segundo lugar, incluso si usted no tiene intención de convertir manualmente los datos en bruto, este componente viene en útiles para la especificación de entrada/salida formatos de ACM arroyos. (El derecho-haga clic en editor de componentes le permite seleccionar los formatos de la acmFormatChoose de diálogo en designtime)
TACMIn : Este componente se utiliza para recibir datos desde el micrófono. Puede especificar un estándar de formato PCM, o puede especificar cualquier formato capaz de ser asignado a través de la WaveIn dispositivo.TACMOut : Este componente se utiliza la reproducción de audio a través de su salida de audio. De nuevo, puede seleccionar la salida en formato PCM, o cualquier otro formato capaz de ser asignado a través de su WaveOut dispositivo. La especifica númbúferes propiedad especifica el número de búferes quiere rellenar antes de empezar a jugar. Esto no es de mucha utilidad cuando se desea instantánea de audio de internet (teléfonos), pero puede ser útil cuando se desea hacer la radiodifusión de audio a través de internet, y quiero compartir algo extra de audio sólo en caso de que la velocidad de su conexión fluctúa. Demos
La primera demo es realmente muy simple. El TACMConvertor sólo se utiliza para especificar los formatos de entrada y salida. Esta demo se abre un ACMIn y un ACMOut al mismo tiempo. Audio en se canaliza casi de inmediato de vuelta, pero con un poco de retraso, haciendo sonar un poco como Elvis Prestley (Aunque no soy un fan de Elvis, 'All shook up' fue la primera canción que saltó a la mente cuando he probado)
La segunda demo es un poco más complicado y viene en dos partes.
primera parte (Demo2.el dpr) actúa como un servidor. Tiene un socket de servidor escuchando en el puerto 6565 para nuevas conexiones. Al mismo tiempo se tarda audio desde el MICRÓFONO, lo convierte en MP3 de 16 bits a 8 khz MONO (2k/segundo) y tubos para cada cliente conectado.
segunda parte (Demo2Client.el dpr) actúa como un cliente. El primer cuadro de edición requiere la dirección IP del servidor, mientras que el segundo (Campo de entrada) es el número de búferes adicionales que se requieren. Una vez que usted haga clic en conectar (y el número solicitado de búferes ha sido llenado) va a empezar a escuchar el audio desde el servidor. MP3 16 BITS de 8 khz MONO es sorprendentemente buena calidad, y también sorprendentemente bajo ancho de banda.
Bueno, que casi completa de este artículo. Espero que hayan disfrutado leyendo acerca de ella mucho más de lo que me gustaba tener a todo !
a partir de la versión 2.0 de estos componentes son ahora comercial y disponible en http://www.droopyeyes.com
La conversion de wav a mp3 y de vuelta
La conversion de wav a mp3 y de vuelta : Multi-millones de consejos para hacer su vida mas facil.
Este articulo cubre una breve introduccion a la de windows Administrador de Compresion de Audio API.
Esta es una copia de un articulo que escribi para los Desarrolladores de Delphi Boletin de noticias
Los componentes que he escrito para este articulo son parte de un proyecto de codigo abierto y esta disponible en mi pagina de inicio.
Administrador de Compresion de Audio
hace Muchos años, antes de que realmente sabia lo que era internet, he oido un rumor de un 'Telefono de Internet'. Esta pieza de software podria supuestamente transmision de voz entre dos personas conectadas a internet en tiempo real, permitiendo Mundial de llamadas de telefono para el precio de una llamada local. Con Lyn hermano que vive en los U. S. A. y los que viven en el reino unido, las llamadas telefonicas eran pocos y distantes entre si, y siempre demasiado caro. Asi, se puede imaginar lo emocionante de este rumorea que la tecnologia era para nosotros. Tan emocionante, de hecho, que tenemos de nosotros mismos conectado.
cortar una larga historia corta, hemos probado este software de telefono y fue horrible ! Tan malo en el hecho de que estamos atrapados con nuestro telefono normal y ridiculo cargos de telefono.
¡BUENAS NOTICIAS ! Eso fue hace mucho tiempo, y desde entonces las cosas han venido una manera larga (y las llamadas de telefono son tambien mucho mas barato). Con la creciente popularidad de la internet, los medios de comunicacion se ha convertido en mayor calidad pero de menor tamaño.
en la actualidad Hay numerosos formatos de sonido de transmision alrededor, e incluso streaming de video, y todo esto ha sido hecho accesible a personas de muy bajo ancho de banda. Eso no es todo, no solo tienen estos formatos (Quicktime, RealAudio, e incluso MP3) se vuelven mas populares, que tambien se han vuelto mas accesibles para el desarrollador.
Codecs
Algunas de estas rutinas de compresion se han hecho accesibles a traves de la introduccion de 'codecs'. Un numero de codecs instalado como estandar en la instalacion de Windows (gracias Microsoft !)
GSM - creo que este formato es utilizado por algunas redes de telefonia movil
DSP TrueSpeech - he oido una demostracion de este 1 de bits formato de audio, muy claro !
Fraunhofer IIS MP3 - Este es sin duda mi favorito de todos ellos, que le permite hacer su propio MP3
PCM - El estandar utilizado por windows, la mayoria de los codecs pueden convertir a/desde el PCM
Nota :
Una lista completa se puede obtener en la seccion MultiMedia de tu panel de control. Haga doble clic en 'MultiMedia', a continuacion, haga clic en la ficha 'dispositivos' y, a continuacion, expanda de compresion de audio
Asi que, ¿cual es el punto de un codec ? Asi, un codec es un poco como un componente ActiveX. Los componentes ActiveX permite a los desarrolladores implementar la funcionalidad en sus aplicaciones sin tener que escribir todo el codigo (por ejemplo, la incorporacion de un documento de Word). Codecs de hacer el mismo tipo de cosa sino que se concentran en la conversion de formatos de medios en otros formatos de medios. Por ejemplo, si quieres escribir una aplicacion con la que tomo los datos de audio desde un CD de audio, y luego se convierte en un MP3, el unico trabajo que tendria que hacer usted mismo seria
- Extraer los datos de audio de la pista
- Escribir una valida MP3 encabezado de tu disco duro
- Instruir el correspondiente codec para codificar los datos de audio como MP3
ACM y de la API
en primer lugar, Voy a mencionar que ACM significa 'Administrador de Compresion de Audio'. Esta es la biblioteca escrito por Microsoft como parte de Windows que actua como la interfaz del programador a los codecs.
El ACM realmente pertenece MMSystem.pas (el cual se encarga multimedia de Windows), pero, por alguna razon, ha sido omitido. La primera tarea, por tanto, es encontrar una copia de MSACM.pas, que es una API de conversion de esta API. La que yo he encontrado mas util fue la conversion por Francois Piette, que fue publicado el Proyecto Jedi (www.Delphi-Jedi.org).
ACM requiere que el programador para realizar los siguientes pasos para convertir a los medios de comunicacion entre los formatos
- Usted debe decidir sobre su formato de Entrada y Salida. Esto se basa en la TWaveFormatEX registro, pero, advirtio, este registro se estructura en realidad, no es lo suficientemente grande para almacenar la informacion necesaria de la mayoria de los codecs.
es debido a esto que he utilizado mi propia TACMFormat registro, que no es mas que una TWaveFormatEX registro con un extra de unos pocos bytes marcados por el final. Usted realmente no tiene forma (que yo sepa) de averiguar lo que
estos bytes adicionales decir, o como se debe configurar. Mi solucion a este problema fue el uso de la acmFormatChoose para permitir al desarrollador elegir los formatos en tiempo de diseño, y luego tener los valores transmitidos en el IDE como una propiedad personalizada (mas sobre esto mas adelante). - Usted debe, a continuacion, abra un ACM corriente. Esto se hace llamando a cmStreamOpen, pasando por los formatos de Entrada y Salida para que el ACM es consciente de lo que se requiere de el. En este punto, el ACM devolver un identificador valido de un arroyo, o devolvera un codigo de error como ACMERR_NotPossible para indicar que la conversion solicitada no se puede realizar (mas sobre esto mas adelante).
- El elemento siguiente a realizar es determinar el tamaño del bufer de salida. Llamar acmStreamSize informara de la ACM de cuantos bytes tiene la intencion de suministrar con cada vez que, a continuacion, devolver el
tamaño del bufer de salida (esto casi siempre ser sobre estimada para asegurarse de que usted proporciona un bufer suficientemente grande). - El ultimo paso de la preparacion es preparar un encabezado. Todo lo que tenemos que hacer es llamar a acmStreamPrepareHeader pasar el flujo de manejar que hemos recibido de acmStreamOpen. El encabezado que podemos preparar tambien le dira al ACM la direccion de nuestra 'fuente' de bufer, y la direccion de nuestro 'destino' buffer (El ACM no asignar esta memoria para nosotros, tenemos que asignar nosotros mismos).
En este punto, todos los de nuestra preparacion se realiza el trabajo. Todo lo que necesitamos hacer ahora es, en realidad, la solicitud de que nuestros datos se convierten. Dado que todos los de nuestra preparacion es completa, esto es realmente una muy simple paso. Esto se consigue llamando a acmStreamConvert. Esta rutina requiere de nosotros para el suministro de la Corriente de Manejar (Para que sepa cuales son los formatos que estamos trabajando), y el Encabezado de la Manija (para que no se conoce el tamaño, la ubicacion de la fuente y de destino buffers). Esta rutina se especifique el numero real de bytes utilizados en la conversion,
cbDstLengthUsed dentro de la cabecera. Su ACM sesion esta ahora listo para otro fragmento de datos !
una Vez que haya terminado con su ACM sesion es el momento de liberar los recursos que hemos utilizado. Esta es la parte mas sencilla de todas. El encabezado es liberado mediante acmStreamUnprepareHeader, y la corriente se libera mediante acmStreamClose.
la Eleccion de un formato
Antes de realizar cualquiera de los pasos anteriores, debemos tener nuestro formatos de entrada y salida listo. Como he dicho antes, estos formatos se basan en TwaveFormatEX (declarado en MMSystem.pas), que es simplemente un registro especificando las tasas de bits, frecuencia, etc. etc. A menos que usted solo tiene la intencion de convertir entre diferentes formatos PCM (que es realmente muy poco probable), este formato no es solo va a ser suficiente. El siguiente formato se utiliza en lugar de todo el codigo del componente conectado.
TACMWaveFormat = lleno de registro
& nbsp & nbsp caso entero de
& nbsp & nbsp & nbsp & nbsp 0 : (Formato : TWaveFormatEx)
& nbsp & nbsp & nbsp & nbsp 1 : (RawData : Array[0..128] de bytes)
& nbsp & nbsp final
La idea aqui es que podemos acceder a la TWaveFormatEX de datos haciendo referencia al Formato de la parte del registro, sin embargo, RawData nos proporciona suficiente espacio para cualquier informacion adicional requerida para los diferentes codecs.
a Pesar de que no sabemos el tamaño de esta informacion adicional, o lo que representa, es todavia una tarea sencilla para adquirirlo. Esto se hace usando acmFormatChoose.
AcmFormatChoose requiere solo un parametro de tipo TACMFormatChooseA. Este parametro es una estructura simple, la celebracion de la siguiente (relevante) de la informacion.
pwfx
Un puntero a un TWaveFormatEX estructura para recibir el resultado (que en realidad pasa TACMFormat)
cbwfx
El tamaño en bytes del buffer que es para recibir el resultado.
cbStruct
El tamaño de esta estructura
Nota:
Otro elemento que vale la pena mencionar es fdwStyle, que contiene indicadores que especifican las opciones adicionales para la seleccion del formato de cuadro de dialogo. En particular, es el (muy larga) indicador de ACMFORMATCHOOSE_STYLEF_INITTOWFXSTRUCT, que informa el cuadro de dialogo que el buffer apuntado por pwfx ya contiene un formato valido, que debe mostrarse como el valor predeterminado cuando la dailog aparece).
Un poco de Chino susurro
ya mencione la ACMERR_NotPossible de error. Esto puede ocurrir por un par de razones.
Los dos primeros a la nota (simplemente porque son los mas faciles de explicar)
- El codec que se especifica en su maquina, puede no estar disponible en una maquina del cliente
- a Pesar de que usted puede convertir de un determinado formato de audio, no se puede convertir. Este es el caso con el Fraunhofer IIS MP3. Mientras que Windows 9x y Windows NT usuarios pueden crear archivos MP3 al contenido de su corazon, por alguna razon, la capacidad fue eliminado en Windows 2000 (Si, de nuevo gracias de Microsoft). Aunque Win2K los usuarios pueden escuchar los resultados, no se les permite a generar menos que pagar a alguien primero !
El final es un poco mas complicado, y garantiza la frase
'Chino Susurro'.
No todos los ACM formatos son intercambiables, por ejemplo (apenas estoy haciendo, asi que si realmente funcionan no escribir diciendo que yo estaba equivocado) usted no puede ser capaz de convertir
GSM 8BIT MONO > MP3 8BIT MONO
Usted necesita para encontrar un 'hombre medio'. Esto es muy a menudo un formato PCM, ya que la mayoria (si no todos) de los codecs fueron diseñados para convertir PCM en un formato adecuado.
El ejemplo anterior seria, por tanto, ser logrado como asi.
GSM 8BIT MONO > PCM de 8 bits MONO > MP3 8BIT MONO
Convertir a 'MP3 16BIT ESTEREO' probablemente requeririan otro paso (entre el PCM y MP3, con el fin de convertir a 8 bits PCM PCM de 16 bits).
creo que ahora entiendo por que esta seccion se llama 'Chino Susurro'. (Si alguien me puede decir el significado de esa frase, yo estaria muy agradecido !)
Los talentos ocultos de ACM
Usted puede o no puede aun estar convencido de que el ACM es una buena cosa. Este parece un buen monton de trabajo para convertir de un formato de medios de comunicacion a otro. Considerando la alternativa de escribir su propio formato de audio lo suficientemente pequeño como para su transmision por internet, o escribir tu propio MP3 rutina de compresion, ACM es lo que nos Britanica llamada 'instalan facilmente'.
Imagina una aplicacion simple que toma de entrada de microfono, lo comprime a un formato adecuado para la transmision a traves de un ancho de banda muy bajo, y luego la transmite a un equipo de destino a traves de TCP/IP. Al mismo tiempo que recibe los datos comprimidos, lo descomprime y luego juega fuera de su altavoz (tambien conocido como un simple telefono a traves de internet).
¿que me dicen de simple ? Bueno, en realidad, si !
Esto suena como un monton de trabajo, y probablemente es (con la excepcion de los componentes suministrados en realidad es muy sencillo).
aqui es donde los talentos ocultos de la ACM entran en juego. Muy pocos de los codecs ACM son la Onda-representable. Lo que basicamente significa que puede ser tratada como un estandar de dispositivo de ONDA cuando la reproduccion / grabacion de audio.
Por ejemplo. Es muy facil abrir una entrada para un GSM fuente de sonido. Una vez que usted reciba un bufer de datos desde el dispositivo de entrada de onda ya es comprimido y listo para transmitir. Por otro lado, tan pronto como se reciben datos a traves de su socket TCP/IP, es posible jugar a estos datos directamente a traves de una ola de dispositivos.
- los Datos en el MIC
- Enviar datos a traves del socket
- Datos de socket
- Enviar datos a la onda de salida del dispositivo
El estandar de los datos PCM seria demasiado grande para la transmision en tiempo real a traves de un modem. Mientras que GSM 6.1 puede ser transmitido como baja de 1.5 k/segundo, y MP3 MONO de 16 bits puede ser transmitido en un mero 2k/segundo.
Aparte de Win2K no ser capaz de (o incluso se permite) para crear MP3, hay algo mas que valga la pena mencionar acerca de este formato. Aunque puede ser facilmente tratada como una onda de salida del dispositivo, no parece funcionar como una ola en el dispositivo. Es por eso que me parecio necesario convertir los datos PCM, MP3 manualmente (que se volvio a hacer un muy buen proyecto de demostracion)
Componentes, demos y codigo fuente
pues Bien, todo bien y dandy hablando de estas cosas, pero esto no es realmente mucho uso sin un duro en la evidencia para la copia de seguridad.
Por esta razon he incluido tres componentes, y dos manifestaciones (demos fueron compilado en Delphi 5). Estos componentes estan disponibles para su descarga en mi Delphi sitio.
Componentes
- TACMConvertor : Esto realmente sirve para dos propositos. En primer lugar, convierte los datos entre 2 diferentes formatos de medios. En segundo lugar, incluso si usted no tiene intencion de convertir manualmente los datos en bruto, este componente viene en utiles para la especificacion de entrada/salida formatos de ACM arroyos. (El derecho-haga clic en editor de componentes le permite seleccionar los formatos de la acmFormatChoose de dialogo en designtime)
TACMIn : Este componente se utiliza para recibir datos desde el microfono. Puede especificar un estandar de formato PCM, o puede especificar cualquier formato capaz de ser asignado a traves de la WaveIn dispositivo.TACMOut : Este componente se utiliza la reproduccion de audio a traves de su salida de audio. De nuevo, puede seleccionar la salida en formato PCM, o cualquier otro formato capaz de ser asignado a traves de su WaveOut dispositivo. La especifica numbuferes propiedad especifica el numero de buferes quiere rellenar antes de empezar a jugar. Esto no es de mucha utilidad cuando se desea instantanea de audio de internet (telefonos), pero puede ser util cuando se desea hacer la radiodifusion de audio a traves de internet, y quiero compartir algo extra de audio solo en caso de que la velocidad de su conexion fluctua. Demos
La primera demo es realmente muy simple. El TACMConvertor solo se utiliza para especificar los formatos de entrada y salida. Esta demo se abre un ACMIn y un ACMOut al mismo tiempo. Audio en se canaliza casi de inmediato de vuelta, pero con un poco de retraso, haciendo sonar un poco como Elvis Prestley (Aunque no soy un fan de Elvis, 'All shook up' fue la primera cancion que salto a la mente cuando he probado)
La segunda demo es un poco mas complicado y viene en dos partes.
primera parte (Demo2.el dpr) actua como un servidor. Tiene un socket de servidor escuchando en el puerto 6565 para nuevas conexiones. Al mismo tiempo se tarda audio desde el MICROFONO, lo convierte en MP3 de 16 bits a 8 khz MONO (2k/segundo) y tubos para cada cliente conectado.
segunda parte (Demo2Client.el dpr) actua como un cliente. El primer cuadro de edicion requiere la direccion IP del servidor, mientras que el segundo (Campo de entrada) es el numero de buferes adicionales que se requieren. Una vez que usted haga clic en conectar (y el numero solicitado de buferes ha sido llenado) va a empezar a escuchar el audio desde el servidor. MP3 16 BITS de 8 khz MONO es sorprendentemente buena calidad, y tambien sorprendentemente bajo ancho de banda.
Bueno, que casi completa de este articulo. Espero que hayan disfrutado leyendo acerca de ella mucho mas de lo que me gustaba tener a todo !
a partir de la version 2.0 de estos componentes son ahora comercial y disponible en http://www.droopyeyes.com
La conversión de wav a mp3 y de vuelta
By Consejos Y Trucos
La conversión de wav a mp3 y de vuelta : Multi-millones de consejos para hacer su vida más fácil.