yes, that's right. You could use a Pcm16BitToSampleProvider to get to IEEE float, then use a VolumeSampleProvider to modify the volume, before finally using a SampleToWaveprovider16 to clip and go back to 16 bit
Mark
yes, that's right. You could use a Pcm16BitToSampleProvider to get to IEEE float, then use a VolumeSampleProvider to modify the volume, before finally using a SampleToWaveprovider16 to clip and go back to 16 bit
Mark
Ok, so if I try to compile with .NET Framework 3.5 I get various errors listed:
Fehler 1 "System.Windows.Controls.Canvas" enthält keine Definition für "CacheMode", und es konnte keine Erweiterungsmethode "CacheMode" gefunden werden, die ein erstes Argument vom Typ "System.Windows.Controls.Canvas" akzeptiert. (Fehlt eine Using-Direktive oder ein Assemblyverweis?) C:\Users\Freefall\Desktop\WFPSVL\WPFSVL\Source\WPFSoundVisualizationLibrary\WaveForm Timeline\WaveformTimeline.cs 714 28 WPFSoundVisualizationLib
Fehler 2 Der Typ- oder Namespacename "BitmapCache" konnte nicht gefunden werden. (Fehlt eine Using-Direktive oder ein Assemblyverweis?) C:\Users\Freefall\Desktop\WFPSVL\WPFSVL\Source\WPFSoundVisualizationLibrary\WaveForm Timeline\WaveformTimeline.cs 714 44 WPFSoundVisualizationLib
Fehler 3 Der Typ- oder Namespacename "BitmapCache" konnte nicht gefunden werden. (Fehlt eine Using-Direktive oder ein Assemblyverweis?) C:\Users\Freefall\Desktop\WFPSVL\WPFSVL\Source\WPFSoundVisualizationLibrary\WaveForm Timeline\WaveformTimeline.cs 920 13 WPFSoundVisualizationLib
Fehler 4 Der Typ- oder Namespacename "BitmapCache" konnte nicht gefunden werden. (Fehlt eine Using-Direktive oder ein Assemblyverweis?) C:\Users\Freefall\Desktop\WFPSVL\WPFSVL\Source\WPFSoundVisualizationLibrary\WaveForm Timeline\WaveformTimeline.cs 920 42 WPFSoundVisualizationLib
Fehler 5 "System.Windows.Controls.Canvas" enthält keine Definition für "CacheMode", und es konnte keine Erweiterungsmethode "CacheMode" gefunden werden, die ein erstes Argument vom Typ "System.Windows.Controls.Canvas" akzeptiert. (Fehlt eine Using-Direktive oder ein Assemblyverweis?) C:\Users\Freefall\Desktop\WFPSVL\WPFSVL\Source\WPFSoundVisualizationLibrary\WaveForm Timeline\WaveformTimeline.cs 920 69 WPFSoundVisualizationLib
It seems that "CacheMode" is not a member of "System.Windows.Controls.Canvas". I don´t need to reference that taglib-sharp.dll, right? Any suggestions?
it's a new property in .NET 4 to help optimise drawing. Just delete any lines of code that set it.
Ok good. All errors resolved an I compiled with .Net Framework 3.5. SO far so good. But the example project still shows "some" error messages:
Fehler 1 Der Name "InitializeComponent" ist im aktuellen Kontext nicht vorhanden. C:\Users\Freefall\Desktop\Source\Sample_NAudio\MainWindow.xaml.cs 19 13 Sample_NAudio
Fehler 2 Der Name "StopButton" ist im aktuellen Kontext nicht vorhanden. C:\Users\Freefall\Desktop\Source\Sample_NAudio\MainWindow.xaml.cs 24 51 Sample_NAudio
Fehler 3 Der Name "PlayButton" ist im aktuellen Kontext nicht vorhanden. C:\Users\Freefall\Desktop\Source\Sample_NAudio\MainWindow.xaml.cs 25 51 Sample_NAudio
Fehler 4 Der Name "PauseButton" ist im aktuellen Kontext nicht vorhanden. C:\Users\Freefall\Desktop\Source\Sample_NAudio\MainWindow.xaml.cs 26 52 Sample_NAudio
Fehler 5 Der Name "repeatStartTimeEdit" ist im aktuellen Kontext nicht vorhanden. C:\Users\Freefall\Desktop\Source\Sample_NAudio\MainWindow.xaml.cs 27 58 Sample_NAudio
Fehler 6 Der Name "repeatStopTimeEdit" ist im aktuellen Kontext nicht vorhanden. C:\Users\Freefall\Desktop\Source\Sample_NAudio\MainWindow.xaml.cs 28 56 Sample_NAudio
Fehler 7 Der Name "spectrumAnalyzer" ist im aktuellen Kontext nicht vorhanden. C:\Users\Freefall\Desktop\Source\Sample_NAudio\MainWindow.xaml.cs 30 13 Sample_NAudio
Fehler 8 Der Name "waveformTimeline" ist im aktuellen Kontext nicht vorhanden. C:\Users\Freefall\Desktop\Source\Sample_NAudio\MainWindow.xaml.cs 31 13 Sample_NAudio
Fehler 9 Der Name "albumArtPanel" ist im aktuellen Kontext nicht vorhanden. C:\Users\Freefall\Desktop\Source\Sample_NAudio\MainWindow.xaml.cs 57 37 Sample_NAudio
Fehler 10 Der Name "albumArtPanel" ist im aktuellen Kontext nicht vorhanden. C:\Users\Freefall\Desktop\Source\Sample_NAudio\MainWindow.xaml.cs 61 37 Sample_NAudio
Fehler 11 Der Name "albumArtPanel" ist im aktuellen Kontext nicht vorhanden. C:\Users\Freefall\Desktop\Source\Sample_NAudio\MainWindow.xaml.cs 70 29 Sample_NAudio
Fehler 12 Der Name "albumArtPanel" ist im aktuellen Kontext nicht vorhanden. C:\Users\Freefall\Desktop\Source\Sample_NAudio\MainWindow.xaml.cs 75 25 Sample_NAudio
Fehler 13 Der Name "clockDisplay" ist im aktuellen Kontext nicht vorhanden. C:\Users\Freefall\Desktop\Source\Sample_NAudio\MainWindow.xaml.cs 79 21 Sample_NAudio
Fehler 14 Der Name "DefaultThemeMenuItem" ist im aktuellen Kontext nicht vorhanden. C:\Users\Freefall\Desktop\Source\Sample_NAudio\MainWindow.xaml.cs 114 13 Sample_NAudio
Fehler 15 Der Name "DefaultThemeMenuItem" ist im aktuellen Kontext nicht vorhanden. C:\Users\Freefall\Desktop\Source\Sample_NAudio\MainWindow.xaml.cs 115 13 Sample_NAudio
Fehler 16 Der Name "ExpressionDarkMenuItem" ist im aktuellen Kontext nicht vorhanden. C:\Users\Freefall\Desktop\Source\Sample_NAudio\MainWindow.xaml.cs 116 13 Sample_NAudio
Fehler 17 Der Name "ExpressionDarkMenuItem" ist im aktuellen Kontext nicht vorhanden. C:\Users\Freefall\Desktop\Source\Sample_NAudio\MainWindow.xaml.cs 117 13 Sample_NAudio
Fehler 18 Der Name "ExpressionLightMenuItem" ist im aktuellen Kontext nicht vorhanden. C:\Users\Freefall\Desktop\Source\Sample_NAudio\MainWindow.xaml.cs 118 13 Sample_NAudio
Fehler 19 Der Name "ExpressionLightMenuItem" ist im aktuellen Kontext nicht vorhanden. C:\Users\Freefall\Desktop\Source\Sample_NAudio\MainWindow.xaml.cs 119 13 Sample_NAudio
Fehler 20 Der Name "DefaultThemeMenuItem" ist im aktuellen Kontext nicht vorhanden. C:\Users\Freefall\Desktop\Source\Sample_NAudio\MainWindow.xaml.cs 126 13 Sample_NAudio
Fehler 21 Der Name "DefaultThemeMenuItem" ist im aktuellen Kontext nicht vorhanden. C:\Users\Freefall\Desktop\Source\Sample_NAudio\MainWindow.xaml.cs 127 13 Sample_NAudio
Fehler 22 Der Name "ExpressionDarkMenuItem" ist im aktuellen Kontext nicht vorhanden. C:\Users\Freefall\Desktop\Source\Sample_NAudio\MainWindow.xaml.cs 128 13 Sample_NAudio
Fehler 23 Der Name "ExpressionDarkMenuItem" ist im aktuellen Kontext nicht vorhanden. C:\Users\Freefall\Desktop\Source\Sample_NAudio\MainWindow.xaml.cs 129 13 Sample_NAudio
Fehler 24 Der Name "ExpressionLightMenuItem" ist im aktuellen Kontext nicht vorhanden. C:\Users\Freefall\Desktop\Source\Sample_NAudio\MainWindow.xaml.cs 130 13 Sample_NAudio
Fehler 25 Der Name "ExpressionLightMenuItem" ist im aktuellen Kontext nicht vorhanden. C:\Users\Freefall\Desktop\Source\Sample_NAudio\MainWindow.xaml.cs 131 13 Sample_NAudio
Fehler 26 Der Name "DefaultThemeMenuItem" ist im aktuellen Kontext nicht vorhanden. C:\Users\Freefall\Desktop\Source\Sample_NAudio\MainWindow.xaml.cs 140 13 Sample_NAudio
Fehler 27 Der Name "DefaultThemeMenuItem" ist im aktuellen Kontext nicht vorhanden. C:\Users\Freefall\Desktop\Source\Sample_NAudio\MainWindow.xaml.cs 141 13 Sample_NAudio
Fehler 28 Der Name "ExpressionDarkMenuItem" ist im aktuellen Kontext nicht vorhanden. C:\Users\Freefall\Desktop\Source\Sample_NAudio\MainWindow.xaml.cs 142 13 Sample_NAudio
Fehler 29 Der Name "ExpressionDarkMenuItem" ist im aktuellen Kontext nicht vorhanden. C:\Users\Freefall\Desktop\Source\Sample_NAudio\MainWindow.xaml.cs 143 13 Sample_NAudio
Fehler 30 Der Name "ExpressionLightMenuItem" ist im aktuellen Kontext nicht vorhanden. C:\Users\Freefall\Desktop\Source\Sample_NAudio\MainWindow.xaml.cs 144 13 Sample_NAudio
Fehler 31 Der Name "ExpressionLightMenuItem" ist im aktuellen Kontext nicht vorhanden. C:\Users\Freefall\Desktop\Source\Sample_NAudio\MainWindow.xaml.cs 145 13 Sample_NAudio
Fehler 32 Der Name "DefaultThemeMenuItem" ist im aktuellen Kontext nicht vorhanden. C:\Users\Freefall\Desktop\Source\Sample_NAudio\MainWindow.xaml.cs 154 13 Sample_NAudio
Fehler 33 Der Name "DefaultThemeMenuItem" ist im aktuellen Kontext nicht vorhanden. C:\Users\Freefall\Desktop\Source\Sample_NAudio\MainWindow.xaml.cs 155 13 Sample_NAudio
Fehler 34 Der Name "ExpressionDarkMenuItem" ist im aktuellen Kontext nicht vorhanden. C:\Users\Freefall\Desktop\Source\Sample_NAudio\MainWindow.xaml.cs 156 13 Sample_NAudio
Fehler 35 Der Name "ExpressionDarkMenuItem" ist im aktuellen Kontext nicht vorhanden. C:\Users\Freefall\Desktop\Source\Sample_NAudio\MainWindow.xaml.cs 157 13 Sample_NAudio
Fehler 36 Der Name "ExpressionLightMenuItem" ist im aktuellen Kontext nicht vorhanden. C:\Users\Freefall\Desktop\Source\Sample_NAudio\MainWindow.xaml.cs 158 13 Sample_NAudio
Fehler 37 Der Name "ExpressionLightMenuItem" ist im aktuellen Kontext nicht vorhanden. C:\Users\Freefall\Desktop\Source\Sample_NAudio\MainWindow.xaml.cs 159 13 Sample_NAudio
Fehler 38 Der Name "FileText" ist im aktuellen Kontext nicht vorhanden. C:\Users\Freefall\Desktop\Source\Sample_NAudio\MainWindow.xaml.cs 188 17 Sample_NAudio
And I recognized that there are no userforms and toolbox elements existing in the example. I think the example was not completely provided ....
Or are the xaml files the winforms? I´m confused :S I´m a VB programmer...
Thanks for your valuable reply,
Yes sir,
i checked code and i found that WaveIn internally using waveInGetNumDevs function to retrieve audio device count.
but sir do we have any other way to get proper count and device list even if audio service stopped or running ?
Thanks.
generally Why system throws access violation error ?
Hi All,
I'm trying to get the GUID for the system audio devices. The best NAudio API I could find is...
MMDeviceEnumerator DevEnum = new MMDeviceEnumerator();
MMDeviceCollection devEnum = DevEnum.EnumerateAudioEndPoints(DataFlow.All, DeviceState.Active);
foreach (var item in devEnum)
{
string devId = item.ID;
}
So devId is in this format
{0.0.1.00000000}.{6864ba9c-b9a7-45cd-80d8-ee334575590c}
ie. Two bracketed strings separated by a dot {4-tuple-number}.{GUID}
Questions,
1) Can I depend on the format always being returned in this format so I can reliably parse it? On all OS versions (XP/vista/7/8)?
2) What is the meaning for the 4 digits in the 4-tuple number?
Note: I am a newbie to NAudio. Hats off to the developers!! You guys are Awesome!!
Is there an API guide for NAudio?
hi, this part of NAudio is really a fairly thin wrapper around the Windows Core Audio APIs, so the documentation you really want is MSDN. The ID property returns the value of the IMMDevice.GetId method which returns an Endpoint ID string.
Thanks Mark. I appreciate the reply.
I looked at those MSDN API pages (pretty gorpy explanations) but thanks for the link.
What I need to do is to determine which audio devices are "Speakers". Because the MMDeviceCollection includes both speakers and microphones. The device FriendlyName prefixes with the word "Speakers" but I assume that is dependent on the uses language -- it might say "Altavoz" in Spain instead of "Speakers".
I wonder if the 4-Tuple indicate speakers? In my computer devices, speakers have this tuple {0.0.0.00000000} and Microphones and the Mixer have {0.0.1.00000000}
I couldn't find any description of that 4-Tuple in the MSDN documentation.
MMDeviceCollection for my computer
Name=Speakers (Realtek High Definition Audio) DevId={0.0.0.00000000}.{73d4795c-5a20-4a6d-80ef-6b86e31ea1f1};
Name=Speakers (2- C-Media USB Audio Device ) DevId={0.0.0.00000000}.{e2e6b090-3cc4-49d2-a2fb-a5d345c68f1e};
Name=Microphone (2- C-Media USB Audio Device ) DevId={0.0.1.00000000}.{0fcb87d4-1a64-4afa-ace9-9444e61b3baf};
Name=Microphone (Realtek High Definition Audio) DevId={0.0.1.00000000}.{43b789c5-e9e7-4912-8a23-79e28f66966e};
Name=Stereo Mix (Realtek High Definition Audio) DevId={0.0.1.00000000}.{6864ba9c-b9a7-45cd-80d8-ee334575590c};
Hi
I tested the BufferedWaveProvider and worked like a charm, but I facing a strange issue: now I hear the stream in 2 different output devices (speakers and headphones (headphones is my default playback device).
Any recommendation to really switch the monitoring device rather than just duplicate it?
Regards
JLuis
I'm having a bit of a problem distinguishing device names due to the string truncation. I need to support XP users so I'm limited to WaveOut.GetCapabilities.
This might be a possible fix to the problem for the NAudio source.
It appears that the device name length is determined in the WaveOutCapabilities.cs file.
located in the source at ...\NAudio\Wave\MmeInterop\WaveOutCapabilities.cs
line 48 private const int MaxProductNameLength = 32;
I wonder if changing that value (say triple it = 96) will eliminate most of the device name truncation issues?
Then testing this simple code to see if the returned device names are longer.
for (int deviceId = 0; deviceId < deviceCount; deviceId++)
{
var capabilities = WaveOut.GetCapabilities(deviceId);
string name = capabilities.ProductName;
}
Sorry that I can't test this myself or I would. The NAudio solution source code won't build for me with VS2010-- lots of missing namespaces.
unfortunately, this is a limitation of the WaveOut APIs themselves. 32 is the value of MAXPNAMELEN as used by WAVEOUTCAPS. Changing this value in NAudio will not get you a longer product name. There is only one workaround I know of and it involves using DirectSound. I'd imagine there might be a way of searching in the registry too.
Ok, Thanks Mark.
The Ghost of Bill Gates strikes again. Who knew a device name would ever exceed a massive 32 bytes of memory? ;-)
I'll make do with a 32 character name. I'm trying to get away from DirectSound.
Hi,
my today's questions is how to detect digital silence (without noise, pure digital silence) in a (large) wave file and split it into pieces.
As an example (--- means digital silence):
Input wave: ----ABCDEFG------HIJKLMN----OPQR---
Output wave files:
1: ABCDEFG
2: HIJKLMN
3: OPQR
Thank you very much for your great work!
Thank you for answer. But I can't understand about to modify EffectStream to simply require an IWaveProvider. Please show me how to modify this. Thank you very much.
I'm following the AudioPlaybackPanel.cs code and convert it to VB 2010 but just can't make the Spectrum to work. I mean, the PreVolumeMeter never fires
I can play, pause, stop, move the position with a slider, read the position.. just can't make the Spectrum to work
Ths is the code I use:
Dim waveOutDevice As IWavePlayer
Dim mp3Reader As Mp3FileReader
Dim inputStream As WaveChannel32
Dim WithEvents waveChannel As SampleChannel
Dim archivo As String
' ----------
waveOutDevice = New WaveOut()
mp3Reader = New Mp3FileReader(archivo)
inputStream = New WaveChannel32(mp3Reader)
waveChannel = New SampleChannel(mp3Reader, True)
waveOutDevice.Init(inputStream)
waveOutDevice.Play()
' the event
Private Sub waveChannel_PreVolumeMeter(ByVal sender As Object, ByVal e As NAudio.Wave.SampleProviders.StreamVolumeEventArgs) Handles waveChannel.PreVolumeMeter
WaveformPainter1.AddMax(e.MaxSampleValues(0))
WaveformPainter2.AddMax(e.MaxSampleValues(1))
End Sub
Windows comes with an MP3 decoder, which you are licensed to use already.
Mark
you can look at the WaveFileFormat's AverageBytesPerSecond value, and use that to calculate the offsets needed. That's what I do in the blog post. Your xPos1 does not take this into account at all.
Mark
you are not using the SampleChannel at all. You are playing from the WaveChannel32. You need to pick one or the other.