Archive

Posts Tagged ‘record’

Record audio in good quality

April 13, 2017 Leave a comment

Problem
I wanted to create some simple tutorial videos using a screen recording software (with gtk-recordMyDesktop to be precise), but the audio quality was terrible. There was a constant white noise in the background. I could reduce the noise with Audacity but 1) I couldn’t eliminate the noise, 2) it distorted my voice, and 3) the audio became weaker.

Solution
I had a cheap headphone / microphone that was connected with a jack plug. I think there was also some inference that caused the noise. So I bought a USB headset (Logitech H390) and the damn noise is gone! It works very well for me.

I tried it under Manjaro and here is how to make it work. Plug it and start Audacity. Next to the microphone icon there is a dropdown list. Select your headset and try to record some audio.

Try “pavucontrol” too. Under the Recording tab I had to select “Headset H390 Analog Mono”. Talk in the microphone and the sound feedback line should be moving.

How to record audio with gtk-recordMyDesktop? Start “pavucontrol” and “gtk-recordMyDesktop” too. In gtk-recordMyDesktop, go to Advanced -> Sound tab. Next to the device name I had “DEFAULT”. Change it to “pulse” (without quotes). Start recording with gtk-recordMyDesktop. Now switch to pavucontrol and go the Recording tab. At the bottom select “Show: Applications”. Now recordmydesktop should appear. Next to it there is a dropdown menu where select “Headset H390 Analog Mono”. It should do the trick.

Recording soundcard output

March 26, 2011 2 comments

Problem

I wanted to capture and record any audio output that comes through my soundcard. It is especially useful when, for example, you listen to a radio station that has a Flash player.

I have had this problem in my head for years when recently I came across the article “Linux: Recording soundcard output using arecord” written by Karthik. However, it seems that Karthik’s blog is abandoned :( Let’s hope he is all right.

This post will consist of two parts. In Part 1, I will sum up the results of Karthik. In Part 2, which is my own contribution to the topic, I will present some scripts that can do all the necessary changes of Part 1.

Part 1

As I mentioned, this section is based on this article and its comments.

This solution works with ALSA drivers. We will use the commands “arecord” and “amixer“, they come with ALSA.

First, create the file $HOME/.asoundrc with the following contents:

pcm.copy {
    type plug
    slave {
        pcm hw
    }
    route_policy copy
}

This specifies a PCM device called ‘copy’.

Execute the command “amixer contents“. It will display all controls applicable to the soundcard. We need the “Capture*” controls. Here is the relevant output on my machine:

numid=24,iface=MIXER,name='Capture Source'
  ; type=ENUMERATED,access=rw------,values=2,items=8
  ; Item #0 'Mic'
  ; Item #1 'CD'
  ; Item #2 'Video'
  ; Item #3 'Aux'
  ; Item #4 'Line'
  ; Item #5 'Mix'
  ; Item #6 'Mix Mono'
  ; Item #7 'Phone'
  : values=0,0
numid=25,iface=MIXER,name='Capture Switch'
  ; type=BOOLEAN,access=rw------,values=1
  : values=on
numid=26,iface=MIXER,name='Capture Volume'
  ; type=INTEGER,access=rw---R--,values=2,min=0,max=15,step=0
  : values=10,10
  | dBscale-min=0.00dB,step=1.50dB,mute=0

The value of “Capture Source” is 0, i.e. recording is done from the microphone. “Capture Switch” is on, and “Capture Volume” is 10.

Here is how to set to record from the soundcard. On my machine, the value of ‘Mix’ is 5, thus I need to execute the following command:

amixer cset numid=24,iface=MIXER,name='Capture Source' 5

If “Capture Switch” is off, turn it on:

amixer cset numid=25,iface=MIXER,name='Capture Switch' on

Finally, lower the “Capture Volume”, otherwise the recorded output will be noisy. You will have to play with this to find the value that works best for you. For me a low value, about 20%-30% of the maximum, worked fine.

amixer cset numid=26,iface=MIXER,name='Capture Volume' 3

Also, do not set your player volume too high while recording since it will introduce noise into your recording. Set it to 50%-60% or even lower.

Now you are ready to start recording. Try this:

arecord -d 10 -c 2 -f S16_LE -r 44100 -t wav -D copy foobar.wav

It will record a 10 seconds long session in WAV format. If you don’t want to specify the time limit, use the switch “-d 0” and stop the recording with CTRL + C. You can listen back the recording with “mplayer foobar.wav” for instance.

If it works fine, you can consider to save the output in a compressed form:

arecord -d 0 -c 2 -f S16_LE -r 44100 -t wav -D copy | oggenc -o foobar.ogg -

It will encode your recording to OGG format on the fly. Notice the “-” at the end of the command oggenc, it tells oggenc to read from the standard input. The command oggenc is part of the vorbis-tools package.

If you want to use Skype for instance, don’t forget to set back the recording to your microphone!!!

Thanks to Karthik for figuring all these things out :)

Part 2

As you have seen in Part 1, there are several commands and switches that you need to keep in mind to record your soundcard’s output. To facilitate life, I’ve made some scripts that can do all this job for you.

Download:

Visit https://github.com/jabbalaci/Record-Soundcard-Output.

I copy here the contents of the README file:

Recording soundcard output
==========================

Usage:

./01-verify.py
    Verify your current settings. It is a good idea to write down
    these settings to know what to restore later.
    You can edit 03-Skype-restore-rec-to-microphone.py and specify
    these values.

./02-set-for-rec-soundcard-output.py
    Change settings for recording soundcard output.
    Default values: 'Mix', 'on', and 3. You might want to
    change these values in the source.

./04-start-rec-soundcard-output.py
    Start recording. The script will ask the name of the
    output file. If you press ENTER, the script will generate
    a unique name. By default, the output will be stored in the
    "output" folder.

./03-Skype-restore-rec-to-microphone.py
    Restore settings for recording the microphone. Edit the
    source and set those values that you wrote down at the
    beginning.

Troubleshooting

Well, it might happen that you have no ‘Capture Source’. It simply means that you had no luck :( I don’t know how to record the soundcard output in this case. Maybe this kind of recording is not supported by your soundcard? I tried this method on four Dell machines with a success rate of 50%. Two of them have no ‘Capture Source’ at all…

You can check the section “Related links” below, one article addresses a similar problem.

Related links

[ @reddit ]