Get source of audio recording - c#

I am looking for some help. I have a winform app which has to record a audio and save the recording locally on the disk.
I am sorry I don't know the terminologies used, but does windows form or perhaps c# allow to record audio file from different sources? Like is there a way to find out from where the audio is being recorded. Either it is from a microphone or can user record it without using microphone too (from speakers)? And what is recording from soundcard? It is same as recording without using microphone?
What are the ways a audio can be recorded? I know it can be from microphone but can we record from a speaker?

There is a project on CodeProject CLICK which contains an example of sound recorder control with source selection.

Related

c#/.NET - Recording the current audio being played

Is there any way in c#/.net of recording the current audio being played? I've searched a lot on the internet but the only result I could find is recording using a microphone.
I dont want to record using microphone input, I want to record what is being played on the computer when I click a record button.
Thanks
You have two options here:
Hardware loopback device - virtual "Stereo Mix" audio device, which acts as a regular audio capture device and in the same time produces a copy of mixed audio feed played through default audio output device of the system. Since such device shows up as real audio input device, you can use standard APIs, libraries and even exitsing applications to record from such device.
Programmatic access to a virtual loopback device as if it was microphone-like device. API on the background will duplicate played audio content and make it available for reading back as it plays. The good news is that you can access the mixed audio feed for device of your interest.
Both options are described in detail in Loopback Recording article on MSDN and available via standard audio APIs, specifically WASAPI.
For C# development you are likely to use a wrapper like NAudio.
For option 1 you will find quite a few questions on StackOverflow, and for the other option the keyword is AUDCLNT_STREAMFLAGS_LOOPBACK.
The only way to be able to receive data from another application is if the developer provides an access point, normally through some SDK, API, or other means. Without this, there is no way for your application code to receive the bytes from the other application.
The reason a microphone works is because it is receiving the sound output bytes from the application and sending those soundwave bytes back into your PC to render and output the sound. Since you have access to these bytes from the microphone you are able to capture the sound.
See if there is an API or an SDK from the developer of the application you are trying to get sound from.

C# How to keep the DirectShow filter graph running on video window resize, minimize, device lost, reset?

Our app is using C#/WinForms/VMR9/DirectShowLib-2005 to either play back a local video file or to receive (and render) the live video stream via udp using a third party DirectShow filter. The video stream uses H.265 coding and sends 1080p files.
I also have that DirectShow filter recording the live video feed to a local file for me.
When I resize the form during video playback or live video feed playback, I'm getting a device lost and need to reset it. I'm freeing all the resources, but device reset still fails unless I also destroy the graph as well. But it's used to receive my live video feed and record it.
So, problem is I would like to keep the video feed recorded without interruption by resize, move to another monitor, device lost or reset. What are my options to achieve this? We can consider converting the code to WPF/WF, purchasing a commercially available or using a free plugin to do the job, etc. Need an advice here.
Second question on the same subject, if I may. While live feed is recorded to a local file and we're playing back that live feed in the video window, we also display a time line (slider control), representing the time from the beginning of the live video feed till a present moment (which moves forward while the live feed is active). I need to give user the ability to select any previous moment in time and immediately play that part of the recorded video back, while live feed is still recorded to the same file. After reviewing a part of the recorded video, I need to know how to let user to continue watching the live feed.
I am not sure which technology we should be using to achieve that as well. I would appreciate any help.
Thank you very much.
Recording filter graphs are sensitive to unexpected state transitions and it is the assumption that recording takes place "at once" without pausing and continuations, including such as caused by necessity to reset video hardware or change format.
The typical method is to separate recording from other activity into separate graph. A dedicated recording graph would receive data produced outside and record it into file (or stream to network). Playback and presentation activity running in another graph can be flexibly reset or reconfigured as needed.
See also:
Directshow Preview Only and Capture & Preview with a single Graph

How can I record the application output audio as input using Unity Microphone

Hi I'm making a game about recording in-game audio, but all I can do is recording with internal microphone, the default input audio device. I try to see the list of devices in Unity with Microphone.devices, but depend of my Windows configurated devices, I need a solution to work in any computer. Maybe something related to FMOD custom DSP, faking a audio card or some solution in Unity API, I need a north. How I'm using the code:
myAudioClip = Microphone.Start ( null, false, 10, 44100 );
To save a audio file I'm using that script: https://gist.github.com/darktable/2317063
And that line:
SavWav.Save("myfile", myAudioClip);
My question is: How to record my application output audio as a input data too in Unity.
You can't do that in Unity. The furthest you can go is record individual AudioClips.
To record system output use NAudio. It's a .NET library, hope it will work on Mono.
Good luck

Is it possible to view the audio waveform of mp4

I have been searching all over for a way to display the audio intensity of an mp4 file. I have found many guides on how to do it with wav files and even audio being actively recorded, but I can't find anything about mp4s.
I have a C# windows form that plays a video and allows you to caption it. What I am trying to do next is add a visual representation of the audio intensity so the user can see where the next chunk of speech is. To play the video I am using Windows Media Player
You can refer to this other stackoverflow question:
Howplay mp4 songs using NAudio
Instead of playing the file you can show the current level with some widget. Just pay attention to the fact that you should probably display the level in dB:
dB = 20 * log10(amplitude/maxAmplitude)

Save Kinect's color camera video stream in to .avi video

I want to save the video streams that is captured by Kinect's Color camera to .avi format video, I tried many ways of doing this but nothing was succeeded. Has anyone successfully done this? I'm using Kinect for Windows SDK and WFP for application development
I guess the easiest workaround would be to use a screen capture software like http://camstudio.org/.
There is also post with the same question her:
Kinect recording a video in C# WPF
As far as I understand you need to to save the single frames delivered by the kinect by into a video file. This post should explain how to do it How to render video from raw frames in WPF?.
You can use the AVIFile Windows API using interop:
http://msdn.microsoft.com/en-us/library/windows/desktop/dd756808(v=vs.85).aspx
or you can use a wrapper like this one, done by Corina John
http://www.codeproject.com/Articles/7388/A-Simple-C-Wrapper-for-the-AviFile-Library

Categories

Resources