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
Last revisionBoth sides next 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 17:21] – [Web References] 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 ====== +====== Problem: silence gaps using a cheap USB dongle ======
- +
-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: 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:
Line 157: Line 84:
 {{audacity-track-gaps.png?direct&400|}} {{audacity-track-gaps.png?direct&400|}}
  
-===== Ugreen USB audio adapter ===== +====== Wireless UHF microphone ======
- +
-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 115:
 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**! +
- +
-We can group the problems you can face in three main categories: +
- +
-  * Physical connection +
-  * Electrical compatibility and hardware autodetection +
-  * Software capabilities and settings +
- +
-===== Physical connection ===== +
- +
-{{ android-external-mic.jpg?260|Connecting a Wireless Microphone to an Android Smartphone}} +
-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. +
- +
-===== Electrical compatibility and hardware autodetection ===== +
- +
-As stated above, the first problem is **powering the microphone** itself, because generally we will use an **electret** one. It is a **common practice** to provide the power on the same line of the microphone signal, so **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**. +
- +
-On a Xiaomi Mi A1 smartphone, which has a **TRRS 3.5 mm jack, CTIA standard**, we measured a bias current of **2.19 volt** between the microphone (sleeve) and the ground (ring). +
- +
-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. +
- +
-===== Software capabilities and settings =====+
  
-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:+===== Wireless mic on the Acer Travelmate TMB113-E =====
  
-^ 1/4" TS female jack  ^ Signal         ^ 3.5 mm TRRS male jack (CTIA) +See this article about **[[audio_recording_tmb113_e]]**.
-|                      | 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.+===== Wireless mic on Android =====
  
-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. +See this article about **[[audio_recording_android]]**.
-  +
-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]]).+===== Wireless mic on Ugreen USB audio adapter =====
  
-The resulting recording is quite good: a **48 kHz 16 bits** file with good sound quality and low noise.+See this article about **[[audio_recording_usb_adapter]]**.
  
-===== Web References =====+====== Web References ======
  
   * [[wp>Microphone]]   * [[wp>Microphone]]
doc/appunti/linux/audio/audio_recording.txt · Last modified: 2020/12/28 18:22 by niccolo