2010-03-19 17 views
7

Napisałem podstawową aplikację SL4 do przechwytywania danych dźwiękowych z mikrofonu przy użyciu CaptureSource. Problem polega na tym, że jest to surowe wyjście PCM - co oznacza ogromne i nieskompresowane.Silverlight 4 - kodowanie danych PCM z mikrofonu

Biorąc pod uwagę, że potrzebuję tej aplikacji, aby działała wyłącznie w środowisku SL4, w jaki sposób mogę skompresować dane audio PCM do czegoś, co może być łatwiej dostarczane do zdalnego serwera?

Zasadniczo potrzebuję rozwiązania, które mogę wdrożyć/dołączyć do aplikacji Windows Phone Series 7, a także takiego, które będzie działało w środowisku przeglądarki - tak myślę, że tylko zarządzane rozwiązania kodu?

W rozmowie ludzie sugerowali na przykład Speex i WMA, ale nie znalazłem żadnych bibliotek ani przykładów, które działają bez potrzeby odwoływania się do bibliotek DLL, które nie będą działać w projekcie SL4.

Odpowiedz

4

Zobacz klasę WavFileHelper w Silverlight 4 Rough Notes: Camera and Microphone Support na blogu Mike'a Taulty (nieco niżej niż na środku strony, ale pełny artykuł jest wart zachodu), w którym kompresuje plik PCM do formatu WAV.

Oto kolejny przykład pisania do WAV można zmienić wartości, takie jak Mono/Stereo, które bezpośrednio zmienią rozmiar pliku WAV: Audio recorder Silverlight 4 sample. I jeszcze jeden, który podaje więcej szczegółów na temat pisania do WAV: Creating Sound using MediaStreamSource in Silverlight 3 Beta

+0

Dzięki, to są wszystkie artykuły, które widziałem. Należy pamiętać o tym, że muszę "skompresować dane audio PCM do czegoś, co może być łatwiej dostarczane do zdalnego serwera". Konwersja PCM na WAV jest łatwa, ale kompresja danych wyjściowych nie jest. WAV jest niepożądany, ponieważ jest tak rozdęty, nawet jeśli kodujesz go jako mono. Blog Mike'a Taulty'a świetnie pokazuje, jak używać zlewozmywaków do przechwytywania PCM i konwersji na format WAV, ale domyślam się, że naprawdę potrzebujemy tutaj MediaStreamSource lub czegoś podobnego, co daje wynik Speex lub WMA. – Richard

+0

@Otaku - Przyjąłem twoją odpowiedź; był to najbardziej wszechstronnie pozyskiwany. Jednak wciąż pozostaje jeszcze wiele do zrobienia i postaram się zaktualizować ten artykuł w pewnym momencie w przyszłości za pomocą mojej faktycznej odpowiedzi. Dzięki za wkład. – Richard

+0

@Richard - dziękuję! Słyszałem o potrzebie czegoś znacznie bardziej kompaktowego niż WAV. Będę trzymał się tego przedsmaku, jak również wpadam na różne rzeczy i jeśli pojawi się coś lepszego, zaktualizuję odpowiedź. –

0

Ten artykuł http://alvas.net/alvas.audio,articles.aspx#how-to-save-audio-to-mp3-on-silverlight o zapisywaniu dźwięku na kliencie. Aby przesłać dane audio na serwer, możesz na przykład użyć WebClient.

+0

Dzięki; to, czego szukam, to jednak rozwiązanie zarządzane wyłącznie przez platformę .NET bez żadnych komponentów firm trzecich, które nie są specjalnie ukierunkowane na platformę SL4. Potrzebuję rozwiązania, które będzie działać również w systemie Windows Phone Series 7. – Richard

1

Spójrz na this. Wygląda na to, że umieścił koder Speexa w języku C# pod kątem dokładnego problemu, który próbujesz rozwiązać. Jest dostępny here. Speex jest przeznaczony do mowy i powinien działać lepiej niż wma, mp3 lub inne kodeki audio, które są przeznaczone do obsługi muzyki, jeśli tylko kodujesz mowę, co zakładam, ponieważ przechwytujesz z mikrofonu.

+0

Dzięki Jason. Widziałem to już wcześniej - będę musiał to powtórzyć i sprawdzić, czy to działa; Zapomniałem dokładnie, dlaczego pierwszy raz go zignorowałem! – Richard

+0

Odsyłacze do linków: nie udało się wczytać treści strony – Nasenbaer

-2

Możesz kodować dane przez serwer, wysłać cały strumień do usługi WCF i kodować za pomocą interfejsu API SDK Microsoft Expression Encoding.

Proszę zobaczyć ten adres URL, który poprosiłem wcześniej: http://forums.silverlight.net/forums/t/181141.aspx

Pozdrowienia

+0

Dzięki, ale chodzi o skompresowanie * przed * wysłaniem na serwer. – Richard

Powiązane problemy