Compare commits

...

3 Commits

Author SHA1 Message Date
tth
a693302969 boilerplate in progress 2022-02-07 23:17:22 +01:00
tth
f442fde5ff a not so nacked home page 2022-02-07 21:16:56 +01:00
tth
b7fdfa6122 void import 2022-02-07 16:20:42 +01:00
15 changed files with 470 additions and 1 deletions

21
Fraktalism/README.md Normal file
View File

@ -0,0 +1,21 @@
# Fraktalism
## Iterative computing inside !
Voyons d'abord
[une vidéo](http://la.buvette.org/fractales/f90/video.html)
qui montre ma première expérience dans ce domaine.
## La technique
Le gros des calculs de fractales est fait dans XXX, et la gestion
des pixels 'physiques' est fait dans YYY
Des scripts _shell_ sont utilisés pour construire les vidéos.
## TODO
- Voir de près le calcul du cadrage
- Rajouter des formules
- Ne pas procastiner

130
Fraktalism/mkmandel.f90 Normal file
View File

@ -0,0 +1,130 @@
!-----------------------------------------------------
! IMAGE PROCESSING
!-----------------------------------------------------
!-----------------------------------------------------
subroutine plotsomething(pic, start, cz)
use cmplxmath
use imagetools
implicit none
integer, intent(inout), dimension (:,:) :: pic
complex, intent(in) :: start
type (CenterMag), intent(in) :: cz
integer :: ix, iy, width, height
real :: fx, fy, mod2
complex :: za, zb, cste
integer :: iter, maxiter
logical :: escape
print *, "> plotsomething"
width = ubound(pic, 1)
height = ubound(pic, 2)
print *, " pic size ", width, height
print *, " start ", start
call print_centermag(cz)
! initialise constants
!
maxiter = 999;
! enter megaloop
!
do iy = 1, height
fy = (float(iy) / float(height/3)) - 1.5
!! print *, "line ", iy, fy
do ix = 1, width
fx = (float(ix) / float(width/3)) - 2.0
!! print *, "pixel ", ix, iy, " at ", fx, fy
!-------------------------------------
! working on the current pixel
za = start
cste = complex ( fx, fy )
iter = 0
escape = .FALSE.
do while (iter .lt. maxiter)
zb = (za * za) + cste
! if (modulus2(zb) .gt. 4.0) then
mod2 = real(zb)*real(zb) + aimag(zb)*aimag(zb)
!! print *, "mod2 ", mod2
if (mod2 .GT. 4.0) then
escape = .TRUE.
exit
endif
za = zb
iter = iter + 1
!! print *, "ZA ITER ESCAPE", za, iter, escape
enddo
if (escape) then
pic(ix, iy) = mod(iter, 333)
else
! esoteric computation here
! pic(ix, iy) = mod(8*floor(mod2*11.11), 24)
pic(ix, iy) = mod(iter, 222)
endif
!-------------------------------------
end do ! fin boucle sur X
end do
end
!-----------------------------------------------------
!
! this is the main programm
!
program image
use imagetools
implicit none
interface
subroutine plotsomething (pic, start, cz)
use imagetools
integer, intent(inout), dimension (:,:) :: pic
complex, intent(in) :: start
type (CenterMag), intent(in) :: cz
end subroutine plotsomething
end interface
integer, dimension(768, 768) :: picz
type (CenterMag) :: cm
integer :: angle
real :: radangle, radius
real :: stx, sty
character (len=80) :: filename
cm%cx = 0.0 ; cm%cy = 0.0 ; cm%mag = 3.0
picz = 0 ! clear screen
print *, "-------- making some mandelbrot -------"
do angle = 0, 1800
radangle = float(angle) * 0.017453292522222
radius = float(angle) / 2000.0
write (filename, "(a, i5.5, a)") "img/", angle, ".pnm"
! filename = trim(filename)
print *, "#### passe ", angle, radangle, trim(filename)
stx = radius * sin(radangle*4.0)
sty = radius * cos(radangle*3.0)
call plotsomething (picz, complex(stx, sty), cm)
call spitaspnm (picz, trim(filename))
print *
enddo
print *, "[DONE]"
end
!-----------------------------------------------------

View File

@ -1,3 +1,23 @@
# Fortraneries
Le fortran moderne, c'est quand même assez cool, alors autant diffuser mes gruikeries.
Le Fortran moderne, c'est quand même assez cool, alors autant diffuser
mes gruikeries.
J'ai découvert le Fortran moderne lors de mon reclufinement
de Janvier 2022, et j'ai bien aimé. Bon, contrairement à la
version de 77, les `GOTO`s sont moins agréables à faire, mais
l'existence des _pointeurs_ compense largement.
## content
- [SoundBrotching](SoundBrotching/) : faire gémir vos tympans
- [BloubWorld](BloubWorld/) : la vie des particules
- [Fraktalism](Fraktalism/) : du chaos dans les pixels
- [RandomStuff](RandomStuff) : on a tous droit à notre jardin secret
## hotline
- Le canal `#tetalab` sur le réseau IRC de
[Libera](https://libera.chat/)
- La [mailing-list publique](https://lists.tetalab.org/mailman/listinfo/tetalab) du Tetalab.

15
SoundBrotching/.gitignore vendored Normal file
View File

@ -0,0 +1,15 @@
#
# please ignore those files
#
*.wav
*.text
text2wav
wav2text
text2ao
panoramix
genwaves
soundbrotch

View File

@ -0,0 +1,46 @@
#
# tth@konrad:~/Devel/Fortraneries/SoundBrotching$
#
COPT = -Wall -Wextra -g -DDEBUG_LEVEL=1
all: text2wav wav2text text2ao \
panoramix genwaves
# ----------------------------------------------------------
#
# C tools
#
CLIBS = -lsndfile support.o
support.o: support.c Makefile support.h
gcc $(COPT) -c $<
text2wav: text2wav.c Makefile support.h support.o
gcc $(COPT) $< $(CLIBS) -o $@
wav2text: wav2text.c Makefile support.h support.o
gcc $(COPT) $< $(CLIBS) -o $@
text2ao: text2ao.c Makefile support.h support.o
gcc $(COPT) $< $(CLIBS) -o $@
# ----------------------------------------------------------
#
# real softwares
#
FLIBS = soundbrotch.o
soundbrotch.o: soundbrotch.f90 Makefile
gfortran $(COPT) -c $<
panoramix: panoramix.f90 Makefile $(FLIBS)
gfortran $(COPT) $< $(FLIBS) -o $@
genwaves: genwaves.f90 Makefile $(FLIBS)
gfortran $(COPT) $< $(FLIBS) -o $@
# ----------------------------------------------------------
# ----------------------------------------------------------

View File

@ -2,3 +2,10 @@
Stay tuned, film at 11.
## Cheat Code
Certains composants de ce sous-projet fortranique sont
(pour le moment)
ecrits en C, pour un accès facile à des bibliothèques tierces
comme `libsndfile`, composant essentiel du SoundBrotching.

8
SoundBrotching/demos.sh Executable file
View File

@ -0,0 +1,8 @@
#!/bin/bash
INWAV="1637.wav"
OUTWAV="foo.wav"
./wav2text $INWAV | ./panoramix | ./text2wav $OUTWAV

View File

@ -0,0 +1,15 @@
program genwaves
use soundbrotch
! -----------------------------
implicit none
print *, "genwaves is coming soon..."
call soundbrotch_version()
end program

View File

@ -0,0 +1,9 @@
program panoramix
implicit none
print *, "Panoramix coming soon..."
end program

View File

@ -0,0 +1,18 @@
module soundbrotch
implicit none
contains
! ---------------------------------------------------------
subroutine soundbrotch_version ()
write(0, '(A)') "*** this is soundbrotch version alpha"
end subroutine
! ---------------------------------------------------------
end module

31
SoundBrotching/support.c Normal file
View File

@ -0,0 +1,31 @@
/*
* C SUPPORT FUNCTIONS
*/
#include <stdio.h>
#include <stdlib.h>
#include <sndfile.h>
#include "support.h"
/* --------------------------------------------------------------- */
int display_sf_info(SF_INFO *psf, char *text)
{
fprintf(stderr, " +-- sf info [%s] %p\n", text, psf);
fprintf(stderr, " | samplerate %d\n", psf->samplerate);
fprintf(stderr, " | channels %d\n", psf->channels);
fprintf(stderr, " | frames %d\n", psf->frames);
return 0;
}
/* --------------------------------------------------------------- */
void print_version(char *msg)
{
fprintf(stderr, "======== %s === compiled %s, %s\n", \
msg, __DATE__, __TIME__);
}
/* --------------------------------------------------------------- */

13
SoundBrotching/support.h Normal file
View File

@ -0,0 +1,13 @@
/*
* C SUPPORT FUNCTIONS
*/
#define BUFFER_SIZE 8192
/* --------------------------------------------------------- */
int display_sf_info(SF_INFO *psf, char *text);
void print_version(char *title);
/* --------------------------------------------------------- */

21
SoundBrotching/text2ao.c Normal file
View File

@ -0,0 +1,21 @@
/*
* TEXT TO AUDIO OUTPUT
*/
#include <stdio.h>
#include <sndfile.h>
#include "support.h"
/* --------------------------------------------------------------- */
/* --------------------------------------------------------------- */
int main(int argc, char *argv[])
{
print_version(argv[0]);
return 0;
}
/* --------------------------------------------------------------- */

34
SoundBrotching/text2wav.c Normal file
View File

@ -0,0 +1,34 @@
/*
* TEXT TO WAV
*/
#include <stdio.h>
#include <stdlib.h>
#include <sndfile.h>
#include "support.h"
/* --------------------------------------------------------------- */
int convert_text_to_wav(char *outfname)
{
#if DEBUG_LEVEL
fprintf(stderr, ">>> %s ( '%s' )\n", __func__, outfname);
#endif
return -1;
}
/* --------------------------------------------------------------- */
int main(int argc, char *argv[])
{
print_version(argv[0]);
if (2 != argc) {
fprintf(stderr, "fubar\n");
exit(1);
}
return 0;
}
/* --------------------------------------------------------------- */

81
SoundBrotching/wav2text.c Normal file
View File

@ -0,0 +1,81 @@
/*
* WAV TO TEXT
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sndfile.h>
#include "support.h"
/* --------------------------------------------------------------- */
int convert_wav_to_text(char *infname)
{
SNDFILE * sndf;
SF_INFO sfinfo;
int foo, lu;
short * samples;
#if DEBUG_LEVEL
fprintf(stderr, ">>> %s ( '%s' )\n", __func__, infname);
#endif
memset(&sfinfo, 0, sizeof(sfinfo)); /* be clean */
sndf = sf_open(infname, SFM_READ, &sfinfo);
if (sndf==NULL)
{
/*catch the snfile errmsg here XXX */
fprintf(stderr, "error sf_opening %s\n", infname);
exit(1);
}
foo = display_sf_info(&sfinfo, "why not ?");
if (foo) {
fprintf(stderr, "%s: corrupted sf_info ?\n", __func__);
abort();
}
/* get memory for bufferins read from sound file */
if ( NULL == (samples = malloc(BUFFER_SIZE*sizeof(short))) )
{
perror("\n no memory in converter");
abort();
}
while ( (lu=sf_read_short(sndf, samples, BUFFER_SIZE)) > 0 )
{
fprintf(stderr, " LU = %5lu\n", lu);
}
/*
* job done, some cleanup
*/
free(samples);
return -1;
}
/* --------------------------------------------------------------- */
void usage(void)
{
printf("usage:\n\twav2txt 1337.wav\n");
exit(0);
}
/* --------------------------------------------------------------- */
int main(int argc, char *argv[])
{
int foo;
print_version(argv[0]);
if (2 != argc) usage();
foo = convert_wav_to_text(argv[1]);
fprintf(stderr, "got a %d from converter\n", foo);
return 0;
}
/* --------------------------------------------------------------- */