La conversion de wav à mp3 et à l'arrière


Cet article couvre une brève introduction à la windows le Gestionnaire de Compression Audio API.

C'est une copie d'un article que j'ai écrit pour le Développeur Delphi Newsletter

Les composants que j'ai écrit pour cet article fait partie d'un projet open-source et sont disponibles sur ma page d'accueil.

Gestionnaire de Compression Audio
il y a Plusieurs années, avant que je savais ce qu'était internet, j'ai entendu une rumeur d'un 'Internet Téléphone'. Ce morceau de logiciel pourrait prétendument transmission de la parole entre deux personnes sur l'internet en temps réel, permettant ainsi à l'échelle Mondiale des appels téléphoniques pour le prix d'un appel local. Avec Lyn frère vivant dans les U. S. A. et nous qui vivent dans le royaume-uni appels téléphoniques ont été peu nombreuses et espacées, et toujours beaucoup trop cher. Donc, vous pouvez imaginer combien il est passionnant cette rumeur de la technologie a été pour nous. Tellement excitant en fait, que nous nous sommes connectés.

Pour couper une longue histoire courte, nous avons essayé ce logiciel de téléphonie et c'était horrible ! Si mauvais dans le fait que nous sommes restés fidèles à notre façon habituelle de téléphone et de ridicule frais de téléphone.

BONNE nouvelle ! C'était il y a longtemps, et depuis, les choses ont parcouru un long chemin (et les appels téléphoniques sont également beaucoup moins cher). Avec l'augmentation de la popularité de l'internet, des médias est devenue plus élevé de la qualité mais de plus petite taille.

Il ya maintenant de nombreuses streaming audio formats autour, et même de la vidéo en streaming, et tout cela a été rendu accessible aux personnes à très faibles bandes passantes. Ce n'est pas tout, non seulement ces formats (Quicktime, RealAudio, et même MP3) deviennent de plus en plus populaire, ils sont aussi devenus plus accessibles pour le développeur.

Codecs
Certains de ces routines de compression ont été rendues accessibles par le biais de l'introduction de 'codecs'. Un certain nombre de codecs sont installés en standard sur l'installation de Windows (merci Microsoft !)

GSM - je crois que ce format est utilisé par certains réseaux de téléphonie mobile

DSP TrueSpeech - j'ai entendu parler d'une démonstration de ce 1 bit audio format, très clair !

Fraunhofer IIS MP3 - Ce n'est certainement mon préféré de tous, il vous permet de faire vos propres MP3

PCM - La norme utilisée par windows, la plupart des codecs pouvez convertir vers/à partir de PCM

Note :
Une liste complète est disponible dans la section Multimédia de votre panneau de contrôle. Double-cliquez sur 'Multimédia', puis cliquez sur 'périphériques' de l'onglet, puis développez la compression audio

Alors, quel est l'intérêt d'un codec ? Eh bien, un codec est un peu comme un composant ActiveX. Les composants ActiveX a permis aux développeurs d'implémenter des fonctionnalités dans leurs applications sans avoir à écrire tout le code (par exemple, l'incorporation d'un document Word). Codecs de faire le même genre de chose, mais se concentrer sur la conversion de formats de médias dans d'autres formats de médias. Par exemple, si vous souhaitez écrire une application qui a pris des données audio depuis un CD audio, puis converti en MP3, le seul travail que vous devez faire vous-même serait

  1. Extraire les données audio de la piste
  2. Écrire un fichier MP3 en-tête de votre disque dur
  3. Charger pertinentes codec pour encoder les données audio comme MP3

ACM et de l'API
tout d'Abord, Je vais mentionner que l'ACM est l'acronyme de 'Gestionnaire de Compression Audio'. C'est la bibliothèque écrite par Microsoft dans le cadre de Windows qui agit en tant que programmeur de l'interface pour les codecs.

Le MCA appartient vraiment dans MMSystem.pas (qui s'occupe de Windows multimédia), mais, pour une raison quelconque, il a été omis. La première tâche est donc de trouver une copie de MSACM.pas, qui est une API de conversion de cette API. Celui que j'ai trouvé le plus utile, c'était la conversion par François Piette, qui a été affiché sur le Projet de Jedi (www.Delphi-Jedi.org).

ACM nécessite le développeur de suivre les étapes suivantes afin de convertir des médias entre les formats

  1. Vous devez décider de votre Entrée et le format de Sortie. Ceci est basé sur la TWaveFormatEX record, mais, attention, cette structure de l'enregistrement n'est pas fait suffisamment grand pour stocker les informations requises de la plupart des codecs.

    C'est pour cette raison que j'ai utilisé mon propre TACMFormat enregistrement, ce qui n'est pas plus qu'un TWaveFormatEX enregistrement avec quelques octets supplémentaires marqués à la fin. Vous n'avez vraiment aucune façon (que je connais) de trouver ce que
    ces octets supplémentaires signifient, ou comment ils devraient être ensemble. Ma solution à ce problème serait d'utiliser le acmFormatChoose pour permettre au développeur de choisir les formats au moment de la conception, puis ces valeurs diffusées dans l'IDE, comme une propriété personnalisée (plus sur cela plus tard).
  2. Vous devez ensuite ouvrir un ACM de flux. Ceci est fait en appelant cmStreamOpen, en passant l'Entrée et la Sortie des formats de sorte que le MCA est conscient de ce qui est requis de lui. À ce stade, l'ACM renvoie un descripteur valide pour un flux, ou retourne un code d'erreur comme ACMERR_NotPossible pour indiquer que la transformation demandée ne peut pas être effectuée (plus sur cela plus tard).
  3. L'élément suivant est effectué pour déterminer la taille de la mémoire tampon de sortie. L'appel de acmStreamSize informera l'ACM de combien d'octets que vous avez l'intention de fournir à chaque fois, il sera de retour
    taille de la mémoire tampon de sortie (ce sera presque toujours plus d'estime pour vous assurer que vous fournir un tampon assez grand).
  4. La dernière étape de préparation est de préparer un en-tête. Tout ce que nous devons faire ici, c'est l'appel de acmStreamPrepareHeader le passage du courant à gérer, nous avons reçu de acmStreamOpen. L'en-tête que nous préparons sera également dire au MCA l'adresse de notre 'source' de la mémoire tampon, et l'adresse de notre 'destination' de la mémoire tampon (Le MCA n'a pas d'allouer de la mémoire pour nous, nous avons besoin de les attribuer à nous-mêmes).

À ce stade, l'ensemble de notre travail de préparation est fait. Tout ce que nous devons faire maintenant, c'est effectivement la demande de nos données est converti. Puisque l'ensemble de notre préparation est terminée, c'est en fait une étape très simple. Il est obtenu en appelant acmStreamConvert. Cette routine exige de nous fournir le Flux de la Poignée (pour qu'il sache quels sont les formats qui travaillent avec nous), et notre en-Tête de la Poignée (pour qu'il sache la taille, l'emplacement de la source et de la destination des tampons). Cette routine spécifier le nombre d'octets utilisés dans la conversion par
paramètre cbDstLengthUsed dans l'en-tête. Votre ACM session est maintenant prêt pour un autre bloc de données !

une Fois que vous avez fini avec votre ACM session, il est temps de libérer les ressources que nous avons utilisé. C'est le plus simple de tous. L'en-tête est libérée à l'aide de acmStreamUnprepareHeader, et le flux est lancée à l'aide d'acmStreamClose.

le Choix d'un format
Avant d'entreprendre toute les étapes ci-dessus, nous devons avoir notre entrée et de sortie les formats de prêt. Comme je l'ai dit plus tôt, ces formats sont basés sur TwaveFormatEX (déclarée dans MMSystem.pas), qui est juste un enregistrement indiquant taux d'échantillonnage, fréquence etc. etc. Sauf si vous avez l'intention de convertir entre les différents formats PCM (qui est vraiment très peu probable), ce format est juste ne va pas être suffisant. Le format suivant a été utilisé au lieu tout au long de la composante de code ci-joint.

TACMWaveFormat = paniers enregistrement
& nbsp & nbsp cas, integer
& ! & ! & ! & nbsp 0 : (Format : TWaveFormatEx)
& ! & ! & ! & nbsp 1 : (RawData : Array[0..128] de l'octet)
& nbsp & nbsp fin

L'idée est ici que l'on peut toujours accéder à la TWaveFormatEX de données en se référant au Format de la partie de l'enregistrement, mais RawData nous fournit suffisamment d'espace pour des données supplémentaires requises pour l'un quelconque des codecs.

Bien que nous ne connaissons pas la taille de ces données supplémentaires, ou ce qu'il représente, il est toujours une tâche simple à acquérir. Ceci est fait en utilisant acmFormatChoose.

AcmFormatChoose ne nécessite qu'un seul paramètre de type TACMFormatChooseA. Ce paramètre est d'une structure simple, la tenue de la suite (pertinent) de l'information.

pwfx
Un pointeur vers un TWaveFormatEX structure pour recevoir le résultat (on fait passer TACMFormat)

cbwfx
La taille en octets de la mémoire tampon qui est de recevoir le résultat.

cbStruct
La taille de cette structure

Note:
un Autre élément digne de mention est fdwStyle, qui détient les indicateurs spécifiant des options supplémentaires pour la sélection du format de la boîte de dialogue. En particulier, est le (très long) drapeau ACMFORMATCHOOSE_STYLEF_INITTOWFXSTRUCT, qui nous informe de la boîte de dialogue qui le tampon pointé par pwfx contient déjà un format valide, qui doit être affiché par défaut lors de la dailog s'affiche).

Un peu de Chinois murmure
j'ai mentionné plus Tôt la ACMERR_NotPossible erreur. Cela peut se produire pour un couple de raisons.

Les deux premiers de la note (tout simplement parce qu'ils sont les plus faciles à expliquer)

  1. Le codec que vous avez spécifié sur votre machine, peuvent ne pas être disponibles sur une machine client
  2. Bien que vous pouvez convertir à partir d'un format audio, vous ne pouvez pas convertir. C'est le cas avec le Fraunhofer IIS MP3. Alors que Windows 9x et Windows NT les utilisateurs peuvent créer des fichiers MP3 au contenu de leur coeur, pour une raison quelconque, la capacité a été supprimée dans Windows 2000 (Oui, encore merci Microsoft). Bien que Win2K, les utilisateurs peuvent écouter les résultats, ils ne sont pas autorisés à générer moins de payer quelqu'un d'abord !

Au final, on est un peu plus compliqué, et les bons de souscription de la phrase
'Chinese Whisper'.

toutes les ACM formats sont interchangeables, par exemple (je suis juste de faire, donc si ils travaillent effectivement ne pas écrire en disant que j'avais tort) vous ne pouvez pas être en mesure de convertir

GSM 8 BIT MONO > MP3 de 8 BIT MONO

Vous avez besoin de trouver un 'homme du milieu'. C'est assez souvent un format PCM, comme la plupart (si pas tous) des codecs ont été conçus pour convertir PCM en plus le format approprié.

L'exemple ci-dessus serait donc atteint comme si.

GSM 8 BIT MONO > PCM 8 BITS MONO > MP3 de 8 BIT MONO

la Conversion à 'MP3 16 BITS STÉRÉO' nécessiterait probablement encore une autre étape (entre le PCM et MP3, pour convertir en 8 bits PCM PCM 16 bits).

je pense que vous comprenez maintenant pourquoi cette section est appelée 'Chinese Whisper'. (Si quelqu'un peut me dire le sens de cette phrase, j'apprécierais !)

Les talents cachés de l'ACM
Vous peut ou peut ne pas encore être convaincus que le MCA est une bonne chose. Cela semble être beaucoup de travail juste pour convertir un format dans un autre format. Compte tenu de la variante de l'écriture de vos propres fichiers audio de format assez petit pour le streaming sur internet, ou en écrivant vos propres MP3 routine de compression, ACM est ce qu'on appel Britannique 'un doddle'.

Imaginez une application simple qui prend en entrée à partir de votre microphone, le comprime à un format approprié pour la diffusion en continu de très faible largeur de bande, puis la transmet à un ordinateur de destination sur TCP/IP. Alors que dans le même temps, reçoit des données compressées, décompresse, puis la joue de votre haut-parleur (aka, un simple téléphone internet).

ai-je dit simple ? Eh bien, en fait, oui !

Cela ressemble à beaucoup de travail, et est probablement (sauf avec les composants fournis, il est en fait très simple).

C'est là que les talents cachés de l'ACM entrent en jeu. Un bon nombre de codecs ACM sont Vagues-cartographiables. Ce qui signifie qu'ils peuvent être traités comme une norme VAGUE de l'appareil lors de la lecture / l'enregistrement audio.

Par exemple. Il est assez facile à ouvrir d'une entrée pour un GSM de la source sonore. Une fois que vous recevez un tampon de données de la vague d'entrée de l'appareil, il est déjà compressé et prêt pour la transmission. En revanche, dès que les données sont reçues par le biais de votre socket TCP/IP, il est possible de jouer à ces données directement par le biais d'une vague de l'appareil.

  1. Données de CMI
  2. Envoyer des données via socket
  3. Données à partir de socket
  4. Envoyer les données à wave-out de l'appareil

Le PCM standard de données serait bien trop grande pour la diffusion en temps réel via un modem. Alors que le GSM 6.1 peuvent être transmis aussi bas que 1,5 k/seconde, et MP3 16 BITS, MONO peuvent être transmis à un simple 2k/seconde.

en dehors de Win2K de ne pas pouvoir (ou même autorisé) pour créer des MP3, il y a autre chose à mentionner sur ce format. Bien qu'il peut facilement être traitée comme une onde de sortie de l'appareil, il n'a pas l'air de fonctionner comme une onde dans l'appareil. C'est pourquoi j'ai jugé nécessaire de convertir les données PCM MP3 manuellement (qui s'est avéré tout à fait une belle démonstration du projet)

Composants, des démos et le code source
eh Bien, il très facile de parler de ces choses, mais ce n'est pas vraiment beaucoup d'utilisation sans des preuves concrètes à l'appui.

Pour cette raison que j'ai inclus trois composants, et de deux manifestations (démos ont été compilées dans Delphi 5). Ces composants sont disponibles pour téléchargement sur mon Delphi site.

Composants

  1. TACMConvertor : Cela ne sert à deux fins. Tout d'abord, il convertit des données entre 2 différents formats de médias. Deuxièmement, même si vous n'avez pas l'intention de convertir manuellement les données brutes, ce composant est utilisé pour la spécification d'entrée/formats de sortie de l'ACM des ruisseaux. (Droit-cliquez sur éditeur de composant permet de sélectionner les formats de la acmFormatChoose dialogue au moment de la conception)

  • TACMIn : Ce composant est utilisé pour la réception de données à partir de votre microphone. Vous pouvez spécifier un standard format PCM, ou vous pouvez spécifier un format capable d'être mappées par le biais du WaveIn appareil.
  • TACMOut : Ce composant est utilisé relecture audio via la sortie audio. Encore une fois, vous pouvez sélectionner à la sortie en format PCM, ou tout autre format capable d'être mappés par le biais de votre WaveOut périphériques. Le NumBuffers propriété spécifie le nombre de tampons que vous voulez rempli avant de commencer à jouer. Ce n'est pas beaucoup utiliser lorsque vous souhaitez instantanée audio (téléphonie sur internet), mais peut s'avérer utile lorsque vous voulez faire la diffusion audio sur internet, et que vous voulez tampon supplémentaire audio juste au cas où votre vitesse de connexion varie.
  • Démos
    La première démo est vraiment très simple. Le TACMConvertor est uniquement utilisé pour spécifier les formats d'entrée / sortie. Cette démonstration ouvre un ACMIn et un ACMOut en même temps. Audio est joué sur presque immédiatement, mais avec un léger retard, vous faire paraître un peu comme Elvis Prestley (Bien que je ne suis pas un fan d'Elvis, 'All shook up' est la première chanson qui vient à l'esprit quand je l'ai testé)

    La seconde démo est un peu plus compliqué et est livré en deux parties.

    La première partie (Demo2.rmr) agit comme un serveur. Il dispose d'un socket serveur écoute sur le port 6565 pour les nouvelles connexions. En même temps, il prend de l'audio à partir du microphone, les convertit en MP3 8 khz 16 bits MONO (2k/seconde) et les pipes à chaque client connecté.

    La deuxième partie (Demo2Client.rmr) agit comme un client. La première zone d'édition requiert l'adresse IP du serveur, tandis que la seconde (SpinEdit) est le nombre de mémoires tampons supplémentaires dont vous avez besoin. Une fois que vous cliquez sur se connecter (et le nombre de tampons a été rempli), vous allez commencer à entendre l'audio à partir du serveur. MP3 8 khz 16 bits MONO est étonnamment bonne qualité, et aussi étonnamment faible bande passante.

    eh Bien, à peu près complète cet article. J'espère que vous avez apprécié la lecture de ce sujet beaucoup plus que j'ai apprécié d'avoir à travailler tout !

    à partir de la version 2.0 de ces composants sont maintenant commerciales et disponible à http://www.droopyeyes.com









    La conversion de wav a mp3 et a l'arriere


    La conversion de wav a mp3 et a l'arriere : Plusieurs milliers de conseils pour vous faciliter la vie.


    Cet article couvre une breve introduction a la windows le Gestionnaire de Compression Audio API.

    C'est une copie d'un article que j'ai ecrit pour le Developpeur Delphi Newsletter

    Les composants que j'ai ecrit pour cet article fait partie d'un projet open-source et sont disponibles sur ma page d'accueil.

    Gestionnaire de Compression Audio
    il y a Plusieurs annees, avant que je savais ce qu'etait internet, j'ai entendu une rumeur d'un 'Internet Telephone'. Ce morceau de logiciel pourrait pretendument transmission de la parole entre deux personnes sur l'internet en temps reel, permettant ainsi a l'echelle Mondiale des appels telephoniques pour le prix d'un appel local. Avec Lyn frere vivant dans les U. S. A. et nous qui vivent dans le royaume-uni appels telephoniques ont ete peu nombreuses et espacees, et toujours beaucoup trop cher. Donc, vous pouvez imaginer combien il est passionnant cette rumeur de la technologie a ete pour nous. Tellement excitant en fait, que nous nous sommes connectes.

    Pour couper une longue histoire courte, nous avons essaye ce logiciel de telephonie et c'etait horrible ! Si mauvais dans le fait que nous sommes restes fideles a notre façon habituelle de telephone et de ridicule frais de telephone.

    BONNE nouvelle ! C'etait il y a longtemps, et depuis, les choses ont parcouru un long chemin (et les appels telephoniques sont egalement beaucoup moins cher). Avec l'augmentation de la popularite de l'internet, des medias est devenue plus eleve de la qualite mais de plus petite taille.

    Il ya maintenant de nombreuses streaming audio formats autour, et meme de la video en streaming, et tout cela a ete rendu accessible aux personnes a tres faibles bandes passantes. Ce n'est pas tout, non seulement ces formats (Quicktime, RealAudio, et meme MP3) deviennent de plus en plus populaire, ils sont aussi devenus plus accessibles pour le developpeur.

    Codecs
    Certains de ces routines de compression ont ete rendues accessibles par le biais de l'introduction de 'codecs'. Un certain nombre de codecs sont installes en standard sur l'installation de Windows (merci Microsoft !)

    GSM - je crois que ce format est utilise par certains reseaux de telephonie mobile

    DSP TrueSpeech - j'ai entendu parler d'une demonstration de ce 1 bit audio format, tres clair !

    Fraunhofer IIS MP3 - Ce n'est certainement mon prefere de tous, il vous permet de faire vos propres MP3

    PCM - La norme utilisee par windows, la plupart des codecs pouvez convertir vers/a partir de PCM

    Note :
    Une liste complete est disponible dans la section Multimedia de votre panneau de controle. Double-cliquez sur 'Multimedia', puis cliquez sur 'peripheriques' de l'onglet, puis developpez la compression audio

    Alors, quel est l'interet d'un codec ? Eh bien, un codec est un peu comme un composant ActiveX. Les composants ActiveX a permis aux developpeurs d'implementer des fonctionnalites dans leurs applications sans avoir a ecrire tout le code (par exemple, l'incorporation d'un document Word). Codecs de faire le meme genre de chose, mais se concentrer sur la conversion de formats de medias dans d'autres formats de medias. Par exemple, si vous souhaitez ecrire une application qui a pris des donnees audio depuis un CD audio, puis converti en MP3, le seul travail que vous devez faire vous-meme serait

    1. Extraire les donnees audio de la piste
    2. Ecrire un fichier MP3 en-tete de votre disque dur
    3. Charger pertinentes codec pour encoder les donnees audio comme MP3

    ACM et de l'API
    tout d'Abord, Je vais mentionner que l'ACM est l'acronyme de 'Gestionnaire de Compression Audio'. C'est la bibliotheque ecrite par Microsoft dans le cadre de Windows qui agit en tant que programmeur de l'interface pour les codecs.

    Le MCA appartient vraiment dans MMSystem.pas (qui s'occupe de Windows multimedia), mais, pour une raison quelconque, il a ete omis. La premiere tache est donc de trouver une copie de MSACM.pas, qui est une API de conversion de cette API. Celui que j'ai trouve le plus utile, c'etait la conversion par François Piette, qui a ete affiche sur le Projet de Jedi (www.Delphi-Jedi.org).

    ACM necessite le developpeur de suivre les etapes suivantes afin de convertir des medias entre les formats

    1. Vous devez decider de votre Entree et le format de Sortie. Ceci est base sur la TWaveFormatEX record, mais, attention, cette structure de l'enregistrement n'est pas fait suffisamment grand pour stocker les informations requises de la plupart des codecs.

      C'est pour cette raison que j'ai utilise mon propre TACMFormat enregistrement, ce qui n'est pas plus qu'un TWaveFormatEX enregistrement avec quelques octets supplementaires marques a la fin. Vous n'avez vraiment aucune façon (que je connais) de trouver ce que
      ces octets supplementaires signifient, ou comment ils devraient etre ensemble. Ma solution a ce probleme serait d'utiliser le acmFormatChoose pour permettre au developpeur de choisir les formats au moment de la conception, puis ces valeurs diffusees dans l'IDE, comme une propriete personnalisee (plus sur cela plus tard).
    2. Vous devez ensuite ouvrir un ACM de flux. Ceci est fait en appelant cmStreamOpen, en passant l'Entree et la Sortie des formats de sorte que le MCA est conscient de ce qui est requis de lui. A ce stade, l'ACM renvoie un descripteur valide pour un flux, ou retourne un code d'erreur comme ACMERR_NotPossible pour indiquer que la transformation demandee ne peut pas etre effectuee (plus sur cela plus tard).
    3. L'element suivant est effectue pour determiner la taille de la memoire tampon de sortie. L'appel de acmStreamSize informera l'ACM de combien d'octets que vous avez l'intention de fournir a chaque fois, il sera de retour
      taille de la memoire tampon de sortie (ce sera presque toujours plus d'estime pour vous assurer que vous fournir un tampon assez grand).
    4. La derniere etape de preparation est de preparer un en-tete. Tout ce que nous devons faire ici, c'est l'appel de acmStreamPrepareHeader le passage du courant a gerer, nous avons reçu de acmStreamOpen. L'en-tete que nous preparons sera egalement dire au MCA l'adresse de notre 'source' de la memoire tampon, et l'adresse de notre 'destination' de la memoire tampon (Le MCA n'a pas d'allouer de la memoire pour nous, nous avons besoin de les attribuer a nous-memes).

    A ce stade, l'ensemble de notre travail de preparation est fait. Tout ce que nous devons faire maintenant, c'est effectivement la demande de nos donnees est converti. Puisque l'ensemble de notre preparation est terminee, c'est en fait une etape tres simple. Il est obtenu en appelant acmStreamConvert. Cette routine exige de nous fournir le Flux de la Poignee (pour qu'il sache quels sont les formats qui travaillent avec nous), et notre en-Tete de la Poignee (pour qu'il sache la taille, l'emplacement de la source et de la destination des tampons). Cette routine specifier le nombre d'octets utilises dans la conversion par
    parametre cbDstLengthUsed dans l'en-tete. Votre ACM session est maintenant pret pour un autre bloc de donnees !

    une Fois que vous avez fini avec votre ACM session, il est temps de liberer les ressources que nous avons utilise. C'est le plus simple de tous. L'en-tete est liberee a l'aide de acmStreamUnprepareHeader, et le flux est lancee a l'aide d'acmStreamClose.

    le Choix d'un format
    Avant d'entreprendre toute les etapes ci-dessus, nous devons avoir notre entree et de sortie les formats de pret. Comme je l'ai dit plus tot, ces formats sont bases sur TwaveFormatEX (declaree dans MMSystem.pas), qui est juste un enregistrement indiquant taux d'echantillonnage, frequence etc. etc. Sauf si vous avez l'intention de convertir entre les differents formats PCM (qui est vraiment tres peu probable), ce format est juste ne va pas etre suffisant. Le format suivant a ete utilise au lieu tout au long de la composante de code ci-joint.

    TACMWaveFormat = paniers enregistrement
    & nbsp & nbsp cas, integer
    & ! & ! & ! & nbsp 0 : (Format : TWaveFormatEx)
    & ! & ! & ! & nbsp 1 : (RawData : Array[0..128] de l'octet)
    & nbsp & nbsp fin

    L'idee est ici que l'on peut toujours acceder a la TWaveFormatEX de donnees en se referant au Format de la partie de l'enregistrement, mais RawData nous fournit suffisamment d'espace pour des donnees supplementaires requises pour l'un quelconque des codecs.

    Bien que nous ne connaissons pas la taille de ces donnees supplementaires, ou ce qu'il represente, il est toujours une tache simple a acquerir. Ceci est fait en utilisant acmFormatChoose.

    AcmFormatChoose ne necessite qu'un seul parametre de type TACMFormatChooseA. Ce parametre est d'une structure simple, la tenue de la suite (pertinent) de l'information.

    pwfx
    Un pointeur vers un TWaveFormatEX structure pour recevoir le resultat (on fait passer TACMFormat)

    cbwfx
    La taille en octets de la memoire tampon qui est de recevoir le resultat.

    cbStruct
    La taille de cette structure

    Note:
    un Autre element digne de mention est fdwStyle, qui detient les indicateurs specifiant des options supplementaires pour la selection du format de la boîte de dialogue. En particulier, est le (tres long) drapeau ACMFORMATCHOOSE_STYLEF_INITTOWFXSTRUCT, qui nous informe de la boîte de dialogue qui le tampon pointe par pwfx contient deja un format valide, qui doit etre affiche par defaut lors de la dailog s'affiche).

    Un peu de Chinois murmure
    j'ai mentionne plus Tot la ACMERR_NotPossible erreur. Cela peut se produire pour un couple de raisons.

    Les deux premiers de la note (tout simplement parce qu'ils sont les plus faciles a expliquer)

    1. Le codec que vous avez specifie sur votre machine, peuvent ne pas etre disponibles sur une machine client
    2. Bien que vous pouvez convertir a partir d'un format audio, vous ne pouvez pas convertir. C'est le cas avec le Fraunhofer IIS MP3. Alors que Windows 9x et Windows NT les utilisateurs peuvent creer des fichiers MP3 au contenu de leur coeur, pour une raison quelconque, la capacite a ete supprimee dans Windows 2000 (Oui, encore merci Microsoft). Bien que Win2K, les utilisateurs peuvent ecouter les resultats, ils ne sont pas autorises a generer moins de payer quelqu'un d'abord !

    Au final, on est un peu plus complique, et les bons de souscription de la phrase
    'Chinese Whisper'.

    toutes les ACM formats sont interchangeables, par exemple (je suis juste de faire, donc si ils travaillent effectivement ne pas ecrire en disant que j'avais tort) vous ne pouvez pas etre en mesure de convertir

    GSM 8 BIT MONO > MP3 de 8 BIT MONO

    Vous avez besoin de trouver un 'homme du milieu'. C'est assez souvent un format PCM, comme la plupart (si pas tous) des codecs ont ete conçus pour convertir PCM en plus le format approprie.

    L'exemple ci-dessus serait donc atteint comme si.

    GSM 8 BIT MONO > PCM 8 BITS MONO > MP3 de 8 BIT MONO

    la Conversion a 'MP3 16 BITS STEREO' necessiterait probablement encore une autre etape (entre le PCM et MP3, pour convertir en 8 bits PCM PCM 16 bits).

    je pense que vous comprenez maintenant pourquoi cette section est appelee 'Chinese Whisper'. (Si quelqu'un peut me dire le sens de cette phrase, j'apprecierais !)

    Les talents caches de l'ACM
    Vous peut ou peut ne pas encore etre convaincus que le MCA est une bonne chose. Cela semble etre beaucoup de travail juste pour convertir un format dans un autre format. Compte tenu de la variante de l'ecriture de vos propres fichiers audio de format assez petit pour le streaming sur internet, ou en ecrivant vos propres MP3 routine de compression, ACM est ce qu'on appel Britannique 'un doddle'.

    Imaginez une application simple qui prend en entree a partir de votre microphone, le comprime a un format approprie pour la diffusion en continu de tres faible largeur de bande, puis la transmet a un ordinateur de destination sur TCP/IP. Alors que dans le meme temps, reçoit des donnees compressees, decompresse, puis la joue de votre haut-parleur (aka, un simple telephone internet).

    ai-je dit simple ? Eh bien, en fait, oui !

    Cela ressemble a beaucoup de travail, et est probablement (sauf avec les composants fournis, il est en fait tres simple).

    C'est la que les talents caches de l'ACM entrent en jeu. Un bon nombre de codecs ACM sont Vagues-cartographiables. Ce qui signifie qu'ils peuvent etre traites comme une norme VAGUE de l'appareil lors de la lecture / l'enregistrement audio.

    Par exemple. Il est assez facile a ouvrir d'une entree pour un GSM de la source sonore. Une fois que vous recevez un tampon de donnees de la vague d'entree de l'appareil, il est deja compresse et pret pour la transmission. En revanche, des que les donnees sont reçues par le biais de votre socket TCP/IP, il est possible de jouer a ces donnees directement par le biais d'une vague de l'appareil.

    1. Donnees de CMI
    2. Envoyer des donnees via socket
    3. Donnees a partir de socket
    4. Envoyer les donnees a wave-out de l'appareil

    Le PCM standard de donnees serait bien trop grande pour la diffusion en temps reel via un modem. Alors que le GSM 6.1 peuvent etre transmis aussi bas que 1,5 k/seconde, et MP3 16 BITS, MONO peuvent etre transmis a un simple 2k/seconde.

    en dehors de Win2K de ne pas pouvoir (ou meme autorise) pour creer des MP3, il y a autre chose a mentionner sur ce format. Bien qu'il peut facilement etre traitee comme une onde de sortie de l'appareil, il n'a pas l'air de fonctionner comme une onde dans l'appareil. C'est pourquoi j'ai juge necessaire de convertir les donnees PCM MP3 manuellement (qui s'est avere tout a fait une belle demonstration du projet)

    Composants, des demos et le code source
    eh Bien, il tres facile de parler de ces choses, mais ce n'est pas vraiment beaucoup d'utilisation sans des preuves concretes a l'appui.

    Pour cette raison que j'ai inclus trois composants, et de deux manifestations (demos ont ete compilees dans Delphi 5). Ces composants sont disponibles pour telechargement sur mon Delphi site.

    Composants

    1. TACMConvertor : Cela ne sert a deux fins. Tout d'abord, il convertit des donnees entre 2 differents formats de medias. Deuxiemement, meme si vous n'avez pas l'intention de convertir manuellement les donnees brutes, ce composant est utilise pour la specification d'entree/formats de sortie de l'ACM des ruisseaux. (Droit-cliquez sur editeur de composant permet de selectionner les formats de la acmFormatChoose dialogue au moment de la conception)

  • TACMIn : Ce composant est utilise pour la reception de donnees a partir de votre microphone. Vous pouvez specifier un standard format PCM, ou vous pouvez specifier un format capable d'etre mappees par le biais du WaveIn appareil.
  • TACMOut : Ce composant est utilise relecture audio via la sortie audio. Encore une fois, vous pouvez selectionner a la sortie en format PCM, ou tout autre format capable d'etre mappes par le biais de votre WaveOut peripheriques. Le NumBuffers propriete specifie le nombre de tampons que vous voulez rempli avant de commencer a jouer. Ce n'est pas beaucoup utiliser lorsque vous souhaitez instantanee audio (telephonie sur internet), mais peut s'averer utile lorsque vous voulez faire la diffusion audio sur internet, et que vous voulez tampon supplementaire audio juste au cas ou votre vitesse de connexion varie.
  • Demos
    La premiere demo est vraiment tres simple. Le TACMConvertor est uniquement utilise pour specifier les formats d'entree / sortie. Cette demonstration ouvre un ACMIn et un ACMOut en meme temps. Audio est joue sur presque immediatement, mais avec un leger retard, vous faire paraître un peu comme Elvis Prestley (Bien que je ne suis pas un fan d'Elvis, 'All shook up' est la premiere chanson qui vient a l'esprit quand je l'ai teste)

    La seconde demo est un peu plus complique et est livre en deux parties.

    La premiere partie (Demo2.rmr) agit comme un serveur. Il dispose d'un socket serveur ecoute sur le port 6565 pour les nouvelles connexions. En meme temps, il prend de l'audio a partir du microphone, les convertit en MP3 8 khz 16 bits MONO (2k/seconde) et les pipes a chaque client connecte.

    La deuxieme partie (Demo2Client.rmr) agit comme un client. La premiere zone d'edition requiert l'adresse IP du serveur, tandis que la seconde (SpinEdit) est le nombre de memoires tampons supplementaires dont vous avez besoin. Une fois que vous cliquez sur se connecter (et le nombre de tampons a ete rempli), vous allez commencer a entendre l'audio a partir du serveur. MP3 8 khz 16 bits MONO est etonnamment bonne qualite, et aussi etonnamment faible bande passante.

    eh Bien, a peu pres complete cet article. J'espere que vous avez apprecie la lecture de ce sujet beaucoup plus que j'ai apprecie d'avoir a travailler tout !

    a partir de la version 2.0 de ces composants sont maintenant commerciales et disponible a http://www.droopyeyes.com


    La conversion de wav à mp3 et à l'arrière

    La conversion de wav à mp3 et à l'arrière : Plusieurs milliers de conseils pour vous faciliter la vie.
    Recommander aux amis
    • gplus
    • pinterest

    Messages récents

    Commentaire

    Laisser un commentaire

    évaluation