Quantcast
Channel: NAudio
Viewing all 5831 articles
Browse latest View live

New Post: Distortion in sound writing to serial port

$
0
0
wave format is
wi.WaveFormat = new WaveFormat(8000,16,1);

New Post: Distortion in sound writing to serial port

$
0
0
and what input format is your modem expecting? Have you tried creating a WAV file at that WaveFormat and just sending that?

New Post: Producing poor quality sound

$
0
0
Yes , By changing it to muLaw i can hear voice clearly but there is a background click voice after every second. What changes should be done to overcome this problem.

New Post: Distortion in sound writing to serial port

$
0
0
input waveformat expected is 8k,16 bit, mono expected by modem and perhaps same by GSM Network.
Mu law wave format giving clear voice but with a click sound after every second.

New Post: Processing and creating proper .wav file

$
0
0
Hi,

I have a problem concerning processing two files, mixing them together and saving the output in readable wave format. The Processing is just adjusting volume of the second file accordingly to the volume of the first one (i.e. envelope controlling). I load both of them to the AudioFileReader. I pick where to save 'writer' (which is a WaveFileWriter) using SaveFileDialog and i adjust its WaveFormat accordingly to what WaveFormat first input file has:
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:

An unhandled exception of type 'System.FormatException' occurred in NAudio.dll
Additional information: Invalid WAV file - No fmt chunk found

Why it's invalid .wav file if i used WaveFormat from existing, proper .wav file? How can i provide this fmt chunk to my output?

Thanks in advance for any help

EDIT: I didn't dispose after writing. Sorry for the mess, stupid mistake and i don't know how to delete this post...

New Post: Reading and splitting audio (center, souround, base parts) in a mp4

$
0
0
Is there existing functionality or future plans to implement functionality to split the audio in a mp4 file into center, souround and base parts/sounds?

I would like to split the audio and to distribute the parts to each 5.1 (read X.X) devices/speakers home made speakers (home made sonos/heos)?

New Post: How to concatenate two Wave files in memory to play

$
0
0
Thank you very much for your help markheath. I have concatenate more than one file in memory using a new provider. :)

Created Unassigned: issue with Mp3FileReader [16459]

$
0
0
Hi Mark
Thnaks for your greate n audio
i use naudio 1.7 and have problem with Mp3FileReader.
when i use Mp3FileReader and give it path sometimes my program stops on this line and everiting stop
and suddenly it continue.

if (File.Exists(@"mp3 path"))
{
try
{
mp3Reader = new Mp3FileReader(@"mp3 path");
waveOut = new WaveOut();
waveOut.PlaybackStopped += new EventHandler<StoppedEventArgs>(PlaybackStoppedEventHandler);

waveOut.Init(mp3Reader);
waveOut.Play();
}
}

my program must not stops like this.could you please tell where i missed or is wrong?

Regard Mohammad Ehsan Afsari

New Post: Windows Store Validation Issue

$
0
0
Thanks so much!
Will check it out!

Created Unassigned: Set channel [16460]

$
0
0
Hello, I'm read mp3 file by such procedure:
```
NAudio.Wave.Mp3FileReader reader = new NAudio.Wave.Mp3FileReader(chooseMp3file.FileName, wf => new NAudio.FileFormats.Mp3.DmoMp3FrameDecompressor(wf));
Stream wavestream = new NAudio.Wave.Mp3FileReader(chooseMp3file.FileName);
bytesRead1 = wavestream.Read(Buffer, 0, intLenght);
```
but file have two channels. How do i can set certain channel (first or second) for read operation?

New Post: Mp3FileReader does not support sample rate changes.

$
0
0
I also encountered this problem with the latest NAudio library when running Mp3FileReader against a bunch of "sliced and diced" MP3 files. These files have partial MP3 frames at the beginning of the file which seems to be where Mp3FileReader gets into trouble.

I was able to write a "MP3 Frame Walker" method that only picks up valid MP3 frames (C# source code is avail if you want it). The strategy that I used was to do a byte-by-byte search for a valid MP3 frame header (same as Mp3FileReader) but before declaring the frame header valid, attempt to decode the next N frame headers. As a bonus, this technique removes the need to pay any attention whatsoever to the ID3V1 or ID3V2 tags.

I wrote the code to allow for a variable probe depth but a probe depth of 1 parsed all my "problem files" correctly.

New Post: Memory leak after converting mp4 to mp3 in

$
0
0
I am using NAudio to convert an mp4 file to mp3 by using the Encoder. And then I am deleting the original mp4 file.

This is my code:
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

Any ideas what is going on?

New Post: Problem using NAudio with Tascam US-600

$
0
0
Using UAudio 1.6 for recording audio from device Tascam US-600, for recording using ASIO driver

I have Windows Service for recording

Sometimes WindowsService can not receive audio data from device helps only restart service
Appears as follows:
Start Windows Service
sometimes 30 minutes, sometimes 4 hour all work fine
and after windows service can not receive audio data from device
after restart again correct work
hardly ever helps reinitialization without restart windows service

In system log events no error, in log window service (my app) also no exception

using last driver Tascam US-600

New Post: Unable to create sink writer

$
0
0
On my second computer I am getting the error unable to create sink writer but not on my first any ideas what could be the cause?
  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.

New Post: Can i use NAudio for Audio Mixing Purpose

$
0
0
I want to create an desktop application using C#.
In this application i want to make an audio player which can play mp3, wav formats and at end i want to mix both files in single file as output.

Is this possible using NAudio dll?

thank you for any help.

Updated Wiki: Russian Documentation

$
0
0

Приступая к работе с 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 и уже принял много патчей, но если вы хотите что бы ваш код был включен, пожалуйста ознакомьтесь со следующими указаниями:

  • Ваш материал должен быть вашей собственной работой, и могла быть выпущена под лицензией MS-PL.
  • Вы должны убедиться, что ваш код соответствует планировке и именованию соглашений, используемых везде в NAudio.
  • Помните, что существует множество пользователей NAudio. Патч, который изменяет внешний интерфейс вряд ли будет принят.
  • Старайтесь писать чистый код - избегайте длинный функций и длинных классов. Пытайтесь добавить новую возможность, создавая новый класс, вместо того что бы класть нагрузки дополнительного кода в существующий.
  • Я обычно не принимаю дополнения, которые не могу протестировать. Поэтому пожайлуста, пишите юнит-тесты (используя NUint) если это возможно. Если нет, дайте ясное объяснение как ваша опция может быть юнит протестированна  и предоставьте тестовые данные если понадобится. Скажите мне, что вы сделали что бы самостоятельно протестировать это, включая и то, какие операционные системы и звуковые карты вы использовали.
  • Если вы добавляете новую возможность, пожалуйста почему бы вам не написать короткое руководство как использовать её.
  • Если ваш патч - это маленькое исправление бага, я просмотрю код и дам вам ответ. Вы должны быть готовы сделать рекомендованные изменения прежде, чем они смогут быть встроены в основной код.
  • Самый простой способ предоставить патч - это создать ваш собственный форк (ответвление) на Mercurial и решить тянущий запрос. Посмотрите это видеоесли вы новичек в Mercurial.
  • Пожалуйста, так-же имейте ввиду, что когда вы добавляете опцию в NAudio, эта опцию создаст в будущем запрос на поддержку и отчеты о багах. Готовы ли вы торчать на форумах и помогать людям использовать её?

New Post: Novice Questions Related To Using NAudio for Onset Detection

$
0
0
Hello,

I'm looking to use NAudio for Onset Detection and am currently trying to draw from a number of different sources (http://www.badlogicgames.com/wordpress/?cat=18&paged=3 , http://channel9.msdn.com/coding4fun/articles/AutotuneNET) but my overall lack of understanding of how NAudio works is leaving me at a bit of a loss.

My basic goals at the moment are to;
  • Successfully load a .wav. file and be able to access the PCM data of that file.
  • Check if that .wav file is in stereo, and if so, average the two channels into one.
  • Check/Know if the data is in 16bit signed integer and convert it to float
However, I can't really be sure whether I'm on the track with these because of the following issues.

First off, if I load a .wav audio file using a WaveFileReader
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?

Secondly, if I assume that wavReader contains the data 16bit signed integers, will the following code convert that data into floats?
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.

Just for reference, I am attempting to use NAudio in a Unity project, with the 'NAudio' and 'NAudio.WindowsMediaFormat' dll's situated in the 'Plugins' folder of my project.

Any help would be greatly appreciated!

New Post: Access Violation Exception - 0xc0000005

$
0
0
Hi Mark,

I have a problem that happens very rarely. Sometimes my application will crash after a play command. I am not able to catch the exception i my application domain. My windows logs will tell me Event Name: BEX with error code c0000005. I am using NAudio 1.7 and the directsoundout class.

Windows logs were able to report the following error prior to my c0000005 error:

Exception Info: System.AccessViolationException
Stack:
at NAudio.Wave.DirectSoundOut+IDirectSoundBuffer.Stop()
at NAudio.Wave.DirectSoundOut.StopPlayback()
at NAudio.Wave.DirectSoundOut.PlaybackThreadFunc()
at System.Threading.ThreadHelper.ThreadStart_Context(System.Object)
at System.Threading.ExecutionContext.RunInternal(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean)
at System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean)
at System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object)
at System.Threading.ThreadHelper.ThreadStart()

Any ideas what can cause this AccessViolationException?

Created Unassigned: Wrong DirectSound device GUID [16461]

$
0
0
There are wrong DirectSoundDeviceInfo.Guid and DirectSoundDeviceInfo.ModuleName in NAudio implementation.

List of devices using NAudio (with incorrect Guids)
(_Install-Package NAudio_)
```
foreach (var d in DirectSoundOut.Devices)
{
Console.WriteLine("{0} {1} {2}", d.Description, d.Guid, d.ModuleName);
}
```

List of devices using SlimDX (with correct Guids, I've checked that the same in a Windows registry HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\MMDevices\Audio\Capture)
(_Install-Package SlimDX_)
```
foreach(DeviceInformation d in DirectSoundCapture.GetDevices())
{
Console.WriteLine("{0} {1} {2}", d.Description, d.ModuleName, d.DriverGuid);
}
```

Edited Unassigned: Wrong DirectSound device GUID [16461]

$
0
0
There are wrong DirectSoundDeviceInfo.Guid and DirectSoundDeviceInfo.ModuleName in NAudio implementation.

List of devices using NAudio (with incorrect Guids)
(_Install-Package NAudio_)
```
foreach (var d in DirectSoundOut.Devices)
{
Console.WriteLine("{0} {1} {2}", d.Description, d.Guid, d.ModuleName);
}
```

List of devices using SlimDX (with correct Guids, I've checked that the same are in a Windows registry __HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\MMDevices\Audio\Capture__)
(_Install-Package SlimDX_)
```
foreach(DeviceInformation d in DirectSoundCapture.GetDevices())
{
Console.WriteLine("{0} {1} {2}", d.Description, d.ModuleName, d.DriverGuid);
}
```

Viewing all 5831 articles
Browse latest View live


<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>