audio - Free solution to create a virtual sound device in Windows? (Skype speakers both virtual and real)

07
2014-07
  • cipricus

    Trying to learn how to record a Skype conversation, I found here that this can be done on a Mac with Audacity and other free applications (by adding an aggregated device and a multi-output device in Mac's Audio MIDI Setup) - and with a superior result to what other apps for recording Skype on Windows or Mac can provide. A great video on that, here. The result is a multi-channel audio file, with separate channel for each input, in which, if need be, each channel can be edited and heard separately. The software that is promoted for recording Skype in Windows (at least the freeware) is far from giving the same level of quality. (Except this one, which also records the parties in separate tracks.)

    What is needed is the internal sound coming from Skype to be recorded as such, that is, directly from "inside" the sound card, not from the real speakers and not through the microphone: a purely digital sound, not the material sound, if I may say so. I need the sound coming from Skype to get directly to Audacity (or other recording software) without passing through the real speakers and microphone. In some software for recording Skype, the sound is taken from the microphone, recording all the surrounding noise that the mic can catch. In the intended solution a virtual device would replace the real speakers and microphone with virtual ones (image coming from the linked video):

    enter image description here

    Skype can be configured to send the "internal" sound (the voice of the person I am talking to) to some "virtual" speakers. On my Toshiba with Win 7 laptop, I can chose from multiple options:

    enter image description here

    Then, I can set Audacity to listen and record from these virtual speakers:

    enter image description here

    The result is the same no matter what virtual speakers/mic I choose, that is: Audacity hears and records what the other person says, but I cannot hear the voice 'live', because Skype sends that voice only to the virtual speakers. At the same time, Audacity cannot hear and record what I say, because it gets only the voice coming from the virtual speakers (the other person's voice), not the real ones.

    That was not the case in Mac, where a virtual device could be chosen that could set as speakers for Skype both the virtual and the internal speakers, and as microphone for Audacity both the virtual and the real microphones (with separate channels/tracks for each source). Based on that solution for Mac, I have created here an answer on stackexchange where the main settings can be seen.


    A question on how to create a virtual audio device in Linux has received an outdated answer.


    I need a way to create a virtual audio device in Windows (similar to that created by adding an aggregated device and a multi-output device in Mac's Audio MIDI Setup) in order to combine that with Audacity and Skype and replicate in Windows the solution that I like for Mac, namely:

    • to be able to send the sound from Skype to both virtual and real speakers

    • to be able to send sound to Audacity from both virtual and real microphones

    • to be able to record these two as two separate streams (like in the Mac solution linked above)

  • Answers
  • cipricus

    I think you're trying to over complicate things. I believe the problem you're trying to solve here is to record Skype conversations. To do that, you need:

    1. Audio stream from your sound card
    2. Audio stream from your notebook's mic (or external mic)
    3. Video stream of the chat session

    You can get 3 by using any screen recording software. I prefer Debut by NCH Software.

    For 1 and 2 all you have to do is press Win + R and enter:

    control /name Microsoft.Sound
    Press return. Now you should see the Sound Properties window. Switch to the "Recording" tab. Right click anywhere in the white space and select "Show Disabled Devices"

    Show disabled devices

    Right click on "Stereo Mix" and select "Enable". That will allow an audio recording software like Audacity to record audio directly from the sound card so you'll be able to record sound coming out of your computer's speakers.

    Enable Stereo Mix

    Double click on Stereo Mix and switch to the "Levels" tab and increase it to 100.

    Stereo Mix level 100

    Click OK and double click on "Microphone" and switch to the "Listen" tab and check the box that says "Listen to this device" and select your computer's speakers as the playback device.

    Microphone playback device

    Download, install and start Audacity and under Edit -> Preferences:Devices, choose "Stereo Mix" as the recording device.

    Audacity recording source

    That's it. Start recording audio. Switch to Debut. Start recording video. Switch to Skype. Place the call. Finish the call. Merge audio and video using FFMPEG after editing.

    If you still can't manage to get this to work, you might want to check out this article.

    Multitrack Recording

    If you'd like to record the audio stream from the computer and the audio stream from the microphone into separate individual tracks, you can use MixPad by NCH Software or any DAW that supports multi-track recording. I've confirmed that n-Track 7 works too. However, n-Track isn't free. If you use MixPad, make sure you download the free version for non-commercial use.

    To record both audio streams separately, make sure you have unchecked the box for "Listen to this device" under the "Listen" tab in Microphone Properties.

    Now start MixPad, and enable recording from the first and second tracks. (i.e. "Untitled Track 1" and "Untitled Track 2"). You can do that by clicking the small, grey record button beneath each track.

    Enable recording from tracks 1 and 2

    Now click on the little wrench icon for track 2 and make sure that its recording device is set to "Stereo Mix".

    Audio track settings icon Set recording device to "Stereo Mix"

    Do the same thing for track 1, but make sure its recording device is set to "Microphone"

    Set recording device to "Microphone"

    Now start recording by hitting the F5 key or by clicking Record Button

    Exporting Individual Tracks in MixPad

    There are two ways you could do this. You could select the track you want to export by clicking on it. Now switch to the "Mixing" tab and click "Export Clip". Select the audio format, bitrate and output path and hit "Export".

    Export audio track

    The other way to do it, is to click on "Clip Manager" under the "Tools" tab. Then right click on the clip you want to export and select "Export Clip as..." in the context menu. Select output format, audio bitrate, output path and hit "Export".

    Clip Manager

    Export audio clip

    Then, to have a single audio file with a separate channel for each track (considering the Skype recording aspect), add them into an Audacity project and export them into one audio file after enabling 'custom mix' option:

    enter image description here

    enter image description here

    For more details on the options to use with Skype (including a solution without involving Stereo Mix), see also this complementary answer.

  • harrymc

    There are heaps of products that can grab the speakers, but few that do direct digital capture.

    Some free products that are potential solutions (but which I don't know well enough to recommend):

    jackaudio
    VB-Audio CABLE (donationware, a similar free product on same web-page is Hi-Fi cable)
    Virtual Audio Pipeline (open-source)

    The best-known product is Virtual Audio Cable (commercial with trial, from $29.95) :

    It creates a set of virtual audio devices named "Virtual Cables", each of them consists of a pair of the waveform input/output devices. Any application can send audio stream to an output side of a cable, and any other application can receive this stream from an input side. All transfers are made digitally, providing NO sound quality loss (a bitperfect streaming).

    If more than one applications are sending audio to Virtual Cable device, VAC mixes all streams together. If more than one applications are receiving audio from Virtual Cable device, VAC distributes the same audio data among all targets.

  • cipricus

    you also can use VB-Audio Voicemeeter which is a virtual audio device Mixer able to mix/route several audio sources (physical or virtual) to different audio points (physical or virtual) and help you to make exactly what your diagram shows ! More info and complete documentation on www.voicemeeter.com (get latest version on facebook/G+ pages).

  • cipricus

    This is a complementary answer to sum up the others into the solution that I was asking for.

    So, after getting this answer and trying to apply the multi-track part by using MixPad, when I press the record button for the individual tracks after selecting a recording device, I get an error message unless that device is set as the default.

    enter image description here

    As the recording devices must be different and only one can be default, I cannot avoid that error.

    So, I put the external mic as default and tried another method:

    While trying the solutions provided by the other answers, I had already installed VB-Audio Voicemeeter and VB-Audio Cable. I made the following settings:

    • In the Sound options:

    enter image description here enter image description here

    • In Voicemeeter:

    enter image description here

    • In Skype:

    enter image description here

    • In MixPad: 2 tracks, one with the external mic and the other with Cable Output (VB-Audio Cable).

    It seems that I got what I wanted: in MixPad, I have two separate tracks, one for the incoming voice and one for my voice:

    enter image description here

    I see that I can export them as separate files: File - 'Export clip as'. Then import them in Audacity and export them again into one audio file with each track in its own separate channel.


    (As I took most of the ideas from the other answers, I cannot set my own as the definitive. I gave the bounty to the one that pointed to Voicemeeter and set as definitive the one that pointed out MixPad. But only in combining these I got what I was looking for.)


  • Related Question

    ubuntu - How to create a virtual sound device in Linux?
  • rkrv.

    I am looking for a way to create a virtual sound device in Linux, which would use channel outputs of my sound card.

    I have no experience in Linux and therefore am asking more experienced users for help. I have latest Ubuntu Desktop 10.10 installed on my VirtualBox machine. What I want to do is to be able to create multiple virtual audio devices and then configure them to use different output channels of my M-Audio ProFire 610 sound card. The reason I want to do it is that I will use these devices in Java afterwards, and Java doesn't support directly selecting channels in the sound card, therefore I need to do it outside of Java.

    In OS X I can do this by messing arround with Audio MIDI Setup utility, maybe there is something ready made for Linux, too? This is how it looks on OS X:

    enter image description here

    enter image description here

    I am looking for any help, hints, tips - well anything that will help me achieve this.


  • Related Answers
  • Malvineous

    You will have to edit ALSA configuration files in order to achieve this, which unfortunately involves a significant amount of black magic.

    Here's an example taken from the ALSA wiki showing how to split a card's front and rear stereo outputs into two independent audio devices:

    pcm.dshare {
        type dmix
        ipc_key 2048
        slave {
            pcm "hw:0"
            rate 44100
            period_time 0
            period_size 1024
            buffer_size 8192
            channels 4
        }
        bindings {
            0 0
            1 1
            2 2
            3 3
        }
    }
    pcm.frontx {
        type plug
        slave {
            pcm "dshare"
            channels 4
        }
        ttable.0.0 1
        ttable.1.1 1
    }
    pcm.rearx {
        type plug
        slave {
            pcm "dshare"
            channels 4
        }
        ttable.0.2 1
        ttable.1.3 1
    }