2 Stimmen

Audioausgabe von Silverlight

Ich bin auf der Suche nach einer Silverlight-Anwendung zu entwickeln, die einen Datenstrom (nicht ein Audio-Stream als solche) von einem Web-Server nehmen wird.

Der Datenstrom wird dann so manipuliert, dass ein bestimmtes Audioformat entsteht (z. B. G.711 a-Law), das dann in PCM umgewandelt wird, so dass zusätzliche Effekte (wie z. B. die Anhebung der Lautstärke) angewendet werden können.

Bis zu diesem Punkt geht es mir gut. Ich habe meine Daten, konvertiert die G.711 in PCM, aber mein Problem ist in der Lage, diese PCM-Audio an die Soundkarte ausgeben.

Ich basiere eine Lösung auf einige C#-Code für eine .Net-Anwendung bestimmt, aber in Silverlight gibt es ein Problem mit dem Versuch, eine Kopie eines Delegaten (Funktionszeiger), die das Thema einer separaten Frage sein wird, sobald ich ein einfaches Code-Beispiel produziert habe.

Also, die Frage ist... Wie kann ich das PCM-Audio, das ich in einer Datenstruktur (derzeit ein Array) in meinem Silverlight gehalten habe, an den Benutzer ausgeben? (Bitte sagen Sie nicht, schreiben Sie die Byte-Werte in ein Textfeld)

Wenn es sich um eine MP3- oder WMA-Datei handeln würde, würde ich sie mit einem MediaElement abspielen, aber ich möchte sie nicht in eine Datei umwandeln müssen, da dies die Anwendung dynamischer Effekte auf das Audio beeinträchtigen würde.

Ich habe ein paar Beiträge von Leuten gesehen, die sagen, dass Low-Level-Audio-Unterstützung in Silverlight schlecht/nicht vorhanden ist, also bin ich offen für alle Vorschläge/Ideen, die Leute haben könnten.

4voto

Mark Heath Punkte 46572

Die einfache Antwort ist, dass es keine Unterstützung für PCM-Wiedergabe von Silverlight in Version 2 gibt. Wenn Sie also keinen vollständig verwalteten PCM-zu-MP3-Konverter schreiben wollen, sitzen Sie fest. Selbst dann bin ich mir nicht sicher, ob Sie das MediaElement dazu bringen können, von einem isolierten Speicher abzuspielen.

Gibt es eine Möglichkeit, die Konvertierung über einen Webdienst durchzuführen?

Siehe auch diese Frage: Wo ist die Sound-API in Silverlight? Oder wie schreibe ich eine Musikanwendung, die im Browser läuft?

Aktualisierung: Silverlight 3 unterstützt Ihre eigenen Audioquellen. Allerdings können Sie keine Samples abfangen, um Effekte auf WMA oder MP3 durchzuführen, vermutlich aus DRM-Gründen.

2voto

Larry Olson Punkte 214

Kurze Antwort ist ein MediaElement + eine MediaStreamSource verwenden

Sehen Sie sich diese an:

http://blogs.msdn.com/gillesk/archive/2009/03/23/playing-back-wave-files-in-silverlight.aspx

http://code.msdn.microsoft.com/wavmss/Release/ProjectReleases.aspx?ReleaseId=2417

Schreiben Sie einen Decoder in verwaltetem Code, um G.711 a-Law in PCM zu konvertieren, nehmen Sie dann die gewünschten Änderungen an den Rohwerten vor und übergeben Sie diese an eine MediaStreamSource.

0voto

Andrew Wyatt Punkte 417

Die Antwort von Mark Heath ist richtig - nur bestimmte Formate werden unterstützt - mp3 und bestimmte WMA-Varianten (leider nicht WMA lossless, was PCM "näher" käme).

Um PCM-Daten in Silverlight abzuspielen, können Sie wie folgt vorgehen:
* Konvertiert die PCM in mp3-Daten und speichert sie im Speicher.
* Spielen Sie die mp3-Daten mit der Technik ab, die unter ManagedMediaHelpers . Die Idee dahinter ist eine Klasse namens Mp3MediaStreamSource (abgeleitet von System.Windows.Media.MediaStreamSource), die einem MediaElement mp3-Bausteine zur Wiedergabe bereitstellt. Die Chunks müssen in einem Stream sein, aber natürlich reicht auch ein Speicher-Stream.

Ursprünglich dachte ich, Sie könnten PCM-Blöcke über MediaStreamSource bereitstellen, aber das funktioniert nicht. Es ist eine echte Schande, wie es Ihr Problem lösen würde (und das, das ich konfrontiert war - machen eine Speex-Audio-Datei-Player) wirklich einfach!

0voto

Es sieht so aus, als ob Silverlight 3 jetzt die direkte PCM-Ausgabe unterstützt, oder dies bei Veröffentlichung tun wird. Ich sehe nichts in den Unterlagen über die rohe AV-Pipeline noch.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X