<?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=Libsndfile_library</id>
	<title>Libsndfile library - 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=Libsndfile_library"/>
	<link rel="alternate" type="text/html" href="http://wiki.joanillo.org/index.php?title=Libsndfile_library&amp;action=history"/>
	<updated>2026-08-30T10:19:14Z</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=Libsndfile_library&amp;diff=248833&amp;oldid=prev</id>
		<title>Joan: /* sndfile-jackplay */</title>
		<link rel="alternate" type="text/html" href="http://wiki.joanillo.org/index.php?title=Libsndfile_library&amp;diff=248833&amp;oldid=prev"/>
		<updated>2012-02-13T22:54:01Z</updated>

		<summary type="html">&lt;p&gt;&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;sndfile-jackplay&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;__TOC__&lt;br /&gt;
=Introducció=&lt;br /&gt;
*http://www.labbookpages.co.uk/audio/wavFiles.html&lt;br /&gt;
*http://www.mega-nerd.com/libsndfile/tools/#jackplay&lt;br /&gt;
Per compilar un projecte que utilitza libsndfile:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ gcc -lsndfile -o readWav readWav.c&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Per què necessito aquesta libreria? Vull fer un petit projecte que faci sonar de forma realista el moviment del llapis en la wacom, tenint en compte la velocitat del llapis i la pressió. La idea és partir d'un fitxer d'audio que sigui realista, ficar totes les samples en un buffer, i quan escrigui a la wacom enviar el buffer a la sortida però modificant les samples tenint en compte la velocitat i la pressió. La idea és obtenir algun resultat similar al que fan a Mogees:&lt;br /&gt;
*http://www.hispasonic.com/noticias/mogees-reconocimiento-gestual-interactivo-para-mosaicos-audio-tiempo-real-toma-ya/31349&lt;br /&gt;
=readWav.c=&lt;br /&gt;
*http://www.labbookpages.co.uk/audio/wavFiles.html&lt;br /&gt;
'''readWav.c''':&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// Andrew Greensted - Feb 2010&lt;br /&gt;
// http://www.labbookpages.co.uk&lt;br /&gt;
// Version 1&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#include &amp;lt;malloc.h&amp;gt;&lt;br /&gt;
#include &amp;lt;sndfile.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main(int argc, char *argv[])&lt;br /&gt;
{&lt;br /&gt;
	printf(&amp;quot;Wav Read Test\n&amp;quot;);&lt;br /&gt;
	if (argc != 2) {&lt;br /&gt;
		fprintf(stderr, &amp;quot;Expecting wav file as argument\n&amp;quot;);&lt;br /&gt;
		return 1;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	// Open sound file&lt;br /&gt;
	SF_INFO sndInfo;&lt;br /&gt;
	SNDFILE *sndFile = sf_open(argv[1], SFM_READ, &amp;amp;sndInfo);&lt;br /&gt;
	if (sndFile == NULL) {&lt;br /&gt;
		fprintf(stderr, &amp;quot;Error reading source file '%s': %s\n&amp;quot;, argv[1], sf_strerror(sndFile));&lt;br /&gt;
		return 1;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	// Check format - 16bit PCM&lt;br /&gt;
	if (sndInfo.format != (SF_FORMAT_WAV | SF_FORMAT_PCM_16)) {&lt;br /&gt;
		fprintf(stderr, &amp;quot;Input should be 16bit Wav\n&amp;quot;);&lt;br /&gt;
		sf_close(sndFile);&lt;br /&gt;
		return 1;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	// Check channels - mono&lt;br /&gt;
	if (sndInfo.channels != 1) {&lt;br /&gt;
		fprintf(stderr, &amp;quot;Wrong number of channels\n&amp;quot;);&lt;br /&gt;
		sf_close(sndFile);&lt;br /&gt;
		return 1;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	// Allocate memory&lt;br /&gt;
	float *buffer = malloc(sndInfo.frames * sizeof(float));&lt;br /&gt;
	if (buffer == NULL) {&lt;br /&gt;
		fprintf(stderr, &amp;quot;Could not allocate memory for file\n&amp;quot;);&lt;br /&gt;
		sf_close(sndFile);&lt;br /&gt;
		return 1;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	// Load data&lt;br /&gt;
	long numFrames = sf_readf_float(sndFile, buffer, sndInfo.frames);&lt;br /&gt;
&lt;br /&gt;
	// Check correct number of samples loaded&lt;br /&gt;
	if (numFrames != sndInfo.frames) {&lt;br /&gt;
		fprintf(stderr, &amp;quot;Did not read enough frames for source\n&amp;quot;);&lt;br /&gt;
		sf_close(sndFile);&lt;br /&gt;
		free(buffer);&lt;br /&gt;
		return 1;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	// Output Info&lt;br /&gt;
	printf(&amp;quot;Read %ld frames from %s, Sample rate: %d, Length: %fs\n&amp;quot;,&lt;br /&gt;
		numFrames, argv[1], sndInfo.samplerate, (float)numFrames/sndInfo.samplerate);&lt;br /&gt;
	&lt;br /&gt;
	sf_close(sndFile);&lt;br /&gt;
	free(buffer);&lt;br /&gt;
&lt;br /&gt;
	return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ gcc -lsndfile -o readWav readWav.c&lt;br /&gt;
&lt;br /&gt;
$ ./readWav hola.wav &lt;br /&gt;
Wav Read Test&lt;br /&gt;
Input should be 16bit Wav&lt;br /&gt;
&lt;br /&gt;
$ ./readWav file_1.wav &lt;br /&gt;
Wav Read Test&lt;br /&gt;
Read 58000 frames from file_1.wav, Sample rate: 16000, Length: 3.625000s&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=sndfile-jackplay=&lt;br /&gt;
*http://www.mega-nerd.com/libsndfile/tools/#jackplay&lt;br /&gt;
'''sndfile-jackplay'' ja es troba instal.lat:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ man sndfile-jackplay&lt;br /&gt;
&lt;br /&gt;
SNDFILE-JACKPLAY(1)                                        SNDFILE-JACKPLAY(1)&lt;br /&gt;
&lt;br /&gt;
NAME&lt;br /&gt;
       sndfile-jackplay - play a sound file via the JACK sound server&lt;br /&gt;
&lt;br /&gt;
SYNOPSIS&lt;br /&gt;
       sndfile-jackplay file&lt;br /&gt;
&lt;br /&gt;
DESCRIPTION&lt;br /&gt;
       sndfile-jackplay  plays  the  specified  sound  file via the JACK sound&lt;br /&gt;
       server.  It uses libsndfile  (http://www.mega-nerd.com/libsndfile/)  to&lt;br /&gt;
       read the file.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sndfile-jackplay prova.wav &lt;br /&gt;
jack_client_new: deprecated&lt;br /&gt;
Channels    : 1&lt;br /&gt;
Sample rate : 44100 Hz&lt;br /&gt;
Duration    : 00:11.35&lt;br /&gt;
Cannot connect output port 0 (alsa_pcm:playback_1).&lt;br /&gt;
-&amp;gt; 00:11.33&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Descarrego el codi font (sndfile-tools-1.03.tar.gz) per tal de poder modificar el codi font de sndfile-jackplay (/home/joan/sndfile-tools-1.03/src/sndfile-jackplay.c)&lt;br /&gt;
&lt;br /&gt;
El primer que he de fer és compilar el projecte:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ cd /home/joan/sndfile-tools-1.03/src/&lt;br /&gt;
$ ./cofigure&lt;br /&gt;
$ make&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Reanomeno a sndfile-jackplay_v2.c i compilo: (l'únic canvi que faig en el codi font és &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;quot;src/config.h&amp;quot;&lt;br /&gt;
per&lt;br /&gt;
#include &amp;quot;config.h&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ gcc -D jack -o sndfile-jackplay_v2 `pkg-config --cflags --libs jack` -lsndfile sndfile-jackplay_v2.c&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
o bé més curt:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ gcc -o sndfile-jackplay_v2  -ljack -lsndfile sndfile-jackplay_v2.c&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ ./sndfile-jackplay_v2 ~/prova.wav &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Autor}}, febrer 2012&lt;/div&gt;</summary>
		<author><name>Joan</name></author>
		
	</entry>
</feed>