User Tools

Site Tools


doc:appunti:linux:audio:audio_recording

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
doc:appunti:linux:audio:audio_recording [2020/12/27 17:50] – [External mic on the Acer Travelmate TMB113-E] niccolodoc:appunti:linux:audio:audio_recording [2020/12/28 18:22] (current) niccolo
Line 44: Line 44:
  
 A small movable **induction coil**, positioned in the **magnetic field** of a permanent magnet, is attached to the diaphragm. The sound wave moves the diaphragm and the coil moves in the magnetic field, producing a varying current in the coil through **electromagnetic induction**. No power is required: the current is carried directly on **two poles** to the mic input. These microphones generally have a **1/4" mono jack**. A small movable **induction coil**, positioned in the **magnetic field** of a permanent magnet, is attached to the diaphragm. The sound wave moves the diaphragm and the coil moves in the magnetic field, producing a varying current in the coil through **electromagnetic induction**. No power is required: the current is carried directly on **two poles** to the mic input. These microphones generally have a **1/4" mono jack**.
 +
 ==== Condenser ==== ==== Condenser ====
  
Line 56: Line 57:
 Unlike capacitor ones, electret microphones **do not require polarizing voltage**, but generally they contain an integrated preamplifier that **does require power**. In this cases a **TRS jack** can be used, where the ring carries power via a resistor from, normally, a 5 V supply in the computer (often incorrectly called //polarizing power// or //bias//). Generally these microphones built to be plugged into computers and electronic audio devices, have a **TRS 3.5 mm jack**, carrying the mic signal and the required current. Unlike capacitor ones, electret microphones **do not require polarizing voltage**, but generally they contain an integrated preamplifier that **does require power**. In this cases a **TRS jack** can be used, where the ring carries power via a resistor from, normally, a 5 V supply in the computer (often incorrectly called //polarizing power// or //bias//). Generally these microphones built to be plugged into computers and electronic audio devices, have a **TRS 3.5 mm jack**, carrying the mic signal and the required current.
  
-====== External mic on the Acer Travelmate TMB113-E ====== +====== Wireless UHF microphone ======
- +
-Running **Debian GNU/Linux 10 Stretch**, it seems that the use of the **headphone/microphone split cable** does not abilitate the use of the microphone. In fac, if you run the **acpi_listen** tool (from the **acpid** Debian package), you can see when you plug and unplug the split cable: +
- +
-<code> +
-jack/headphone HEADPHONE plug +
-jack/headphone HEADPHONE unplug +
-</code> +
- +
-but nothing is reported about the microphone. Beside that the bias current does not appear on the microphone jack. The solution is to run the **hdajackretask** tool (from the **alsa-tools-gui** Debian package), then force the connection of **Pin 0x19**: +
- +
-  * Enable the **Show unconnected pins** option. +
-  * Click **Pin ID: 0x19** => **Override** => **Microphone**. +
-  * **Apply now** (it asks for the root password, as it has to run a script with superuser privileges). +
- +
-the running **acpi_listen** will print: +
- +
-<code> +
-jack/microphone MICROPHONE plug +
-</code> +
- +
-Now you can also measure a **bias current of 2.85 V** between the ground (**sleeve**) and the **ring** or the **tip**. +
- +
-In some cases the **hdajackretask** is unable to perform the **Apply now** function because the audio device is in use, so you get the following error message: +
- +
-<code> +
-/sys/class/sound/hwC0D0/reconfig: Device or resource busy +
-</code> +
- +
-The culprit can be some PulseAudio or ALSA process, or something else which is using the **snd-hda-intel** kernel module. I tried several commands to free the audio device, stopping user and system services: +
- +
-<code> +
-systemctl --user stop pulseaudio.socket +
-systemctl --user stop pulseaudio.service +
-sudo systemctl stop alsa-state.service +
-</code> +
- +
-I was unable to free the module on a Debian 10 with XFCE, so I tried the **Install boot override** button of hdajackretask. This option will add a modprobe configuration file **/etc/modprobe.d/hda-jack-retask.conf** containing the following line: +
- +
-<file> +
-options snd-hda-intel patch=hda-jack-retask.fw,hda-jack-retask.fw,hda-jack-retask.fw,hda-jack-retask.fw +
-</file> +
- +
-This will pass the **patch** option on module loading, using the content of the file **/lib/firmware/hda-jack-retask.fw** which is created by hdajackretask too. The file contains the hex values for the retask of each pin, something like this: +
- +
-<file> +
-[codec] +
-0x10ec0269 0x10250748 0 +
- +
-[pincfg] +
-0x12 0x411111f0 +
-0x14 0x90170110 +
-0x17 0x411111f0 +
-0x18 0x411111f0 +
-0x19 0x03a19020 +
-0x1a 0x411111f0 +
-0x1b 0x90a70920 +
-0x1d 0x40189b2d +
-0x1e 0x411111f0 +
-0x21 0x0321101f +
-</file> +
- +
-The **pincfg** hex values are shown on stdout by hdajackretask when you press the //Apply now// button, so you can take note and build different files for different scenarios to use during bootstrap. For the TBM113-E the normal status of **pin 0x19** corresponds to the value **0x411111f0**, whereas the override status (plugged microphone) is **0x03a19020**. +
- +
-I used the PulseAudio mixer **pavucontrol** to set the recording volume level: it turned out that a value of **16463** (corresponding to 25% of the slider, or -36.00 dB) is the best setting for normal speach. At the ALSA level (lower level interface used by PylseAudio) it means a **Capture** level of **100** and a **Mic Boost** of **0**. This is a table of value correspondence between PulseAudio and ALSA: +
- +
-^ ALSA                      ^ PulseAudio                        ^ +
-| Capture 100, Mic Boost 0  | Volume: 16463 /  25% / -36.00 dB  | +
-| Capture 100, Mic Boost 20 | Volume: 26092 /  40% / -24.00 dB  | +
-| Capture 100, Mic Boost 51 | Volume: 41353 /  63% / -12.00 dB  | +
- +
-When you apply the pin override in **hdajackretask**, it is not clear **how to disable the external microphone**: re-setting **Pin 0x19** to **Not connected** does not generate the ACPI microphone unplug event, and the bias current is not cleared. The bias power disappears from the jack after a poweroff or an hybernation, so the external microphone seems to be "unplugged" after these events. +
- +
-If instead the override is made at bootstrap via the modules patch option, the settings survive after the hibernation: you can see the **jack/microphone MICROPHONE plug** ACPI event after the resume. +
-===== Problem: silence gaps using a cheap USB dongle ===== +
- +
-I was **unable to use the microphone connector** on my Acer TravelMate, so I tried to use an USB dongle, marked **LinQ**. The device was detected by the Linux Kernel 4.9.0: +
- +
-<code> +
-usb 2-1.3: new full-speed USB device number 9 using ehci-pci +
-usb 2-1.3: New USB device found, idVendor=0c76, idProduct=1607 +
-usb 2-1.3: New USB device strings: Mfr=0, Product=1, SerialNumber=0 +
-usb 2-1.3: Product: USB Headphone Set +
-input: USB Headphone Set as /devices/pci0000:00/0000:00:1d.0 +
-    /usb2/2-1/2-1.3/2-1.3:1.3/0003:0C76:1607.0004/input/input92 +
-hid-generic 0003:0C76:1607.0004: +
-    input,hidraw2: USB HID v1.00 Device [USB Headphone Set] +
-    on usb-0000:00:1d.0-1.3/input3 +
-</code> +
- +
-{{ linq-usb-audio.png?direct&100|LinQ USB audio dongle}} +
-The USB audio adapter worked quite nicely at playing audio, I use it on a QNAP TS-120 NAS, transformed into a media player installing Debian GNU/Linux on it. The Linux kernel and the **ALSA audio subsystem** works well on setting the levels for **playback**. +
- +
-Once started Audacity, I was able to select the microphone line of the USB dongle as a **capture device**: +
- +
-{{audacity-select-usb-audio.png?direct&260|}} +
- +
-Recording a sample track revealed an annoying problem: about **every 0.4 seconds** you can see a **gap of silence** in the audio track of about **two hundredths of a second**. The audio track is unusable! +
- +
-{{audacity-track-gaps.png?direct&400|}} +
- +
-===== Ugreen USB audio adapter ===== +
- +
-The device is detected by the Linux Kernel 4.9.0 in this way: +
- +
-<code> +
-usb 2-1.3: new full-speed USB device number 5 using ehci-pci +
-usb 2-1.3: New USB device found, idVendor=0d8c, idProduct=0024 +
-usb 2-1.3: New USB device strings: Mfr=1, Product=2, SerialNumber=0 +
-usb 2-1.3: Product: USB Advanced Audio Device +
-usb 2-1.3: Manufacturer: C-Media Electronics Inc. +
-input: C-Media Electronics Inc. USB Advanced Audio Device as /devices/pci0000:00/0000:00:1d.0 +
-    /usb2/2-1/2-1.3/2-1.3:1.3/0003:0D8C:0024.0004/input/input18 +
-hid-generic 0003:0D8C:0024.0004: +
-    input,hidraw2: USB HID v1.11 Device [C-Media Electronics Inc. USB Advanced Audio Device] +
-    on usb-0000:00:1d.0-1.3/input3 +
-</code> +
- +
-{{ ugreen-usb-audio.jpg?direct&220|Ugreen USB Audio Adapter}} +
- +
-Launching **alsamixer** and hitting F6 you can select the **USB Advanced Audio Device** sound card. Hit F4 to view the only one capture device, i.e. the microphone input line. Press **Space** to enable/disable the **capture** and **Up/Down arrows** to increase/decrease the **gain**. +
- +
-It seems that the best setting for audio recording through the mic, is to keep the **capture mic gain to 100**: +
- +
-{{usb-advanced-audio-device-alsamixer.png?direct&300|USB Advenced Audio Device in Alsamixer}} +
- +
-The **microphone socket** is a **3.5 mm TRS type** (three poles), it provides a bias current of **2.6 V** on both the **tip** and the **ring**, so it is advisable, as reported in the device manual, to **NOT use a simple two poles mono jack** (TS type), because it will short-circuit the bias current on the ring with the ground on the sleeve. +
- +
-===== Wireless UHF microphone =====+
  
 We have purchased an **UHF wireless microphone** on Aliexpress.com for about 25 €. It is composed by: We have purchased an **UHF wireless microphone** on Aliexpress.com for about 25 €. It is composed by:
Line 215: Line 88:
 The **2.6 volt** current provided by the USB adapter on th **jack ring** will go nowhere (not connected). The **2.6 volt** current provided on the **jack tip** is probably not required by the UHF receiver, but **it should not harm**. **No infromation** is available about **microphone impedence** expected by the USB adapter, on the other hand no information is available about the **impedence of the mic interface** of the UHF receiver. The **2.6 volt** current provided by the USB adapter on th **jack ring** will go nowhere (not connected). The **2.6 volt** current provided on the **jack tip** is probably not required by the UHF receiver, but **it should not harm**. **No infromation** is available about **microphone impedence** expected by the USB adapter, on the other hand no information is available about the **impedence of the mic interface** of the UHF receiver.
  
-Despite all this empirical approach, the **voice registration is quite satisfying**! +Despite all this empirical approach, the **voice registration is quite satisfying**! See below about connecting the microphone to an Acer TravelMate notebook an to an Android smartphone.
-====== Audio Recording With Android ======+
  
-Recording audio using an **external microphone** connected to an **Android device** can be a real nightmare. We tried the hard way using a Chinese, no-brand, **wireless UHF microphone**!+===== Wireless mic on the Acer Travelmate TMB113-E =====
  
-We can group the problems you can face in three main categories:+See this article about **[[audio_recording_tmb113_e]]**.
  
-  * Physical connection +===== Wireless mic on Android =====
-  * Electrical compatibility and hardware autodetection +
-  * Software capabilities and settings+
  
-===== Physical connection =====+See this article about **[[audio_recording_android]]**.
  
-{{ android-external-mic.jpg?260|Connecting a Wireless Microphone to an Android Smartphone}} +===== Wireless mic on Ugreen USB audio adapter =====
-Most Android devices have a **3.5 mm jack** accepting a **TRRS connector in CTIA standard** and every brand of mobile phones produces **headsets** with their own standard. The vast majority of solutions uses **electret microphones** requiring a **bias current**, but use **some combinations of impedence** to detect the insertion of the microphone and to **handle the headset button** (or buttons).+
  
-So, connecting an external microphone, can be as simple as making a cable that connects the **ring** and the **sleve** of the **CTIA connector** to (respectively) the **ground** and the **microphone line** of the microphone. The hard part is to guess, or empirically try, if the microphone **requires a bias current**, if the Android device is provinding such a current and if the microphone produces a sufficient **output level** (actually a voltage in the order of the millivolts) that can be used by the device.+See this article about **[[audio_recording_usb_adapter]]**.
  
-===== Electrical compatibility and hardware autodetection =====+====== Problem: silence gaps using a cheap USB dongle ======
  
-As stated above, the first problem is **powering the microphone** itselfbecause generally we will use an **electret** one. It is a **common practice** to provide the power on the same line of the microphone signalso **requiring just two wires** for both power (from the device to the mic) and for signal (from the mic to the device). The power, also called //bias current//, is generally in the range of **2.5** to **5.0 volt**.+I was **unable to use the microphone connector** on my Acer TravelMateso I tried to use an USB donglemarked **LinQ**. The device was detected by the Linux Kernel 4.9.0:
  
-On a Xiaomi Mi A1 smartphone, which has a **TRRS 3.5 mm jackCTIA standard**we measured a bias current of **2.19 volt** between the microphone (sleeve) and the ground (ring).+<code> 
 +usb 2-1.3: new full-speed USB device number 9 using ehci-pci 
 +usb 2-1.3: New USB device foundidVendor=0c76idProduct=1607 
 +usb 2-1.3: New USB device strings: Mfr=0, Product=1, SerialNumber=0 
 +usb 2-1.3: Product: USB Headphone Set 
 +input: USB Headphone Set as /devices/pci0000:00/0000:00:1d.0 
 +    /usb2/2-1/2-1.3/2-1.3:1.3/0003:0C76:1607.0004/input/input92 
 +hid-generic 0003:0C76:1607.0004: 
 +    input,hidraw2: USB HID v1.00 Device [USB Headphone Set] 
 +    on usb-0000:00:1d.0-1.3/input3 
 +</code>
  
-Another parameter which should be considered is the **impedence**, but unfortunatelly it is generally **impossibile to find documentation** about what is expected by the smartphone and what is offered by the microphone.+{{ linq-usb-audio.png?direct&100|LinQ USB audio dongle}} 
 +The USB audio adapter worked quite nicely at playing audio, I use it on a QNAP TS-120 NAS, transformed into a media player installing Debian GNU/Linux on it. The Linux kernel and the **ALSA audio subsystem** works well on setting the levels for **playback**.
  
-===== Software capabilities and settings =====+Once started Audacity, I was able to select the microphone line of the USB dongle as a **capture device**:
  
-Wishing to connect the **UHF microphone** to an **Android smartphone**, we prepared an **adapter cable**From 3.5 mm jack TRRS male to 1/4" jack TS female, with this pinout:+{{audacity-select-usb-audio.png?direct&260|}}
  
-^ 1/4" TS female jack  ^ Signal         ^ 3.5 mm TRRS male jack (CTIA) +Recording a sample track revealed an annoying problem: about **every 0.4 seconds** you can see a **gap of silence** in the audio track of about **two hundredths of a second**. The audio track is unusable!
-|                      | Not connected **Tip**                       | +
-|                      | Not connected **Ring**                      | +
-**Sleeve**           | Ground         | **Ring**                      | +
-| **Tip**              | Microphone     | **Sleeve**                    |+
  
-The smartphone **did not sensed the microphone**, there is not much documentation about it, but it seems that the **autodetection** of the microphone is **based upon the impedence** of the mic itself, if it is too low, it is not detected. +{{audacity-track-gaps.png?direct&400|}}
- +
-Once completed the electrical connection and acknowledged that **automatic detection of the external microphone does not work**, I decided to use the **[[https://play.google.com/store/apps/details?id=com.nordskog.LesserAudioSwitch|Lesser AudioSwitch]]** app, which allows switching between the internal speaker/microphone and the external headset/mic by a button tap. +
-  +
-To realize the electrical connection explained in the above table, I used a **mic/headphone splitter cable**: the CTIA 4-poles male jack goes into the smartphone, the headphone female jack is left unconnected, the mic female Jack is connected to a **self-made adapter cable** featuring a 3.5 mm TRS male jack and a 1/4" TS female jack. Finally the UHF receiver is connected using the 1/4" jack. +
- +
-To record audio I used the **[[https://f-droid.org/en/packages/com.github.axet.audiorecorder/|Audio Recorder]]** v.3.3.11 app from the F-Droid repository (free software, GPLv3 license). Into the Settings menu I choosed the **Unprocessed** recording source instead of mic, this gives raw audio data, without automatic gain applied etc. (see [[https://developer.android.com/guide/topics/media/mediarecorder|Android MediaRecorder overview]]). +
- +
-The resulting recording is quite good: a **48 kHz 16 bits** file with good sound quality and low noise.+
  
-===== Web References =====+====== Web References ======
  
   * [[wp>Microphone]]   * [[wp>Microphone]]
doc/appunti/linux/audio/audio_recording.1609087856.txt.gz · Last modified: 2020/12/27 17:50 by niccolo