Играйте аудио от потока с помощью C#

Другое событие NullPointerException возникает, когда объявляется массив объектов, а затем сразу же пытается разыменовать его внутри.

String[] phrases = new String[10];
String keyPhrase = "Bird";
for(String phrase : phrases) {
    System.out.println(phrase.equals(keyPhrase));
}

Этот конкретный NPE можно избежать, если порядок сравнения отменяется ; а именно, использовать .equals для гарантированного непустого объекта.

Все элементы внутри массива инициализируются их общим начальным значением ; для любого типа массива объектов, это означает, что все элементы null.

Вы должны инициализировать элементы в массиве перед доступом или разыменованием их.

String[] phrases = new String[] {"The bird", "A bird", "My bird", "Bird"};
String keyPhrase = "Bird";
for(String phrase : phrases) {
    System.out.println(phrase.equals(keyPhrase));
}

96
задан Martin 19 November 2013 в 06:54
поделиться

7 ответов

Редактирование: Ответ обновил для отражения изменений в последних версиях NAudio

, Это - возможное использование библиотека аудио.NET открытого исходного кода NAudio, которую я записал. Это ищет кодек ACM на Вашем ПК, чтобы сделать преобразование. Mp3FileReader, предоставленный NAudio в настоящее время, ожидает быть в состоянии изменить местоположение в исходном потоке (это создает индекс кадров MP3 впереди), таким образом, это не подходит для потоковой передачи по сети. Однако можно все еще использовать MP3Frame и AcmMp3FrameDecompressor классы в NAudio для распаковки переданного потоком MP3 на лету.

я разместил статью в своем блоге, объяснив , как воспроизвести поток MP3 с помощью NAudio. По существу у Вас есть один поток, загружающий кадры MP3, распаковывая их и храня их в BufferedWaveProvider. Другой поток тогда воспроизводит использование BufferedWaveProvider как вход.

51
ответ дан Martin 24 November 2019 в 05:41
поделиться

класс SoundPlayer может сделать это. Это похоже на все, что необходимо сделать, установлен свойство Stream к потоку, затем звоните Play.

редактирование
я не думаю, что оно может играть файлы MP3 хотя; это кажется ограниченным .wav. Я не уверен, существует ли что-нибудь в платформе, которая может играть файл MP3 непосредственно. Все, что я нахожу об этом, включает или использование управления WMP или взаимодействие с DirectX.

9
ответ дан OwenP 24 November 2019 в 05:41
поделиться

Bass может сделать просто это. Игра от Байта [] в памяти или через файл делегирует, куда Вы возвращаете данные, таким образом, с которым можно играть, как только у Вас есть достаточно данных для запуска воспроизведения..

5
ответ дан slugster 24 November 2019 в 05:41
поделиться

NAudio обертывает WaveOutXXXX API. Я не посмотрел на источник, но если NAudio представляет waveOutWrite () функция способом, которая автоматически не останавливает воспроизведение на каждом вызове, тогда необходимо быть в состоянии сделать то, что Вы действительно хотите, который должен начать играть аудиопоток перед получением всех данных.

Используя waveOutWrite () функция позволяет Вам "читать вперед" и выводить меньшие блоки аудио в очередь вывода - Windows будет автоматически играть блоки беспрепятственно. Ваш код должен был бы взять сжатый аудиопоток и преобразовать его в маленькие блоки аудио WAV на лету; эта часть была бы действительно трудной - все библиотеки и компоненты, которые я когда-либо видел, делают преобразование MP3 к WAV весь файл за один раз. Вероятно, Ваш единственный реалистический шанс состоит в том, чтобы сделать это использование WMA вместо MP3, потому что можно записать простые обертки C# вокруг мультимедийного SDK.

1
ответ дан MusiGenesis 24 November 2019 в 05:41
поделиться

Я не попробовал его от WebRequest, но и Windows Media Player ActiveX и MediaElement (от WPF), компоненты способны к игре и буферизации потоков MP3.

я использую его для игры данных, прибывающих из поток SHOUTcast , и это работало отлично. Однако я не уверен, будет ли это работать в сценарии, Вы делаете предложение.

0
ответ дан Peter Mortensen 24 November 2019 в 05:41
поделиться

Я всегда использовал FMOD для подобных вещей, потому что он бесплатный для некоммерческого использования и хорошо работает.

Тем не менее, я бы хотел с удовольствием переключайтесь на что-то меньшее (FMOD ~ 300k) и с открытым исходным кодом. Супер бонусные баллы, если он полностью управляется так, чтобы я мог скомпилировать / объединить его с моим.

0
ответ дан 24 November 2019 в 05:41
поделиться

Я обернул библиотеку декодера MP3 и сделал ее доступной для разработчиков .NET как mpg123.net .

Включены образцы для преобразования файлов MP3 в PCM и чтения тегов ID3 .

1
ответ дан 24 November 2019 в 05:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: