wi.WaveFormat = new WaveFormat(8000,16,1);
wi.WaveFormat = new WaveFormat(8000,16,1);
writer = new WaveFileWriter(saveDialog.FileName, firstReader.WaveFormat);
Then this method gets triggered:{
/*
* In one loop: filling both buffers, adjusting volume, mixing and saving the output
*/
firstBuffer = new float[firstReader.WaveFormat.SampleRate * 2];
secondBuffer = new float[secondReader.WaveFormat.SampleRate * 2];
int firstBytesRead = 0;
int secondBytesRead = 0;
do
{
//reading:
firstBytesRead = firstReader.Read(firstBuffer, 0, firstBuffer.Length);
secondBytesRead = secondReader.Read(secondBuffer, 0, secondBuffer.Length);
//processing:
for (int i = 0; i < firstBuffer.Length; i++)
{
firstBuffer[i] /= 2; //volume rescaling
// if secondBufer isn't empty - adjust the volume and mix it with firstBuffer
if (secondBytesRead > 0)
{
secondBuffer[i] *= firstBuffer[i]*VOLUME_RATIO;
firstBuffer[i] += secondBuffer[i];
}
}
//writting:
writer.WriteSamples(firstBuffer, 0, firstBytesRead);
} while (firstBytesRead > 0);
MessageBox.Show("Completed succesfully", "Done!");
}
The output is created and i can play it in Winamp (but not in a different player). The problem is that I would like to use my output as an input for another processing cycle, i.e. simply loading output and chaining (adjusting volume and mixing) it with another file. Unfortunately i get FormatException while loading this output. It says:using NAudio.Wave;
static void Main()
{
using (MediaFoundationReader reader = new MediaFoundationReader("a.mp4"))
{
MediaFoundationEncoder.EncodeToMp3(reader, "a.mp3");
}
File.Delete("a.mp4");
}
The problem is that the original file "a.mp4" doesn't delete. No exceptions are thrown. It finally deletes when I close the program / stop debugging in VS using (var reader7 = new NAudio.Wave.MediaFoundationReader(wavePath))
{
using (var encoder = new NAudio.Wave.MediaFoundationEncoder(mediaType))
{
encoder.Encode(Path.GetTempPath() + "Final" + uniqueCounter + ".aac", reader7); //this line
}
}
I have checked and mediaType is a valid aac type.Приступая к работе с NAudio
Самый простой способ встроить NAudio в ваш проект - это установить последнюю версию
NuGet NAudio package. Пред-релизные версии NAudio так-же часто доступны на сайте NuGet.
Так-же, вы можете скачать последний релиз в бинарном формате из
вкладки загрузокна CodePlex.
NAudio поставляется с несколькими демо-приложениями, которые являются самым быстрым способом посмотреть как использовать различные особенности NAudio. Вы можете скачать скомпилированные демо-приложения из
вкладки загрузок, и изучать
исходный код здесь.
Обучающие курс NAudio
Если вы хотите продвигаться в программировании NAudio так быстро, как только возможно, я рекомендую вам посмотреть эти 2 курса Pluralsight. Вам нужно стать подписчиком что бы получить доступ к контенту, но там целых 10 часов обучающего материала NAudio. Вы
так-же получите доступ к их огромной обучающей библиотеке в других программных темах.
(от переводчика: эти курсы платные, но в интернете есть эти же уроки, но выложенные бесплатно)
Что бы быть успешным в разработке приложений, которые обрабатывают цифровое аудио вам нужно понять некоторые ключевые концепции (понятия, идеи). Что бы помочь разработчикам в продвижении с тем, что им следует знать перед попытками использования NAudio, я
создал курс
Основы цифрового аудио, который охватывает:
1) частоты дискретизации
2) разрядности
3) форматы файлов
4) кодеки
5) децибелы
6) обрезку
7) сглаживание
8) синтез
9) визуализации
10) эффекты
и многое другое
В частности, четвертый модуль в списке - это важная фоновая информация, если вы хотите быть эффективным в NAudio.
Аудио программирование с NAudio - это усовершенствованный курс, который содержит 7 часов обучающего материала, охватывающего все основные особенности NAudio. Настоятельно рекомендуется пройти этот курс, если вы намереваетесь создать приложение с NAudio.
Как я...?
Лучший способ научиться использовать NAudio - это скачать исходный код и посмотреть в демо-приложения - NAudioDemo и NAudioWpfDemo. Они демонстрируют несколько ключевых возможностей фреймворка NAudio. У них так-же есть преимущество в том, что они актуальные,
в то время как некоторые руководства, которые вы найдете в интернете, ссылаются на старые версии NAudio.
NAudio F.A.Q.
Что такое NAudio?
NAudio - это аудио API с открытым исходным кодом для .NET, написанное на C# Марком Хифом (Mark Heath), с со действиями многих других разрабочиков. Оно предназначено для предоставления полного набора полезных классов из которых вы можете сконструировать своё
собственное аудио приложение.
Почему NAudio?
NAudio был создан потому, что библиотека классов платформы, которая поставляется с .NET 1.0 не имеет поддержки для воспроизведения аудио. Пространство имен System.Media, представленное в .NET 2.0 предоставляло не много поддержки, и MediaElement в WPF и Silverlight
было не многим лучше. Цель NAudio предоставить комплексный набор классов связанных с аудио, позволяющих легко разрабатывать утилиты, которые воспроизводят или записывают аудио, или манипулируют аудио файлами каким-то способом.
Я могу использовать NAudio в своем проекте?
NAudio находится под лицензией Microsoft Public License (Ms-PL), которая означает, что вы можете использовать в любом проекте, включая коммерческие. Конечно, очень понравилось, если бы вы поделились бы любыми исправлениями багов или усовершенствованиями, которые
вы сделали с оригинальными файлами проекта NAudio.
Производительности .NET достаточно для аудио?
В то время как .NET не может конкурировать с неуправляемыми языками за очень низкую задержку работы аудио, он по прежнему работает лучше, чем многие люди ожидали бы. На достаточно скромных ПК, вы можете довольно просто микшировать множественные WAV файлы вместе,
включая их обработку различными эффектами и кодеками, воспроизводить безошибочно с задержкой около 50мс.
Как я могу получить помощь?
Есть 3 различных способа что бы получить помощь. Во первых, вы можете задать вопрос на
форумах обсуждения NAudioздесь, на CodePlex. Это лучший способ, когда вы написали какой-то код и хотите спросить почему он не работает так как вы ожидаете. Я стараюсь отвечать на все вопросы но, т.к. это
проект, которым я занимаюсь в свободное время, я иногда отстаю.
Вы так-же можете задать вопрос на StackOverflowи
пометить свой вопрос тегом naudio, если ваш вопрос рода "Как мне сделать что бы...". Это дает вам лучший шанс получить быстрый ответ. Пожалуйста, попробуйте сначала поискать, дан ли уже где-то ответ
на ваш вопрос.
Наконец, я могу иногда предоставлять оплаченную поддержку в ситуациях, когда вам нужен быстрый совет, исправление бага, или новые опции. Используйте опцию контакты сайта Codeplex, что бы связаться с
Mark Heathесли вы хотите воспользоваться этой возможностью.
Как мне предоставить патч?
Я приветствую вклады в NAudio и уже принял много патчей, но если вы хотите что бы ваш код был включен, пожалуйста ознакомьтесь со следующими указаниями:
wavReader = new WaveFileReader(mPath);
does wavReader now contain the PCM data for that audio file? And if so, where is it stored and how is it structured?stream32 = new Wave16ToFloatProvider(wavReader);
Apologies for the basic questions, but I haven't been having any luck finding these things out from the documentation and attempting to sort through variables in debug isn't casting any light on the situation either.