Jplay-sndfile

De Wikijoan
Dreceres ràpides: navegació, cerca

Contingut

Introducció

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.

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

Treballs previs

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).

Desenvolupament

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).

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:

  1. readWav.c. M'ensenya com llegir un fitxer wav i ficar totes les mostres en un buffer
  2. 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.

La idea que es desenvolupa i que es pot anar seguint en les diferents versions del projecte és:

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.

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).

Per compilar: (l'únic fitxer que s'ha de copiar a la carpeta del projecte és sndfile-tools-1.03/src/config.h)

$ cd /home/joan/projectes/jplay-sndfile
Codi C:
$ gcc -o jplay-sndfile  -ljack -lsndfile jplay-sndfile-0.0.1.c
Codi C++
$ g++ -o jplay-sndfile  -ljack -lsndfile jplay-sndfile-1.0.0.cpp

Per executar:

$ ./jplay-sndfile samples/hellosine.wav 
numFrames: 120000
Channels: 1
Sample rate : 44100 Hz
Length: 2.721088s
Duration: 00:02.72
$ jplay-sndfile -h

jplay-sndfile 1.00
Created by Joan Quintana Compte (joanillo)
joanqc arroba gmail.com - www.joanillo.org
Licensed under GPL v.3

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.
This Jack Audio client connects automatically to system:playback_1 and system:playback_2

usage: jplay-sndfile [-h] [[pitch-shift] | [pitch-shift-start pitch-shift-end]] <wav-file>

	-h --help: this usage information
	[pitch-shift] (0.5,2): shifting pitch
	[pitch-shift-start] (0.5,2): shifting pitch start range
	[pitch-shift-end] (0.5,2): shifting pitch end range
	<wav file>: mono channel audio file
	

	Examples:
	./jplay_sndfile samples/hellosine.wav
	./jplay_sndfile 0.65 samples/hellosine.wav
	./jplay_sndfile 0.5 2 samples/hellosine.wav

Càlculs

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).

Download

Blog


creat per Joan Quintana Compte, febrer 2012

Eines de l'usuari
Espais de noms
Variants
Accions
Navegació
Institut Jaume Balmes
Màquines recreatives
CNC
Informàtica musical
joanillo.org Planet
Eines