Konvertieren von Wav zu mp3 und zurück


Dieser Artikel behandelt eine kurze Einführung in die Windows-API Audio Compression Manager.

Dies ist eine Kopie eines Artikels schrieb ich für die Delphi-Entwickler-Newsletter

Komponenten, die ich für diesen Artikel geschrieben habe sind Teil einer Open-Source-Projekt und stehen auf meiner Homepage.

Audio Compression Manager
Vor vielen Jahren, bevor ich wirklich wusste, was das Internet war, hörte ich ein Gerücht 'Internettelefonie'. Dieses Stück Software konnte angeblich Rede zwischen zwei Menschen über das Internet in Echtzeit, so dass weltweit Telefongespräche für den Preis für ein Ortsgespräch übertragen. Mit Lyns Bruder Leben in den USA und in uns Leben in Großbritannien Telefonanrufe waren dünn gesät, und immer viel zu teuer. Also, können Sie sich vorstellen, wie spannend diese Gerüchte Technologie für uns war. So spannend, dass wir uns angeschlossen haben.

Um eine lange Geschichte kurz zu schneiden, wir haben versucht, diese Telefon-Software, und es war schrecklich! So schlecht in der Tat, die wir mit unseren normalen Telefon und lächerlich Telefongebühren zu stecken.

GUTE NACHRICHTEN! Das war lange her, und seitdem Dinge haben einen langen Weg zurückgelegt (und Telefonanrufe sind auch viel billiger). Mit der zunehmenden Popularität des Internets ist Medien höhere Qualität noch kleiner in Größe geworden.

Heute gibt es zahlreiche streaming-audio-Formate um, und sogar streaming-Video und alles, was, die dies für Leute zugänglich bei sehr niedrigen Bandbreiten erzielt wurden. Das ist nicht alles, nicht nur diesen Formaten (Quicktime, RealAudio und sogar MP3) werden immer beliebter, sie sind auch für den Entwickler zugänglicher geworden.

Codecs
Einige dieser Kompression-Routinen wurden durch die Einführung von 'Codecs' zugänglich gemacht. Eine Reihe von Codecs installiert sind als Standard in Windows-Installation (Danke Microsoft!)

GSM - ich glaube, dieses Format wird von einigen Mobilfunknetzen verwendet

DSP TrueSpeech - ich habe gehört, dass eine Demonstration dieses 1-Bit Audioformat, ganz klar!

Fraunhofer IIS MP3 - Dies ist sicherlich mein Favorit von allen, es erlaubt Ihnen, Ihre eigenen MP3 machen

PCM - der Standard von Windows, verwendet die meisten Codecs können nach/von PCM konvertieren

Hinweis:
Eine vollständige Liste ist im MultiMedia-Bereich Ihres Control Panels von erreicht werden. Doppelklicken Sie 'MultiMedia', dann klicken Sie auf die Registerkarte 'Geräte' und erweitern Sie dann audio-Kompression

Also, was ist der Sinn eines Codecs? Ein Codec ist ein bisschen wie eine ActiveX-Komponente. ActiveX-Komponenten erlaubt Entwicklern, Funktionalität in ihre Anwendungen zu implementieren, ohne alle Beteiligten Code schreiben zu müssen (z. B. ein Word-Dokument einbetten). Codecs sind die gleiche Art von Ding, sondern konzentrieren sich auf Media-Formate in andere Medienformate zu konvertieren. Wenn Sie eine Anwendung schreiben, die Audiodaten von einer audio-CD und dann konvertiert es in eine MP3 wollte, würde die einzige Arbeit, die Sie selbst tun müssen z.B.

  1. Extrahieren von Audiodaten aus dem track
  2. Schreiben Sie einen gültigen MP3-Header auf die Festplatte
  3. Weisen Sie den entsprechenden Codec die Audiodaten als MP3 codieren

ACM und API
Erstens wird erwähnt, dass ACM für 'Audio Compression Manager steht'. Dies ist die Bibliothek, die von Microsoft als Teil des Windows fungiert als programmer's Interface für die Codecs geschrieben.

Die ACM gehört wirklich in MMSystem.pas (die Windows multimedia behandelt), aber aus irgendeinem Grund wurden weggelassen. Die erste Aufgabe ist es, eine Kopie des MSACM.pas, zu finden, die eine API-Konvertierung dieser API ist. Das fand ich besonders hilfreich war die Konvertierung von Francois Piette, die am Projekt Jedi (als www.Delphi-Jedi.org) gebucht wurde.

ACM benötigt den Entwickler die folgenden Schritte durchführen, um Medien zwischen Formaten konvertieren

  1. Sie müssen auf Ihren Input und Output Format entscheiden. Dies basiert auf der TWaveFormatEX-Datensatz, aber seien Sie gewarnt, diese Satzstruktur ist nicht wirklich groß genug, um die erforderlichen Informationen über die meisten Codecs zu speichern.

    Es ist aus diesem Grund, dass ich meinen eigenen Rekord TACMFormat verwendet, die nicht mehr als einen TWaveFormatEX-Eintrag mit ein paar extra-Bytes am Ende markiert ist. Sie haben wirklich keine Möglichkeit herauszufinden was (, die ich kenne)
    diesen zusätzlichen Bytes bedeuten, oder sollte so eingestellt werden. Meine Lösung für dieses Problem war, die AcmFormatChoose zu verwenden, damit Entwickler die Formate zur Entwurfszeit auswählen, und dann haben diese Werte strömten innerhalb der IDE als benutzerdefinierte Eigenschaft (mehr dazu später).
  2. Sie müssen dann einen ACM Stream öffnen. Dies erfolgt durch Aufrufen CmStreamOpen, übergeben die Eingabe und Ausgabe-Formate, so dass die ACM ist bewusst was von ihm verlangt wird. An dieser Stelle die ACM kehren entweder ein gültiges Handle in einen Stream oder gibt zurück einen Fehlercode wie ACMERR_NotPossible an, dass die Umwandlung beantragt (mehr darüber später) nicht ausgeführt werden kann.
  3. Der Tagesordnung durchzuführen ist, bestimmen Sie die Größe des Ausgabepuffers. Calling AcmStreamSize informiert die ACM wieviele bytes, die Sie beabsichtigen, es jedes Mal zu liefern, dann zurück, die
    Größe des Ausgabepuffers erforderlich (Dies wird fast immer mehr als geschätzt werden um sicherzustellen, dass Sie einen ausreichend großen Puffer angeben).
  4. Der abschließende Vorbereitungsschritt besteht darin eine Kopfzeile vorzubereiten. Alles, was wir hier tun müssen, ist AcmStreamPrepareHeader übergeben das Stream-Handle erhielten wir von AcmStreamOpen aufrufen. Der Header, die wir vorbereiten auch erklärt der ACM die Adresse unserer 'Quelle'-Puffers und die Adresse unserer 'Ziel'-Puffers (The ACM reserviert diese Erinnerung für uns, wir müssen es uns zuordnen).

An dieser Stelle all unseren Vorbereitungsarbeiten geschieht. Alles, was wir tun müssen, jetzt ist wirklich verlangen, dass unsere Daten konvertiert werden. Da alle unsere Vorbereitung abgeschlossen ist, ist eigentlich eine sehr einfache Schritt. Es wird durch Aufrufen der AcmStreamConvert erreicht. Diese Routine verlangt von uns, Versorgung, die der Stream verarbeiten (So dass es weiß, welche Formate wir arbeiten), und unsere Header behandeln (so dass es die Größe und Speicherort der Quell- und Puffer weiß). Diese Routine wird die tatsächliche Anzahl der Bytes, die bei der Umwandlung von verwendet angeben.
Einstellung CbDstLengthUsed in der Kopfzeile. Die ACM-Sitzung ist nun bereit für ein weiteres Datenteil!

Wenn Sie mit Ihrer ACM-Sitzung beendet haben, ist es Zeit, die Ressourcen frei, die wir verwendet haben. Dies ist der einfachste Teil von allen. Der Header ist mit AcmStreamUnprepareHeader freigegeben und der Stream wird mit AcmStreamClose freigegeben.

Auswählen eines Formats
Bevor Sie einen der oben genannten Schritte durchführen, müssen wir unsere Input- und Output-Formate bereit haben. Wie ich bereits sagte, diese Formate basieren auf TwaveFormatEX (in MMSystem.pas deklariert), die nur einen Datensatz ist bisschen angeben Preise, Frequenz etc. etc.. Es sei denn, Sie möchten nur konvertieren zwischen verschiedenen PCM-Formate (die wirklich sehr unwahrscheinlich ist), wird dieses Format einfach nicht ausreichen. Das folgende Format wurde während der Komponentencode verwendet.

TACMWaveFormat = packed Record
ganze Zahl, die RS
0: (Format: TWaveFormatEx);
1: (RawData: Byte-Array [0..128]);
Ende;

Die Idee dahinter ist, dass wir weiterhin die TWaveFormatEX-Daten zugreifen können, indem Sie auf die Format-Teil des Datensatzes, dennoch RawData uns mit ausreichend Platz für zusätzlichen Daten für jede einzelne Codecs benötigt versorgt.

Obwohl wir nicht wissen, die Größe dieser zusätzlichen Daten oder was es darstellt, ist es noch eine einfache Aufgabe, es zu erwerben. Dies geschieht mithilfe von AcmFormatChoose.

AcmFormatChoose erfordert nur einen Parameter vom Typ TACMFormatChooseA. Dieser Parameter ist eine einfache Struktur, die (die folgenden relevante) Informationen.

pwfx
Ein Zeiger auf eine TWaveFormatEX-Struktur, das Ergebnis zu bekommen (wir geben eigentlich TACMFormat)

cbwfx
Die Größe in Bytes des Puffers, die um das Ergebnis zu erhalten ist.

cbStruct
Die Größe der Struktur

Hinweis:
Ein weiterer Punkt erwähnenswert ist FdwStyle, die Flags angeben zusätzliche Optionen für das Dialogfeld Format Auswahl hält. Insbesondere ist die (sehr lange) Flagge ACMFORMATCHOOSE_STYLEF_INITTOWFXSTRUCT, die im Dialogfeld informiert, die Puffer mit Pwfx bereits gezeigt ein gültiges Format enthält, die als Standard angezeigt werden soll, wenn der Dailog angezeigt wird).

Ein bisschen von Chinese whisper
Früher habe ich den Fehler ACMERR_NotPossible erwähnt. Dies kann für eine Reihe von Gründen auftreten.

Die ersten beiden zu beachten (einfach weil sie am einfachsten sind zu erklären) sind

  1. Der Codec, den Sie auf Ihrem Rechner angegeben möglicherweise nicht verfügbar auf einem Clientcomputer
  2. Obwohl Sie aus einem bestimmten audio-Format konvertieren können, können nicht Sie es konvertieren. Dies ist der Fall mit dem Fraunhofer IIS MP3. Während Windows 9 X und Windows NT-Benutzer können MP3-Dateien zum Inhalt ihres Herzens, erstellen, denn aus irgendeinem Grund die Fähigkeit in Windows 2000 entfernt wurde (ja, nochmals vielen Dank Microsoft). Obwohl Win2K-Benutzer die Ergebnisse hören können, dürfen sie nicht sie zu erzeugen, wenn sie jemand zuerst bezahlst!

Der letzte ist ein wenig komplizierter und garantiert, dass die phrase
'Chinesische Whisper'.

Nicht alle ACM-Formate sind austauschbar, z.B. (ich bin gerade machen diese, so dass wenn sie tatsächlich arbeiten schreiben nicht sagen, dass ich falsch war) möglicherweise nicht in der Lage, konvertieren

GSM 8bit MONO > MP3 8 BIT MONO

Sie müssen einem 'mittleren Menschen' zu finden. Dies ist oftmals ein PCM-Format, wie die meisten (wenn nicht sogar alle) Codecs entworfen wurden, PCM in eine geeignetere Format umwandeln.

Das obige Beispiel würde somit erreicht werden wie folgt.

GSM 8bit MONO > PCM 8 BIT MONO > MP3 8 BIT MONO

Umwandlung in 'MP3 16 BIT STEREO' müsste wohl noch einen Schritt (zwischen PCM und MP3, um 8-Bit PCM 16 Bit PCM konvertieren).

Ich denke, Sie werden jetzt verstehen, warum dieser Abschnitt 'Chinese Whisper' genannt wird. (Wenn mir jemand, die Bedeutung von diesem Satz sagen kann würde ich es schätzen!)

Die verborgenen Talente der ACM
Sie können oder können nicht noch überzeugt, dass die ACM eine gute Sache ist. Dies scheint ziemlich viel Arbeit nur zu einem Medienformat in ein anderes zu konvertieren. Angesichts der Alternative, schreiben Ihre eigenen audio-Format klein genug für Internet streaming oder Schreiben einer eigene MP3-Komprimierung-Routine, ACM ist nennen wir Briten 'ein Kinderspiel'.

Stellen Sie sich eine einfache Anwendung, die nimmt die Eingabe von Ihrem Mikrofon, komprimiert in ein geeignetes Format für das streaming über eine sehr geringe Bandbreite und überträgt sie dann an ein Ziel PC über TCP/IP. Während zur gleichen Zeit komprimierte Daten empfängt, es dekomprimiert und dann spielt es aus dem Lautsprecher (aka, ein einfaches Internettelefon).

Habe ich einfach gesagt? Na ja, eigentlich ja!

Dies klingt wie eine Menge Arbeit, und wahrscheinlich ist (außer mit den gelieferten Komponenten es eigentlich ganz einfach ist).

Dies ist, wo die verborgenen Talente der ACM ins Spiel kommen. Nicht wenige der ACM Codecs sind Wave-zuweisbaren. Was im Grunde bedeutet, dass sie als ein Standardgerät Welle, die beim Spielen / Audioaufnahme behandelt werden können.

Zum Beispiel. Es ist ganz einfach, einen Eingang für ein GSM-Ton-Quelle zu öffnen. Sobald Sie einen Puffer mit Daten von der Welle-Eingabegerät erhalten ist es bereits komprimierte und bereit für die Übertragung. Auf der anderen Seite, sobald die Daten über die TCP/IP Socket empfangen werden, ist es möglich, diese Daten direkt über eine Welle aus Gerät zu spielen.

  1. Daten von MIC
  2. Daten über Socket senden
  3. Daten in-Buchse
  4. Senden von Daten an Welle-Out Gerät

Die standard-PCM-Daten wäre viel zu groß für Echtzeit-streaming über ein Modem. Während GSM-6.1 so niedrig wie 1.5 k pro Sekunde übertragen werden können und MP3 16 BIT MONO bei einer bloßen 2 k/Sekunde gestreamt werden können.

Abgesehen von Win2K wird nicht in der Lage (oder sogar zulässig) um MP3 zu erstellen, es gibt noch etwas erwähnenswert über dieses Format. Obwohl es durchaus als Welle-Out Gerät behandelt werden kann, schien es nicht als eine Welle-Gerät arbeiten. Deshalb fand ich es notwendig, die PCM-Daten manuell in MP3 zu konvertieren (die erwies sich als um ganz schön Demonstrationsprojekt zu machen)

Komponenten, Demos und Quellcode
Nun, es ist nicht alle schön und gut reden, dieses Zeug, aber das wirklich viel Verwendung ohne einige konkrete Beweise zu sichern.

Aus diesem Grund habe ich enthalten drei Komponenten und zwei Demonstrationen (Demos wurden in Delphi 5 kompiliert). Diese Komponenten stehen auf meiner Delphi-Website zum Download zur Verfügung.

Komponenten

  1. TACMConvertor: Dies wirklich dient zwei Zwecken. Erstens: es konvertiert Daten zwischen 2 verschiedene Medienformate. Zweitens, selbst wenn Sie nicht manuell die unformatierten Daten konvertieren möchten, kommt diese Komponente zur Angabe von ein-/Ausgabe-Formate von ACM-Streams. (Komponenten-Editor mit der rechten Maustaste können Sie die Formate aus dem AcmFormatChoose-Dialog bei Designtime auswählen)

  • TACMIn: Diese Komponente dient zum Empfangen von Daten von Ihrem Mikrofon. Sie können ein standard-PCM-Format angeben, oder Sie können angeben, jedes Format fähig durch das WaveIn-Gerät zugeordnet wird.
  • TACMOut: Diese Komponente wird verwendet, das Wiedergeben von Audio durch audio-Ausgang. Auch hier können Sie Ausgabe im PCM-Format oder andere Formate zugeordnet wird, durch das WaveOut-Gerät fähig auswählen. Die NumBuffers-Eigenschaft gibt an, wieviele Puffer gefüllt werden soll bevor Sie anfangen zu spielen. Dies ist nicht viel nützen, wenn Sie sofortige Audio (Internet-Telefone) jedoch kommen, nützlich, können wenn Sie audio-Übertragung über das Internet tun wollen, und möchten einige zusätzliche Audio-Puffer nur für den Fall, dass Ihre Verbindungsgeschwindigkeit schwankt.
  • Demos
    Die erste Demo ist wirklich ganz einfach. Die TACMConvertor werden nur die Input- und Output-Formate angegeben. Diese Demo öffnet ein ACMIn und ein ACMOut gleichzeitig. Audio-Eingang ist fast sofort wieder heraus, aber mit einer leichten Verzögerung, machen Sie klingen ein wenig wie Elvis Prestley (obwohl ich nicht bin ein Elvis Fan, 'Alle geschockt up' das erste Lied, das entstanden in den Sinn war, wenn ich es getestet) geleitet

    Die zweite Demo ist ein wenig komplizierter und besteht aus zwei Teilen.

    Der erste Teil dient (Demo2.dpr) als Server. Es verfügt über einen Serversocket auf Port 6565 neue Verbindungen. Gleichzeitig von dem MIC in audio nimmt, wandelt sie in MP3 16 BIT 8Khz MONO (2k/Sekunde) und leitet es aus für jeden angeschlossenen Client.

    Der zweite Teil dient (Demo2Client.dpr) als Client. Das erste Eingabefeld ein erfordert die IP-Adresse des Servers, während die zweite (SpinEdit)-Eingabe ist die Anzahl der zusätzlichen Puffer, die Sie benötigen. Sobald Sie klicken verbinden (und hat die angeforderte Anzahl der Puffer gefüllt worden) starten Sie die Audiodaten vom Server zu hören. MP3 16 BIT 8Khz MONO ist überraschend gute Qualität und auch überraschend geringe Bandbreite.

    Nun, das gerade über dieses Artikels abgeschlossen ist. Ich hoffe, dass Sie genossen haben, lesen darüber viel mehr, als ich genossen haben es alle heraus zu arbeiten!

    Ab Version 2.0 dieser Komponenten sind jetzt kommerzielle und abrufbar unter https://www.droopyeyes.com









    Konvertieren von Wav zu mp3 und zurück


    Konvertieren von Wav zu mp3 und zurück : Mehreren tausend Tipps, um Ihr Leben einfacher machen.


    Dieser Artikel behandelt eine kurze Einführung in die Windows-API Audio Compression Manager.

    Dies ist eine Kopie eines Artikels schrieb ich für die Delphi-Entwickler-Newsletter

    Komponenten, die ich für diesen Artikel geschrieben habe sind Teil einer Open-Source-Projekt und stehen auf meiner Homepage.

    Audio Compression Manager
    Vor vielen Jahren, bevor ich wirklich wusste, was das Internet war, hörte ich ein Gerücht 'Internettelefonie'. Dieses Stück Software konnte angeblich Rede zwischen zwei Menschen über das Internet in Echtzeit, so dass weltweit Telefongespräche für den Preis für ein Ortsgespräch übertragen. Mit Lyns Bruder Leben in den USA und in uns Leben in Großbritannien Telefonanrufe waren dünn gesät, und immer viel zu teuer. Also, können Sie sich vorstellen, wie spannend diese Gerüchte Technologie für uns war. So spannend, dass wir uns angeschlossen haben.

    Um eine lange Geschichte kurz zu schneiden, wir haben versucht, diese Telefon-Software, und es war schrecklich! So schlecht in der Tat, die wir mit unseren normalen Telefon und lächerlich Telefongebühren zu stecken.

    GUTE NACHRICHTEN! Das war lange her, und seitdem Dinge haben einen langen Weg zurückgelegt (und Telefonanrufe sind auch viel billiger). Mit der zunehmenden Popularität des Internets ist Medien höhere Qualität noch kleiner in Größe geworden.

    Heute gibt es zahlreiche streaming-audio-Formate um, und sogar streaming-Video und alles, was, die dies für Leute zugänglich bei sehr niedrigen Bandbreiten erzielt wurden. Das ist nicht alles, nicht nur diesen Formaten (Quicktime, RealAudio und sogar MP3) werden immer beliebter, sie sind auch für den Entwickler zugänglicher geworden.

    Codecs
    Einige dieser Kompression-Routinen wurden durch die Einführung von 'Codecs' zugänglich gemacht. Eine Reihe von Codecs installiert sind als Standard in Windows-Installation (Danke Microsoft!)

    GSM - ich glaube, dieses Format wird von einigen Mobilfunknetzen verwendet

    DSP TrueSpeech - ich habe gehört, dass eine Demonstration dieses 1-Bit Audioformat, ganz klar!

    Fraunhofer IIS MP3 - Dies ist sicherlich mein Favorit von allen, es erlaubt Ihnen, Ihre eigenen MP3 machen

    PCM - der Standard von Windows, verwendet die meisten Codecs können nach/von PCM konvertieren

    Hinweis:
    Eine vollständige Liste ist im MultiMedia-Bereich Ihres Control Panels von erreicht werden. Doppelklicken Sie 'MultiMedia', dann klicken Sie auf die Registerkarte 'Geräte' und erweitern Sie dann audio-Kompression

    Also, was ist der Sinn eines Codecs? Ein Codec ist ein bisschen wie eine ActiveX-Komponente. ActiveX-Komponenten erlaubt Entwicklern, Funktionalität in ihre Anwendungen zu implementieren, ohne alle Beteiligten Code schreiben zu müssen (z. B. ein Word-Dokument einbetten). Codecs sind die gleiche Art von Ding, sondern konzentrieren sich auf Media-Formate in andere Medienformate zu konvertieren. Wenn Sie eine Anwendung schreiben, die Audiodaten von einer audio-CD und dann konvertiert es in eine MP3 wollte, würde die einzige Arbeit, die Sie selbst tun müssen z.B.

    1. Extrahieren von Audiodaten aus dem track
    2. Schreiben Sie einen gültigen MP3-Header auf die Festplatte
    3. Weisen Sie den entsprechenden Codec die Audiodaten als MP3 codieren

    ACM und API
    Erstens wird erwähnt, dass ACM für 'Audio Compression Manager steht'. Dies ist die Bibliothek, die von Microsoft als Teil des Windows fungiert als programmer's Interface für die Codecs geschrieben.

    Die ACM gehört wirklich in MMSystem.pas (die Windows multimedia behandelt), aber aus irgendeinem Grund wurden weggelassen. Die erste Aufgabe ist es, eine Kopie des MSACM.pas, zu finden, die eine API-Konvertierung dieser API ist. Das fand ich besonders hilfreich war die Konvertierung von Francois Piette, die am Projekt Jedi (als www.Delphi-Jedi.org) gebucht wurde.

    ACM benötigt den Entwickler die folgenden Schritte durchführen, um Medien zwischen Formaten konvertieren

    1. Sie müssen auf Ihren Input und Output Format entscheiden. Dies basiert auf der TWaveFormatEX-Datensatz, aber seien Sie gewarnt, diese Satzstruktur ist nicht wirklich groß genug, um die erforderlichen Informationen über die meisten Codecs zu speichern.

      Es ist aus diesem Grund, dass ich meinen eigenen Rekord TACMFormat verwendet, die nicht mehr als einen TWaveFormatEX-Eintrag mit ein paar extra-Bytes am Ende markiert ist. Sie haben wirklich keine Möglichkeit herauszufinden was (, die ich kenne)
      diesen zusätzlichen Bytes bedeuten, oder sollte so eingestellt werden. Meine Lösung für dieses Problem war, die AcmFormatChoose zu verwenden, damit Entwickler die Formate zur Entwurfszeit auswählen, und dann haben diese Werte strömten innerhalb der IDE als benutzerdefinierte Eigenschaft (mehr dazu später).
    2. Sie müssen dann einen ACM Stream öffnen. Dies erfolgt durch Aufrufen CmStreamOpen, übergeben die Eingabe und Ausgabe-Formate, so dass die ACM ist bewusst was von ihm verlangt wird. An dieser Stelle die ACM kehren entweder ein gültiges Handle in einen Stream oder gibt zurück einen Fehlercode wie ACMERR_NotPossible an, dass die Umwandlung beantragt (mehr darüber später) nicht ausgeführt werden kann.
    3. Der Tagesordnung durchzuführen ist, bestimmen Sie die Größe des Ausgabepuffers. Calling AcmStreamSize informiert die ACM wieviele bytes, die Sie beabsichtigen, es jedes Mal zu liefern, dann zurück, die
      Größe des Ausgabepuffers erforderlich (Dies wird fast immer mehr als geschätzt werden um sicherzustellen, dass Sie einen ausreichend großen Puffer angeben).
    4. Der abschließende Vorbereitungsschritt besteht darin eine Kopfzeile vorzubereiten. Alles, was wir hier tun müssen, ist AcmStreamPrepareHeader übergeben das Stream-Handle erhielten wir von AcmStreamOpen aufrufen. Der Header, die wir vorbereiten auch erklärt der ACM die Adresse unserer 'Quelle'-Puffers und die Adresse unserer 'Ziel'-Puffers (The ACM reserviert diese Erinnerung für uns, wir müssen es uns zuordnen).

    An dieser Stelle all unseren Vorbereitungsarbeiten geschieht. Alles, was wir tun müssen, jetzt ist wirklich verlangen, dass unsere Daten konvertiert werden. Da alle unsere Vorbereitung abgeschlossen ist, ist eigentlich eine sehr einfache Schritt. Es wird durch Aufrufen der AcmStreamConvert erreicht. Diese Routine verlangt von uns, Versorgung, die der Stream verarbeiten (So dass es weiß, welche Formate wir arbeiten), und unsere Header behandeln (so dass es die Größe und Speicherort der Quell- und Puffer weiß). Diese Routine wird die tatsächliche Anzahl der Bytes, die bei der Umwandlung von verwendet angeben.
    Einstellung CbDstLengthUsed in der Kopfzeile. Die ACM-Sitzung ist nun bereit für ein weiteres Datenteil!

    Wenn Sie mit Ihrer ACM-Sitzung beendet haben, ist es Zeit, die Ressourcen frei, die wir verwendet haben. Dies ist der einfachste Teil von allen. Der Header ist mit AcmStreamUnprepareHeader freigegeben und der Stream wird mit AcmStreamClose freigegeben.

    Auswählen eines Formats
    Bevor Sie einen der oben genannten Schritte durchführen, müssen wir unsere Input- und Output-Formate bereit haben. Wie ich bereits sagte, diese Formate basieren auf TwaveFormatEX (in MMSystem.pas deklariert), die nur einen Datensatz ist bisschen angeben Preise, Frequenz etc. etc.. Es sei denn, Sie möchten nur konvertieren zwischen verschiedenen PCM-Formate (die wirklich sehr unwahrscheinlich ist), wird dieses Format einfach nicht ausreichen. Das folgende Format wurde während der Komponentencode verwendet.

    TACMWaveFormat = packed Record
    ganze Zahl, die RS
    0: (Format: TWaveFormatEx);
    1: (RawData: Byte-Array [0..128]);
    Ende;

    Die Idee dahinter ist, dass wir weiterhin die TWaveFormatEX-Daten zugreifen können, indem Sie auf die Format-Teil des Datensatzes, dennoch RawData uns mit ausreichend Platz für zusätzlichen Daten für jede einzelne Codecs benötigt versorgt.

    Obwohl wir nicht wissen, die Größe dieser zusätzlichen Daten oder was es darstellt, ist es noch eine einfache Aufgabe, es zu erwerben. Dies geschieht mithilfe von AcmFormatChoose.

    AcmFormatChoose erfordert nur einen Parameter vom Typ TACMFormatChooseA. Dieser Parameter ist eine einfache Struktur, die (die folgenden relevante) Informationen.

    pwfx
    Ein Zeiger auf eine TWaveFormatEX-Struktur, das Ergebnis zu bekommen (wir geben eigentlich TACMFormat)

    cbwfx
    Die Größe in Bytes des Puffers, die um das Ergebnis zu erhalten ist.

    cbStruct
    Die Größe der Struktur

    Hinweis:
    Ein weiterer Punkt erwähnenswert ist FdwStyle, die Flags angeben zusätzliche Optionen für das Dialogfeld Format Auswahl hält. Insbesondere ist die (sehr lange) Flagge ACMFORMATCHOOSE_STYLEF_INITTOWFXSTRUCT, die im Dialogfeld informiert, die Puffer mit Pwfx bereits gezeigt ein gültiges Format enthält, die als Standard angezeigt werden soll, wenn der Dailog angezeigt wird).

    Ein bisschen von Chinese whisper
    Früher habe ich den Fehler ACMERR_NotPossible erwähnt. Dies kann für eine Reihe von Gründen auftreten.

    Die ersten beiden zu beachten (einfach weil sie am einfachsten sind zu erklären) sind

    1. Der Codec, den Sie auf Ihrem Rechner angegeben möglicherweise nicht verfügbar auf einem Clientcomputer
    2. Obwohl Sie aus einem bestimmten audio-Format konvertieren können, können nicht Sie es konvertieren. Dies ist der Fall mit dem Fraunhofer IIS MP3. Während Windows 9 X und Windows NT-Benutzer können MP3-Dateien zum Inhalt ihres Herzens, erstellen, denn aus irgendeinem Grund die Fähigkeit in Windows 2000 entfernt wurde (ja, nochmals vielen Dank Microsoft). Obwohl Win2K-Benutzer die Ergebnisse hören können, dürfen sie nicht sie zu erzeugen, wenn sie jemand zuerst bezahlst!

    Der letzte ist ein wenig komplizierter und garantiert, dass die phrase
    'Chinesische Whisper'.

    Nicht alle ACM-Formate sind austauschbar, z.B. (ich bin gerade machen diese, so dass wenn sie tatsächlich arbeiten schreiben nicht sagen, dass ich falsch war) möglicherweise nicht in der Lage, konvertieren

    GSM 8bit MONO > MP3 8 BIT MONO

    Sie müssen einem 'mittleren Menschen' zu finden. Dies ist oftmals ein PCM-Format, wie die meisten (wenn nicht sogar alle) Codecs entworfen wurden, PCM in eine geeignetere Format umwandeln.

    Das obige Beispiel würde somit erreicht werden wie folgt.

    GSM 8bit MONO > PCM 8 BIT MONO > MP3 8 BIT MONO

    Umwandlung in 'MP3 16 BIT STEREO' müsste wohl noch einen Schritt (zwischen PCM und MP3, um 8-Bit PCM 16 Bit PCM konvertieren).

    Ich denke, Sie werden jetzt verstehen, warum dieser Abschnitt 'Chinese Whisper' genannt wird. (Wenn mir jemand, die Bedeutung von diesem Satz sagen kann würde ich es schätzen!)

    Die verborgenen Talente der ACM
    Sie können oder können nicht noch überzeugt, dass die ACM eine gute Sache ist. Dies scheint ziemlich viel Arbeit nur zu einem Medienformat in ein anderes zu konvertieren. Angesichts der Alternative, schreiben Ihre eigenen audio-Format klein genug für Internet streaming oder Schreiben einer eigene MP3-Komprimierung-Routine, ACM ist nennen wir Briten 'ein Kinderspiel'.

    Stellen Sie sich eine einfache Anwendung, die nimmt die Eingabe von Ihrem Mikrofon, komprimiert in ein geeignetes Format für das streaming über eine sehr geringe Bandbreite und überträgt sie dann an ein Ziel PC über TCP/IP. Während zur gleichen Zeit komprimierte Daten empfängt, es dekomprimiert und dann spielt es aus dem Lautsprecher (aka, ein einfaches Internettelefon).

    Habe ich einfach gesagt? Na ja, eigentlich ja!

    Dies klingt wie eine Menge Arbeit, und wahrscheinlich ist (außer mit den gelieferten Komponenten es eigentlich ganz einfach ist).

    Dies ist, wo die verborgenen Talente der ACM ins Spiel kommen. Nicht wenige der ACM Codecs sind Wave-zuweisbaren. Was im Grunde bedeutet, dass sie als ein Standardgerät Welle, die beim Spielen / Audioaufnahme behandelt werden können.

    Zum Beispiel. Es ist ganz einfach, einen Eingang für ein GSM-Ton-Quelle zu öffnen. Sobald Sie einen Puffer mit Daten von der Welle-Eingabegerät erhalten ist es bereits komprimierte und bereit für die Übertragung. Auf der anderen Seite, sobald die Daten über die TCP/IP Socket empfangen werden, ist es möglich, diese Daten direkt über eine Welle aus Gerät zu spielen.

    1. Daten von MIC
    2. Daten über Socket senden
    3. Daten in-Buchse
    4. Senden von Daten an Welle-Out Gerät

    Die standard-PCM-Daten wäre viel zu groß für Echtzeit-streaming über ein Modem. Während GSM-6.1 so niedrig wie 1.5 k pro Sekunde übertragen werden können und MP3 16 BIT MONO bei einer bloßen 2 k/Sekunde gestreamt werden können.

    Abgesehen von Win2K wird nicht in der Lage (oder sogar zulässig) um MP3 zu erstellen, es gibt noch etwas erwähnenswert über dieses Format. Obwohl es durchaus als Welle-Out Gerät behandelt werden kann, schien es nicht als eine Welle-Gerät arbeiten. Deshalb fand ich es notwendig, die PCM-Daten manuell in MP3 zu konvertieren (die erwies sich als um ganz schön Demonstrationsprojekt zu machen)

    Komponenten, Demos und Quellcode
    Nun, es ist nicht alle schön und gut reden, dieses Zeug, aber das wirklich viel Verwendung ohne einige konkrete Beweise zu sichern.

    Aus diesem Grund habe ich enthalten drei Komponenten und zwei Demonstrationen (Demos wurden in Delphi 5 kompiliert). Diese Komponenten stehen auf meiner Delphi-Website zum Download zur Verfügung.

    Komponenten

    1. TACMConvertor: Dies wirklich dient zwei Zwecken. Erstens: es konvertiert Daten zwischen 2 verschiedene Medienformate. Zweitens, selbst wenn Sie nicht manuell die unformatierten Daten konvertieren möchten, kommt diese Komponente zur Angabe von ein-/Ausgabe-Formate von ACM-Streams. (Komponenten-Editor mit der rechten Maustaste können Sie die Formate aus dem AcmFormatChoose-Dialog bei Designtime auswählen)

  • TACMIn: Diese Komponente dient zum Empfangen von Daten von Ihrem Mikrofon. Sie können ein standard-PCM-Format angeben, oder Sie können angeben, jedes Format fähig durch das WaveIn-Gerät zugeordnet wird.
  • TACMOut: Diese Komponente wird verwendet, das Wiedergeben von Audio durch audio-Ausgang. Auch hier können Sie Ausgabe im PCM-Format oder andere Formate zugeordnet wird, durch das WaveOut-Gerät fähig auswählen. Die NumBuffers-Eigenschaft gibt an, wieviele Puffer gefüllt werden soll bevor Sie anfangen zu spielen. Dies ist nicht viel nützen, wenn Sie sofortige Audio (Internet-Telefone) jedoch kommen, nützlich, können wenn Sie audio-Übertragung über das Internet tun wollen, und möchten einige zusätzliche Audio-Puffer nur für den Fall, dass Ihre Verbindungsgeschwindigkeit schwankt.
  • Demos
    Die erste Demo ist wirklich ganz einfach. Die TACMConvertor werden nur die Input- und Output-Formate angegeben. Diese Demo öffnet ein ACMIn und ein ACMOut gleichzeitig. Audio-Eingang ist fast sofort wieder heraus, aber mit einer leichten Verzögerung, machen Sie klingen ein wenig wie Elvis Prestley (obwohl ich nicht bin ein Elvis Fan, 'Alle geschockt up' das erste Lied, das entstanden in den Sinn war, wenn ich es getestet) geleitet

    Die zweite Demo ist ein wenig komplizierter und besteht aus zwei Teilen.

    Der erste Teil dient (Demo2.dpr) als Server. Es verfügt über einen Serversocket auf Port 6565 neue Verbindungen. Gleichzeitig von dem MIC in audio nimmt, wandelt sie in MP3 16 BIT 8Khz MONO (2k/Sekunde) und leitet es aus für jeden angeschlossenen Client.

    Der zweite Teil dient (Demo2Client.dpr) als Client. Das erste Eingabefeld ein erfordert die IP-Adresse des Servers, während die zweite (SpinEdit)-Eingabe ist die Anzahl der zusätzlichen Puffer, die Sie benötigen. Sobald Sie klicken verbinden (und hat die angeforderte Anzahl der Puffer gefüllt worden) starten Sie die Audiodaten vom Server zu hören. MP3 16 BIT 8Khz MONO ist überraschend gute Qualität und auch überraschend geringe Bandbreite.

    Nun, das gerade über dieses Artikels abgeschlossen ist. Ich hoffe, dass Sie genossen haben, lesen darüber viel mehr, als ich genossen haben es alle heraus zu arbeiten!

    Ab Version 2.0 dieser Komponenten sind jetzt kommerzielle und abrufbar unter https://www.droopyeyes.com


    Konvertieren von Wav zu mp3 und zurück

    Konvertieren von Wav zu mp3 und zurück : Mehreren tausend Tipps, um Ihr Leben einfacher machen.
    Konvertieren von Wav zu mp3 und zurück
    Wiezutun
    Freunden empfehlen
    • gplus
    • pinterest

    Kommentar

    Einen Kommentar hinterlassen

    Wertung