<?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=Jplay-sndfile</id>
	<title>Jplay-sndfile - 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=Jplay-sndfile"/>
	<link rel="alternate" type="text/html" href="http://wiki.joanillo.org/index.php?title=Jplay-sndfile&amp;action=history"/>
	<updated>2026-08-30T08:44:36Z</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=Jplay-sndfile&amp;diff=248948&amp;oldid=prev</id>
		<title>Joan: /* Download */</title>
		<link rel="alternate" type="text/html" href="http://wiki.joanillo.org/index.php?title=Jplay-sndfile&amp;diff=248948&amp;oldid=prev"/>
		<updated>2012-02-24T09:42:46Z</updated>

		<summary type="html">&lt;p&gt;&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;Download&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;=Introducció=&lt;br /&gt;
Aquesta tecnologia és bàsica per poder desenvolupar [[Reconeixement_real_de_gestos_amb_la_wacom_i_síntesi_d'àudio]] i [[Històries_amb_la_Wacom]], i concretament els seus projectes/performances associats: [[Històries_amb_la_Wacom#Projectes]].&lt;br /&gt;
&lt;br /&gt;
Es tracta de treballar amb la llibreria '''libsndfile''' per tal de poder llegir les mostres d'un fitxer wav i posar-les en un buffer, i fer un playback de les mostres, alhora que es pot variar la freqüència i fer un escombrat de freqüències. És un projecte bàsicamente didàctic, en què un es pot trobar amb efectes com l' ''aliasing''&lt;br /&gt;
=Treballs previs=&lt;br /&gt;
Per aconseguir els efectes desitjats he fet proves amb la '''Synthesis ToolKit in C++ (STK)''', concretament una classe de síntesi granular. Funciona molt bé aquest toolkit, es poden aconseguir efectes interessants amb la classe Grain, però no veig que es puguin canviar els paràmetres de la síntesi granular a temps real i associar-los, per exemple, al moviment X,Y del ratolí. O sigui que he de canviar de llibreria. Crec que toolkit que sí que respondria a les espectatives de programació realtime d'audio i síntesi granular seria el projecte '''SuperCollider''' (TBD).&lt;br /&gt;
&lt;br /&gt;
=Desenvolupament=&lt;br /&gt;
Guardaré tots els fitxers del projecte a la carpeta ''projeces/jplay-sndfile'', i el projecte l'anomeno '''jplay-sndfile''' (jplay-sndfile-simple''' és la versió simplificada, només permet fer playback i té finalitats didàctiques).&lt;br /&gt;
&lt;br /&gt;
Bàsicament per fer el projecte em baso en la llibreria '''libsndfile'''. Aquesta és la llibreria bàsica per treballar amb fitxers wav (llegir i escriure). Ho tinc documentat a [[Libsndfile_library]]. Concretament el meu desenvolupament és una barreja de dos codis:&lt;br /&gt;
#readWav.c. M'ensenya com llegir un fitxer wav i ficar totes les mostres en un buffer&lt;br /&gt;
#sndfile-jackplay.c. És un exemple de les '''sndfile-tools''' (http://www.mega-nerd.com/libsndfile/tools/), concretament és un client de JACK que toca un fitxer wav, una altra tros de codi que jo necessito.&lt;br /&gt;
&lt;br /&gt;
La idea que es desenvolupa i que es pot anar seguint en les diferents versions del projecte és:&lt;br /&gt;
*volcar el contingut d'un fitxer wav a un buffer de memòria.&lt;br /&gt;
*després... el contingut del buffer de memòria volcar-lo sobre el port de sortida del client JACK, directament als ports d'entrada de system:playback_1 i _2.&lt;br /&gt;
*després... en comptes de fer tot el bolcat en bloc, fer el bolcat mostra a mostra.&lt;br /&gt;
*després... ara que sé treballar mostra a mostra, es pot modificar les mostres individuals, i així es pot aconseguir fer atenuació, amplificació o modulació del senyal.&lt;br /&gt;
*després... ara vull fer un canvi de pitch: més agut o més greu. Ara la cosa ja es complica, doncs no hi ha una equivalència entre mostres d'entrada i de sortida, sinó que m'he de menjar mostres (per fer un to més agut), o m'he d'inventar mostres (per fer un to més greu). Apareixen efectes d'aliasing.&lt;br /&gt;
*després... aconseguir parametritzar el canvi de pitch, de manera que es pugui aconseguir un canvi de pitch continu. Aquesta és la part difícil, doncs el canvi de l'amplitud del senyal és la part fàcil&lt;br /&gt;
*després... versió definitiva del projecte, v1.0.0. El mateix codi serveix per fer playback, per poder canviar la freqüència (amb un factor que va de .5 a 2), i poder fer un escombrat de freqüènices (també entre aquests factors).&lt;br /&gt;
&lt;br /&gt;
El desenvolupament es farà bàsicament amb un sinus (hellosine.wav), però també és interessant treballar amb altres mostres, mostres de veu, i mostres samplejades a diferents freqüències de mostreig.&lt;br /&gt;
&lt;br /&gt;
Tant per fer les mostres com per gravar la sortida de jplay-sndfile s'ha utilitzat jack_capture ([[Jack_capture#Exemple_pr.C3.A0ctic:_jplay-sndfile_.28febrer_2012.29]]).&lt;br /&gt;
&lt;br /&gt;
Per compilar: (l'únic fitxer que s'ha de copiar a la carpeta del projecte és sndfile-tools-1.03/src/config.h)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ cd /home/joan/projectes/jplay-sndfile&lt;br /&gt;
Codi C:&lt;br /&gt;
$ gcc -o jplay-sndfile  -ljack -lsndfile jplay-sndfile-0.0.1.c&lt;br /&gt;
Codi C++&lt;br /&gt;
$ g++ -o jplay-sndfile  -ljack -lsndfile jplay-sndfile-1.0.0.cpp&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Per executar:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ ./jplay-sndfile samples/hellosine.wav &lt;br /&gt;
numFrames: 120000&lt;br /&gt;
Channels: 1&lt;br /&gt;
Sample rate : 44100 Hz&lt;br /&gt;
Length: 2.721088s&lt;br /&gt;
Duration: 00:02.72&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ jplay-sndfile -h&lt;br /&gt;
&lt;br /&gt;
jplay-sndfile 1.00&lt;br /&gt;
Created by Joan Quintana Compte (joanillo)&lt;br /&gt;
joanqc arroba gmail.com - www.joanillo.org&lt;br /&gt;
Licensed under GPL v.3&lt;br /&gt;
&lt;br /&gt;
jplay-sndfile is a JACK client intended for playing audio files (wav) and pitch shifting, written basically for learning, testing and educational purposes, and the first stage for future developments. A part of playing an audio file, you can change the pitch (between *0.5 and *2) of your audio file, you can play the audio file combing the pitch between two ranges. For testing is useful a sine wave, but remember that you can use any mono (one channel) audio files.&lt;br /&gt;
This Jack Audio client connects automatically to system:playback_1 and system:playback_2&lt;br /&gt;
&lt;br /&gt;
usage: jplay-sndfile [-h] [[pitch-shift] | [pitch-shift-start pitch-shift-end]] &amp;lt;wav-file&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	-h --help: this usage information&lt;br /&gt;
	[pitch-shift] (0.5,2): shifting pitch&lt;br /&gt;
	[pitch-shift-start] (0.5,2): shifting pitch start range&lt;br /&gt;
	[pitch-shift-end] (0.5,2): shifting pitch end range&lt;br /&gt;
	&amp;lt;wav file&amp;gt;: mono channel audio file&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
	Examples:&lt;br /&gt;
	./jplay_sndfile samples/hellosine.wav&lt;br /&gt;
	./jplay_sndfile 0.65 samples/hellosine.wav&lt;br /&gt;
	./jplay_sndfile 0.5 2 samples/hellosine.wav&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
==Càlculs==&lt;br /&gt;
Ha sigut especialment difícil la part de calcular el que dura el playback quan hi ha escombrat de freqüències. Per fer-ho ben fet s'ha de recórrer al càlcul integral. Jo he fet un sumatori de 25 termes. Els sumands són de tipus 1/n i el sumatori final seria de tipus logarítmic. Veure càlculs apart. (Ficar fórmula final, TBD).&lt;br /&gt;
==Download==&lt;br /&gt;
*[[Fitxer:Jplay-sndfile-simple-1.0.0.tar.gz]] (versió simplificada. Només fa playback sense canvi de freqüència. Amb finalitat didàctica)&lt;br /&gt;
*[[Fitxer:Jplay-sndfile-1.0.0.tar.gz]]&lt;br /&gt;
&lt;br /&gt;
=Blog=&lt;br /&gt;
*entrada blog: http://www.joanillo.org/?p=588&amp;amp;lang=ca&lt;br /&gt;
&lt;br /&gt;
{{Autor}}, febrer 2012&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>