2010-03-19 4 views
7

Ich habe eine grundlegende SL4-Anwendung geschrieben, um Audiodaten vom Mikrofon mit CaptureSource zu erfassen. Das Problem ist, es ist rohe PCM-Ausgabe - was bedeutet, groß und unkomprimiert.Silverlight 4 - Codierung von PCM-Daten vom Mikrofon

Vorausgesetzt, dass ich diese Anwendung nur innerhalb einer SL4-Umgebung ausführen muss, wie kann ich die PCM-Audiodaten in etwas komprimieren, das leichter an einen Remote-Server geliefert werden kann?

Im Wesentlichen brauche ich eine Lösung, die ich auch in einer Windows Phone Series 7-Anwendung bereitstellen und in die Browserumgebung integrieren kann - also nur Lösungen mit verwaltetem Code, denke ich?

In der Konversation haben Leute zum Beispiel Speex und WMA vorgeschlagen, aber ich habe keine Bibliotheken oder Beispiele gefunden, die funktionieren, ohne einen Verweis auf DLLs zu benötigen, die in einem SL4-Projekt nicht funktionieren.

Antwort

4

Bitte lesen Sie die WavFileHelper Klasse in Silverlight 4 Rough Notes: Camera and Microphone Support auf Mike Taulys Blog (ein wenig niedriger als die Mitte der Seite, aber der vollständige Artikel lohnt sich), in dem er die PCM-Datei zu WAV komprimiert.

Hier ist ein weiteres Beispiel, wenn Sie in WAV schreiben, können Sie Werte wie Mono/Stereo ändern, wodurch sich die Größe der WAV-Datei direkt ändert: Audio recorder Silverlight 4 sample. Und noch eine, die mehr Details zum Schreiben in WAV gibt: Creating Sound using MediaStreamSource in Silverlight 3 Beta

+0

Danke, das sind alle Artikel, die ich gesehen habe. Eine Sache, die hier zu beachten ist, ist meine Anforderung, dass ich die PCM-Audiodaten in etwas komprimieren muss, das leichter an einen entfernten Server geliefert werden kann. Konvertieren von PCM zu WAV ist einfach, aber das Komprimieren der Ausgabe ist nicht möglich. WAV ist unerwünscht, weil es so blöd ist, auch wenn Sie es als Mono kodieren. Mike Taulys Blog ist großartig darin zu zeigen, wie man die Senken benutzt, um PCM zu erfassen und in WAV zu konvertieren, aber ich denke, wir brauchen hier eine MediaStreamSource oder etwas ähnliches, das als Speex oder WMA ausgegeben wird. – Richard

+0

@ Otaku - Ich habe deine Antwort akzeptiert; es wurde am umfassendsten beschafft. Es muss jedoch noch viel mehr getan werden, und ich werde versuchen, diesen Artikel irgendwann mit meiner tatsächlichen Antwort zu aktualisieren. Danke für deinen Beitrag. – Richard

+0

@Richard - danke! Ich höre Sie auf die Notwendigkeit für etwas viel kompakter als WAV. Ich werde diesen Gedanken behalten, genauso wie ich auf Dinge stoße und wenn etwas Besseres kommt, werde ich die Antwort aktualisieren. –

0

Dieser Artikel http://alvas.net/alvas.audio,articles.aspx#how-to-save-audio-to-mp3-on-silverlight über das Speichern von Audio auf dem Client. Um Audiodaten an einen Server zu senden, können Sie beispielsweise den WebClient verwenden.

+0

Danke; Was ich jedoch möchte, ist eine reine .NET-verwaltete Lösung ohne Komponenten von Drittanbietern, die nicht speziell auf die SL4-Plattform ausgerichtet sind. Ich brauche eine Lösung, die auch auf Windows Phone Series 7 funktioniert. – Richard

1

Werfen Sie einen Blick auf this. Offenbar hat er den Speex-Encoder für das genaue Problem, das Sie lösen wollen, nach C# portiert. Es ist verfügbar here. Speex ist für Sprache ausgelegt und sollte besser funktionieren als wma, mp3 oder andere Audio-Codecs, die für den Umgang mit Musik ausgelegt sind, wenn Sie nur Sprache codieren, was ich vermute, da Sie vom Mikrofon greifen.

+0

Danke Jason. Ich habe das schon einmal gesehen - ich muss es noch einmal sehen und sehen, ob es funktioniert. Ich vergesse den genauen Grund, warum ich es das erste Mal rabattiert habe! – Richard

+0

Links obsolet: Seiteninhalt konnte nicht geladen werden – Nasenbaer

-2

Sie können die Codierung über den Server durchführen, indem Sie den gesamten Stream an den WCF-Dienst senden und Ihre Codierung über die Microsoft Expression Encoding SDK-API vornehmen.

Bitte, sehen Sie diese URL, die ich gefragt habe vor: http://forums.silverlight.net/forums/t/181141.aspx

Grüße

+0

Danke, aber der Punkt ist, es zu komprimieren * bevor * es wird an den Server gesendet. – Richard

5

Nur eine kleine Ergänzung zu Jason's post:

ein anderer Hafen von Speex zu .NET und Silverlight Es gibt 4 genannt NSpeex.