Другое событие 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));
}
Редактирование: Ответ обновил для отражения изменений в последних версиях NAudio
, Это - возможное использование библиотека аудио.NET открытого исходного кода NAudio, которую я записал. Это ищет кодек ACM на Вашем ПК, чтобы сделать преобразование. Mp3FileReader, предоставленный NAudio в настоящее время, ожидает быть в состоянии изменить местоположение в исходном потоке (это создает индекс кадров MP3 впереди), таким образом, это не подходит для потоковой передачи по сети. Однако можно все еще использовать MP3Frame
и AcmMp3FrameDecompressor
классы в NAudio для распаковки переданного потоком MP3 на лету.
я разместил статью в своем блоге, объяснив , как воспроизвести поток MP3 с помощью NAudio. По существу у Вас есть один поток, загружающий кадры MP3, распаковывая их и храня их в BufferedWaveProvider
. Другой поток тогда воспроизводит использование BufferedWaveProvider
как вход.
класс SoundPlayer может сделать это. Это похоже на все, что необходимо сделать, установлен свойство Stream к потоку, затем звоните Play
.
редактирование
я не думаю, что оно может играть файлы MP3 хотя; это кажется ограниченным .wav. Я не уверен, существует ли что-нибудь в платформе, которая может играть файл MP3 непосредственно. Все, что я нахожу об этом, включает или использование управления WMP или взаимодействие с DirectX.
Bass может сделать просто это. Игра от Байта [] в памяти или через файл делегирует, куда Вы возвращаете данные, таким образом, с которым можно играть, как только у Вас есть достаточно данных для запуска воспроизведения..
NAudio обертывает WaveOutXXXX API. Я не посмотрел на источник, но если NAudio представляет waveOutWrite () функция способом, которая автоматически не останавливает воспроизведение на каждом вызове, тогда необходимо быть в состоянии сделать то, что Вы действительно хотите, который должен начать играть аудиопоток перед получением всех данных.
Используя waveOutWrite () функция позволяет Вам "читать вперед" и выводить меньшие блоки аудио в очередь вывода - Windows будет автоматически играть блоки беспрепятственно. Ваш код должен был бы взять сжатый аудиопоток и преобразовать его в маленькие блоки аудио WAV на лету; эта часть была бы действительно трудной - все библиотеки и компоненты, которые я когда-либо видел, делают преобразование MP3 к WAV весь файл за один раз. Вероятно, Ваш единственный реалистический шанс состоит в том, чтобы сделать это использование WMA вместо MP3, потому что можно записать простые обертки C# вокруг мультимедийного SDK.
Я не попробовал его от WebRequest, но и Windows Media Player ActiveX и MediaElement (от WPF), компоненты способны к игре и буферизации потоков MP3.
я использую его для игры данных, прибывающих из поток SHOUTcast , и это работало отлично. Однако я не уверен, будет ли это работать в сценарии, Вы делаете предложение.
Я всегда использовал FMOD для подобных вещей, потому что он бесплатный для некоммерческого использования и хорошо работает.
Тем не менее, я бы хотел с удовольствием переключайтесь на что-то меньшее (FMOD ~ 300k) и с открытым исходным кодом. Супер бонусные баллы, если он полностью управляется так, чтобы я мог скомпилировать / объединить его с моим.
Я обернул библиотеку декодера MP3 и сделал ее доступной для разработчиков .NET как mpg123.net .
Включены образцы для преобразования файлов MP3 в PCM и чтения тегов ID3 .