I want to develop an Audio Monitoring Software, for example to know how many ads of certain company where published on x radio station ?
There is any way to analyse "realtime" the audio stream and detect when any version of an ad is played on the radio?
Or the best way is to analyse every x seconds the audio fragment, if this is the way to go, what can I do to know if only a segment of an audio has the sample audio (for example analyse 20 minutes of radio and return true if the spot (ad) where player in that audio sample)
(Sorry for my English, I hope is understandable)
I guess realtime could be difficult due to the fact that you have to analyze your radiostream. For that you need to cache, analyze / fingerprint and run against an existing database.
But take a look on these questions:
https://stackoverflow.com/questions/2462410/acoustic-fingerprint-opensource
Musicbrainz fingerprinting
More Links:
http://acoustid.org
https://musicbrainz.org/doc/Fingerprinting
http://echoprint.me // service by spotify / echonest
https://www.audiblemagic.com/broadcast-infrastructure
Good luck.
An excellent open-source audio fingerprinting library in Python can be found here:
http://github.com/worldveil/dejavu
It allows you to fingerprint an audio file once, store the fingerprints in a database, and do continual recognition and adding fingerprints as time goes on.
You can even fingerprint small sections of song to save disk storage if you are just doing on-disk deduplication.
Related
I'm trying to figure out how to grab the individual audio streams as they appear in the audio mixer to reroute them to an aggregate audio device. I'm specifically looking to keep them as discreet streams for the purposes of the program I'm making (If they're muxed down to a 2-channel mix, that defeats the purposes of what I'm trying to achieve.)
E.X.: (As I've just made this account, I apparently am not able to post images, so here's a link to the image)
windows audio mixer
In this, I'm hoping to grab "System Sounds" and "Stream Client Bootstrapper" as discreet audio streams to route elsewhere, while maintaining their original destination as well (essentially copying the audio going to the original audio device to another simultaneously).
I'm looking to do this in either C# or C++. I've perused the audio APIs that microsoft has published, and while some things look to be close to what I'm trying to do, nothing has hit the nail on the head. I appreciate any help. Thanks.
The sessions can be enumerated using IAudioSessionManager2::GetSessionEnumerator and friends (sample C++ code is here and there). Standard Windows volume mixer application is using this API as well.
The API however has no access to data streams, you won't have either (you certainly don't have data whether they are downmixed or not). Neither you can reroute streams to another device. Applications are not allowed to interfere that deep. The best you can do is to create your own device, interactively select it as default output device and then accept data from applications playing audio through this device.
I want to programmatically be able to connect to my computer's audio output (the exact same thing I'd hear if I plugged my headphones into the side of my laptop) and collect the audio.
So far, I haven't really been able to find anything that does this, other than Core Audio APIs, and even then it seems better built for simply locating sound files and encoding/unencoding then.
I've also taken a look at NAudio, however this seems better suited, again, for sound files. The one bit of streaming it is able to do, is only uses a URL as the source.
Can anyone point me to a library or interface within the .Net framework that will allow me to simply connect to my computer's audio out function and collect a stream of data?
In NAudio, you can capture the audio being played on your system with WasapiLoopbackCapture.
Based on this naudio tutorial, I'm aware that naudio has the ability to record audio output in Windows. The article also mentions that you can set naudio to only record audio mixed by naudio.
It seems to me as though the tools to accomplish application-specific recording are in there, but I can't put the pieces together. Thoughts?
As far as I am aware, it is not possible with WASAPI to record sound from a single application of your choosing. Windows 8 does give you the ability to enumerate through the streams and set their volumes, but I don't think you can capture them. At present NAudio's WasapiLoopbackCapture class can only be used to capture the combined output from all applications.
To record the audio you output yourself, have a look at the SavingWaveProvider example I discuss here on my blog.
I am looking to create an application that will allow me to record from my mic and playback the recording through other pc's. At this point however I would just like it to play back on my own computer so I can get it working.
I have been looking at NAudio for the past few hours and it seems like it may be able to help me achieve this goal.
I am just wondering if anyone else has had any experience with this and if it is at all possible?
Thanks,
Stuart
There is an example project on codeproject doing this:
http://www.codeproject.com/KB/cs/Streaming_wave_audio.aspx
I don't know how low the latency is.
As a codec I'd recommend Speex(at least for speech). It's free, open source and offers low latency and low bandwidth.
Bass Audio Library is another solid option worth looking into.
It is possible to do, but you are unlikely to get low latency with WaveIn/WaveOut (possibly better results with WASAPI). You could use the BufferedWaveProvider (in the latest source code) to store up the audio being recorded from the microphone and supplying the output to soundcard.
NAudio is great as a starting point for audio capture and playback but as Mark pointed out the latency might be an issue.
If you take the next step and want to sent the audio data across the network you will need a codec to compress the data as PCM or WAV are uncompressed and for voice you only need a small part of the bandwidth needed for WAV.
As you are working with C# there is a C# port of Speex available, called NSpeex, which might be worth having a look at..
I have tonss of videos in database and they can't be accessed directly but I can play them one by one and can record them. Now I want to write a program (probably in C#) that will get a URL and will start Internet Explorer or any other default browser to start the link. Once the link will be started, video will be playing.
Now my job is to record the video for "x" seconds along with audio. I can record the video by taking screenshots very frequently but what about audio and it's quality? Do I need to put microphone in a sound proof room attached with speaker so that I record it or I can directly pull the audio off from audio interface card before letting it toward the speakers?
Any ideas?
Umair
This is not wise at all. You will have a huge quality loss recording video from screen and re-encoding it, not to mention the time this will take.
You should find a way to access those videos directly from the database, and run them through a converter like ffmpeg.
What about using rtmpdump to retrieve the video stream as a .flv? Of course, you will need to parse the stream information from the respective web pages, but that should be manageable.