Аудио выход из Silverlight - PullRequest
       17

Аудио выход из Silverlight

2 голосов
/ 25 февраля 2009

Я ищу разработку приложения Silverlight, которое будет принимать поток данных (а не аудиопоток как таковой) с веб-сервера.

Затем потоком данных будут манипулировать для получения звука определенного формата (например, G-711 a-Law), который затем будет преобразован в PCM, чтобы можно было применить дополнительные эффекты (например, повысить громкость).

Я в порядке до этого момента. Я получил свои данные, преобразовал G.711 в PCM, но моя проблема заключается в том, что я могу вывести этот звук PCM на звуковую карту.

Я основываю решение на некотором коде C #, предназначенном для приложения .Net, но в Silverlight есть проблема с попыткой получить копию делегата (указатель на функцию), которая будет темой отдельного вопроса, как только я произвел простой пример кода.

Итак, вопрос в том ... Как я могу вывести аудио PCM, которое я держал в структуре данных (в настоящее время массив) в моем Silverlight для пользователя? (Пожалуйста, не пишите значения байтов в текстовое поле)

Если бы это был файл MP3 или WMA, я бы проиграл его с помощью MediaElement, но я не хочу превращать его в файл, поскольку это затруднит применение динамических эффектов к звуку.

Я видел несколько сообщений от людей, говорящих о низкоуровневой поддержке звука в Silverlight, поэтому я открыт для любых предложений / идей, которые могут быть у людей.

Ответы [ 4 ]

4 голосов
/ 25 февраля 2009

Простой ответ заключается в том, что в Silverlight версии 2 отсутствует поддержка воспроизведения PCM. Поэтому, если вы не хотите записать полностью управляемый преобразователь PCM в MP3, вы застряли. Даже тогда я не уверен, что вы можете заставить MediaElement воспроизводиться из изолированного хранилища.

Есть ли вероятность, что вы можете использовать веб-сервис для выполнения конвертации?

Смотрите также этот вопрос: Где звуковой API в Silverlight? Или как мне написать музыкальное приложение для запуска в браузере?

Обновление: Silverlight 3 поддерживает ваши собственные аудиоисточники. Однако он не позволит вам перехватывать сэмплы для выполнения эффектов в WMA или MP3, предположительно по причинам DRM, поэтому вам все равно потенциально потребуется написать собственный декодер.

2 голосов
/ 07 апреля 2009

Короткий ответ - использовать MediaElement + MediaStreamSource

Проверьте это:

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

По сути, напишите декодер в управляемом коде для преобразования a-Law G.711 в PCM, затем внесите любые необходимые изменения в необработанные значения и передайте их в MediaStreamSource.

0 голосов
/ 20 марта 2009

Похоже, Silverlight 3 теперь поддерживает прямой вывод PCM или будет выпущен. Я ничего не вижу в документации о сыром AV-конвейере.

0 голосов
/ 06 марта 2009

Марк Хит отвечает правильно - поддерживаются только определенные форматы - mp3 и некоторые разновидности WMA (к сожалению, не без потерь WMA, которые были бы «ближе» к PCM).

Чтобы воспроизвести данные PCM в Silverlight, вы можете сделать следующее:
* Конвертируйте PCM в mp3 данные и сохраняйте их в памяти.
* Воспроизведение данных в формате mp3 с использованием техники, представленной на ManagedMediaHelpers . Идея здесь включает в себя класс Mp3MediaStreamSource (производный от System.Windows.Media.MediaStreamSource), который предоставляет фрагменты mp3 для MediaElement для воспроизведения. Куски должны быть в потоке, но, конечно, подойдет поток памяти.

Сначала я подумал, что вы можете предоставить блоки PCM через MediaStreamSource, но это не работает. Это настоящий позор, потому что это решит вашу проблему (и ту, с которой я столкнулся - создание проигрывателя аудиофайлов Speex) очень легко!

...