diff --git a/SoundBrotching/.gitignore b/SoundBrotching/.gitignore index 4cc5eb5..70d02e9 100644 --- a/SoundBrotching/.gitignore +++ b/SoundBrotching/.gitignore @@ -9,6 +9,7 @@ text2wav wav2text text2ao +essai panoramix genwaves diff --git a/SoundBrotching/Makefile b/SoundBrotching/Makefile index ec1e544..feee204 100644 --- a/SoundBrotching/Makefile +++ b/SoundBrotching/Makefile @@ -4,7 +4,7 @@ GOPT = -Wall -Wextra -time -g -all: panoramix genwaves +all: panoramix genwaves essai # ---------------------------------------------------------- # @@ -16,6 +16,10 @@ FLIBS = soundbrotch.o soundbrotch.o: soundbrotch.f90 Makefile gfortran $(GOPT) -c $< +# some test... +essai: essai.f90 Makefile $(FLIBS) + gfortran $(GOPT) $< $(FLIBS) -o $@ + # main proggies panoramix: panoramix.f90 Makefile $(FLIBS) gfortran $(GOPT) $< $(FLIBS) -o $@ diff --git a/SoundBrotching/demos.sh b/SoundBrotching/demos.sh index c611180..0b12e0d 100755 --- a/SoundBrotching/demos.sh +++ b/SoundBrotching/demos.sh @@ -8,7 +8,7 @@ DATAFILE="waves.text" OUTWAV="quux.wav" -./genwaves | ./panoramix | tee $DATAFILE | c-tools/text2wav $OUTWAV +./genwaves | tee $DATAFILE | c-tools/text2wav $OUTWAV sndfile-spectrogram \ --min-freq=30 --max-freq=4000 \ diff --git a/SoundBrotching/essai.f90 b/SoundBrotching/essai.f90 new file mode 100644 index 0000000..8e135f3 --- /dev/null +++ b/SoundBrotching/essai.f90 @@ -0,0 +1,21 @@ +program essai + + use soundbrotch + ! ----------------------------- + implicit none + + integer :: n + real :: freq + + write(0, *) "*** On essaye des trucs (shotgun!) ***" + + call soundbrotch_version() + + do n = 20, 85 + freq = midi2freq(n) + write(0, '(12X, I5, 5X, F9.3)') n, freq + call sinw_burst2i(6, 22000, freq, freq, 0.9) + call silence_burst2i(800) + end do + +end program diff --git a/SoundBrotching/genwaves.f90 b/SoundBrotching/genwaves.f90 index 40be546..dfde686 100644 --- a/SoundBrotching/genwaves.f90 +++ b/SoundBrotching/genwaves.f90 @@ -11,12 +11,13 @@ program genwaves write(0, *) "*** Genwaves ***" call soundbrotch_version() - do clock = 1, 8 + do clock = 1, 11 fleft = real(100 * clock) - fright = real(150 * clock) + fright = real(116 * clock) write(0, '(1X,I8, 9X, F8.2, 6X, F8.2)') clock, fleft, fright - call sinw_burst2i(6, 4800, fleft, fright, 0.7) - enddo + call sinw_burst2i(6, 23200, fleft, fright, 0.7) + enddo + call silence_burst2i(1337) end program diff --git a/SoundBrotching/panoramix.f90 b/SoundBrotching/panoramix.f90 index baab225..635066c 100644 --- a/SoundBrotching/panoramix.f90 +++ b/SoundBrotching/panoramix.f90 @@ -21,11 +21,11 @@ program panoramix endif ! *** NON WORKING CODE *** - phi = real(nblus) / 60000.0 + phi = real(nblus) / 44100.0 ka = sin(phi) value = (real(left)+real(right)) / 2.05 - left = int(value*ka) - right = int(value*(1.0-ka)) + left = int(value * ka) + right = int(value * (1.0-ka)) print *, left, right diff --git a/SoundBrotching/soundbrotch.f90 b/SoundBrotching/soundbrotch.f90 index 48bf994..1b50f36 100644 --- a/SoundBrotching/soundbrotch.f90 +++ b/SoundBrotching/soundbrotch.f90 @@ -7,12 +7,19 @@ module soundbrotch integer :: right end type ! --------------------------------------------------------- + ! some private variables + + integer, private :: samplerate = 48000 + real, private :: diapason = 440.0 contains ! --------------------------------------------------------- - subroutine soundbrotch_version () write(0, '(1X,A)') "--- this is soundbrotch version alpha 666" + write(0, *) "--- samplerate", samplerate + write(0, *) "--- diapason ", diapason end subroutine + ! --------------------------------------------------------- + ! --------------------------------------------------------- ! --------------------------------------------------------- ! premier essai, le prototype peut changer ! @@ -25,31 +32,55 @@ module soundbrotch integer :: idx, left, right real :: coef - integer, save :: oldl=0, oldr=0 - coef = (3.141592654 * 2.0) / 44.1e3 + if (dst .NE. 6) then + STOP ' OUPS!' + endif + + coef = (3.141592654 * 2.0) / real(samplerate) do idx=0, numbs left = INT(32e3 * level * sin(coef*real(idx)*fra)) - left = (left + oldl) / 2 right = INT(32e3 * level * sin(coef*real(idx)*frb)) - right = (right + oldr) / 2 - print *, left, right - oldl = left - oldr = right - enddo - ! add silence at the end of the burst - left = 0 - right = 0 - do idx=0, numbs/3 - left = (left + oldl) / 2 - right = (right + oldr) / 2 - print *, 0, 0 - oldl = left - oldr = right + call xper_spit_2i(left, right) enddo end subroutine ! --------------------------------------------------------- + ! mmmm ? + subroutine silence_burst2i(nbsmpl) + integer, intent(in) :: nbsmpl + integer :: idx + do idx=0, nbsmpl + call xper_spit_2i(0, 0) + enddo + end subroutine + ! --------------------------------------------------------- + ! mmmm ? + subroutine xper_spit_2i(lsmpl, rsmpl) + integer, intent(in) :: lsmpl, rsmpl + integer, save :: oldl, oldr + integer :: tmpl, tmpr + tmpl = (lsmpl + oldl) / 2 + tmpr = (rsmpl + oldr) / 2 + print *, tmpl, tmpr + oldl = tmpl + oldr = tmpr + + end subroutine + ! --------------------------------------------------------- + ! + function midi2freq(note) + integer, intent(in) :: note + real :: midi2freq + + real :: freq + + freq = (DIAPASON/32.0) * (2.0 ** (real(note - 9) / 12.0)); + ! write(0, *) "> ", note, freq + + midi2freq = freq + + end function end module