<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ca">
	<id>http://wiki.joanillo.org/index.php?action=history&amp;feed=atom&amp;title=50_ways..._Music_are_bytes</id>
	<title>50 ways... Music are bytes - Historial de revisió</title>
	<link rel="self" type="application/atom+xml" href="http://wiki.joanillo.org/index.php?action=history&amp;feed=atom&amp;title=50_ways..._Music_are_bytes"/>
	<link rel="alternate" type="text/html" href="http://wiki.joanillo.org/index.php?title=50_ways..._Music_are_bytes&amp;action=history"/>
	<updated>2026-09-22T12:31:03Z</updated>
	<subtitle>Historial de revisió per a aquesta pàgina del wiki</subtitle>
	<generator>MediaWiki 1.34.2</generator>
	<entry>
		<id>http://wiki.joanillo.org/index.php?title=50_ways..._Music_are_bytes&amp;diff=251026&amp;oldid=prev</id>
		<title>Joan: /* Playback del raw audio */</title>
		<link rel="alternate" type="text/html" href="http://wiki.joanillo.org/index.php?title=50_ways..._Music_are_bytes&amp;diff=251026&amp;oldid=prev"/>
		<updated>2013-12-16T09:06:27Z</updated>

		<summary type="html">&lt;p&gt;&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;Playback del raw audio&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Pàgina nova&lt;/b&gt;&lt;/p&gt;&lt;div&gt;=Objectius=&lt;br /&gt;
&lt;br /&gt;
=Introducció: PCM=&lt;br /&gt;
[[Fitxer:250px-Pcm.png]]&lt;br /&gt;
&lt;br /&gt;
Primer de tot, convé recordar perquè parlem de PCM, i perquè tenim dispositius ''pcm''&lt;br /&gt;
*http://en.wikipedia.org/wiki/Pulse-code_modulation&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ ls /dev/snd&lt;br /&gt;
by-path    controlC1  hwC0D0  midiC3D0  midiC3D2  pcmC0D0c  pcmC1D3p  timer&lt;br /&gt;
controlC0  controlC3  hwC1D0  midiC3D1  midiC3D3  pcmC0D0p  seq&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Pulse-code modulation (PCM) is a method used to digitally represent sampled analog signals. It is the standard form of digital audio in computers, Compact Discs, digital telephony and other digital audio applications. In a PCM stream, the amplitude of the analog signal is sampled regularly at uniform intervals, and each sample is quantized to the nearest value within a range of digital steps.&lt;br /&gt;
&lt;br /&gt;
PCM streams have two basic properties that determine their fidelity to the original analog signal: the sampling rate, the number of times per second that samples are taken; and the bit depth, which determines the number of possible digital values that each sample can take.&lt;br /&gt;
&lt;br /&gt;
És a dir, el dispositiu ''pcm'' en la nostra targeta de so representa els conversors ADC que samplegen el senyal d'àudio que li arriba a una freqüència de mostreig determinada i amb una resolució de bits.&lt;br /&gt;
&lt;br /&gt;
=Desenvolupament=&lt;br /&gt;
==Capturar amb arecord Una Plata d'Enciam (raw)==&lt;br /&gt;
Per gravar l'àudio no és tan fàcil amb la UA-25EX, perquè vull gravar amb un sol micro i em trobo amb un problema que ja m'hi havia trobat:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ arecord -v -f S16_LE -r 8000 -c 2 -D plughw:2,0 foobar.raw&lt;br /&gt;
$ aplay -D plughw:2,0 foobar.raw&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
El tema és que jo només vull gravar un sol canal, amb un sol micro, i l'opció -c 1, que de fet és l'opció per defecte, no funciona. Això ja estava discutit a:&lt;br /&gt;
*http://wiki.joanillo.org/index.php/Edirol_UA-25EX_amb_Linux_II#Recording_sound&lt;br /&gt;
La solució és:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ joe $HOME/.asoundrc&lt;br /&gt;
&lt;br /&gt;
pcm.!default {&lt;br /&gt;
  type             plug&lt;br /&gt;
  slave.pcm &amp;quot;record_left&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
pcm.record_left {&lt;br /&gt;
   type        dsnoop&lt;br /&gt;
   ipc_key 234884&lt;br /&gt;
   slave {&lt;br /&gt;
       pcm     &amp;quot;hw:2,0&amp;quot;&lt;br /&gt;
       channels 2&lt;br /&gt;
   }&lt;br /&gt;
   bindings.0  0&lt;br /&gt;
}&lt;br /&gt;
pcm.record_right {&lt;br /&gt;
   type        dsnoop&lt;br /&gt;
   ipc_key 2241234&lt;br /&gt;
   slave {&lt;br /&gt;
       pcm     &amp;quot;hw:2,0&amp;quot;&lt;br /&gt;
       channels 2&lt;br /&gt;
   }&lt;br /&gt;
   bindings.0  1&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
(ficar el valor correcte de hw:2,0 o hw:1,0, on estigui la UA25EX)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ arecord -v -f S16_LE -r 8000 -c 1 -D plug:record_left foobar.raw&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Això són dades crues (raw). Amb el Audacity puc mirar la ona fent Importar &amp;gt; dades cures (sample rate 8000)&lt;br /&gt;
&lt;br /&gt;
Per visualitzar les dades hexadecimals del fitxer (els primers 200 bytes):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ xxd -l 200 -p foobar.raw&lt;br /&gt;
&lt;br /&gt;
52494646b465000057415645666d74201000000001000100401f0000803e&lt;br /&gt;
000002001000646174619065000000000000000000000000000000000000&lt;br /&gt;
00000000000000000000000000000100ffff0100ffff0100ffff00000100&lt;br /&gt;
fdff2d003b00320034002e00390032002f00320030002c00260028002500&lt;br /&gt;
22002600150012000e00140022000d000b00080001001800fffff0ff0400&lt;br /&gt;
feff1000f3ff01000400f6ff0e00f8ff15000e0012000c00fbff0c00feff&lt;br /&gt;
0900e5ff02000200effffffff3fffbffebfff8ff&lt;br /&gt;
---&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Per calcular el tamany d'aquesta ristra de caràcters hexadecimals:&lt;br /&gt;
&lt;br /&gt;
61 columnes *868 línies = 52948 caràcters hexadecimals. Divideixo per dos i tinc el número de bytes: 26474 bytes&lt;br /&gt;
&lt;br /&gt;
i és precisament això el que ocupa el meu raw audio:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ ls -la foobar.raw &lt;br /&gt;
-rw-r--r-- 1 joan joan 26044 des 13 23:08 foobar.raw&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Són 1,625 segons. El mostreig era de 8000fps i les dades eren en format S16_LE (resolució de 16 bits per mostra). Per tant:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
1,625 sec * 8000 mostres/sec * 2 bytes/mostra = 26000 bytes&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
==Playback del raw audio==&lt;br /&gt;
Per tal de què soni la canço evidentment podem utilitzar aplay&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ aplay -v -f S16_LE -r 8000 -c 1 -D plughw:2,0 -t raw foobar.raw&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
però potser queda més clar que la informació està en els bytes si fem:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ cat foobar.raw | aplay -v -f S16_LE -r 8000 -c 1 -D plughw:2,0 -t raw&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Recordem que l'experiment típic és produir soroll blanc:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ cat /dev/urandom | aplay  -r 8000 -D plughw:2,0&lt;br /&gt;
$ cat /dev/urandom | aplay  -r 44100 -D plughw:2,0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
provant diferents funcions del rate obtinc soroll blanc més o menys greu.&lt;br /&gt;
&lt;br /&gt;
Si vull utiltizar algo com redirigir els meus bytes a /dev/audio o /dev/dsp, ho tinc malament amb ALSA, doncs aquests dispositius apareixien quan OSS era el servidor d'audio dels sistemes linux. Ara, amb ALSA com a servidor d'àudio, aquests dispositius ja no apareixen. La única cosa similar que es pot fer és utiltizar padsp (PulseAudio OSS Wrapper), similar a:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ cat /dev/urandom | padsp -d tee /dev/audio &amp;gt; /dev/null&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
però redirigir el meu fixer foobar.raw no obtinc el resultat esperat perquè en algun moment hem de definir el format en què vénen les dades:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ cat foobar.raw | padsp -d tee /dev/audio &amp;gt; /dev/null&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
==plyback del raw audio amb node.js==&lt;br /&gt;
script '''speaker.js''':&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    I A  speaker.js (Modified)(java)  Row 7    Col 19   9:53  Ctrl-K H for help&lt;br /&gt;
var Speaker = require('speaker');&lt;br /&gt;
&lt;br /&gt;
// Create the Speaker instance&lt;br /&gt;
var speaker = new Speaker({&lt;br /&gt;
  channels: 1,          // 1 channel&lt;br /&gt;
  bitDepth: 16,         // 16-bit samples&lt;br /&gt;
  sampleRate: 8000     // 8000 Hz sample rate &lt;br /&gt;
});                  &lt;br /&gt;
   &lt;br /&gt;
// PCM data from stdin gets piped into the speaker&lt;br /&gt;
process.stdin.pipe(speaker);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
I executem el script:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ cat foobar.raw | node speaker.js&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Enllaços=&lt;br /&gt;
*Blog: &lt;br /&gt;
*Video:&lt;br /&gt;
&lt;br /&gt;
{{Autor}}, desembre 2013&lt;br /&gt;
[[Category: 50 Ways to play Una Plata d'Enciam]]&lt;br /&gt;
[[Category: Música Electrònica]]&lt;br /&gt;
[[Category: www.joanillo.org]]&lt;/div&gt;</summary>
		<author><name>Joan</name></author>
		
	</entry>
</feed>