2 Commits

Author SHA1 Message Date
db71b3503a maj141124 2024-11-14 10:27:21 +01:00
9da416b519 unmessageentreguillemet 2024-10-14 13:29:50 +02:00
13 changed files with 50 additions and 132 deletions

View File

@@ -1 +1,14 @@
git repo for Vivien Perrot
# git repo for art num
*the wiki will be updated with more information and usefull snipet. fell free to contribute*
test port ssh
## how to
1. clone this repo to you own computer
` git clone https://git.erg.school/P039/art_num_2024.git`
2. check before eatch courses for update
` git pull `
## content

1
arduino/README.md Normal file
View File

@@ -0,0 +1 @@
git repo for art num

1
bash/README.md Normal file
View File

@@ -0,0 +1 @@
git repo for art num

View File

@@ -1,4 +0,0 @@
# Un système UPIC pour un orchestre de gravures
C'est un projet prenant pour source de création des gravures faites avec la technique d'eau forte sur plaque de zinc. Il inclut la transcription visuelle dans le champ sonore fréquentiel dont le mouvement du dessin fixe va altérer le comportement sonore dans le temps.

View File

@@ -1,26 +0,0 @@
import cv2
import math
ring = cv2.imread('../circular.png')
size = ring.shape[0]
outer_radius = size // 2
inner_radius = 0
unwrapped = cv2.warpPolar(
ring,
(size, int(size * math.pi)),
(outer_radius, outer_radius),
outer_radius,
flags = 0
)
unwrapped = cv2.rotate(unwrapped, cv2.ROTATE_90_COUNTERCLOCKWISE)
unwrapped = unwrapped[inner_radius:, :]
cv2.imshow("original", ring)
cv2.imshow("Unwrapped", unwrapped)
cv2.waitKey(0)
cv2.destroyAllWindows()
cv2.imwrite("output.png", unwrapped)

Binary file not shown.

Before

Width:  |  Height:  |  Size: 64 MiB

View File

@@ -1,101 +0,0 @@
from tqdm import tqdm
from scipy.ndimage import uniform_filter1d
from scipy.io.wavfile import write
import math, cv2, sys, getopt, wave
import numpy as np
def unwrap_img(input_file):
ring_img = cv2.imread(input_file)
size = ring_img.shape[0]
outer_radius = size // 2
inner_radius = 0
unwrapped_img = cv2.warpPolar(
ring_img,
(size, int(size * math.pi)),
(outer_radius, outer_radius),
outer_radius,
flags=0
)
rotated_unwrapped = cv2.rotate(unwrapped_img, cv2.ROTATE_90_COUNTERCLOCKWISE)
cropped_unwrapped = rotated_unwrapped[inner_radius:, :]
inverted_unwrapped = cv2.bitwise_not(cropped_unwrapped)
return inverted_unwrapped
def image_to_audio(input_img, out_wav, duration_seconds, sample_rate, vertical_res, amp_threshold):
max_freq = 10000
min_freq = 50
duration_seconds = float(duration_seconds)
# Downsample image vertically to reduce number of frequencies
input_img = input_img[::vertical_res] # Use one row every 20 pixels
height, width, _ = input_img.shape
num_samples = int(sample_rate * duration_seconds)
freqs = np.logspace(np.log10(min_freq), np.log10(max_freq), height)[::-1]
brightness = np.mean(input_img / 255.0, axis=2)
amplitudes = np.where(brightness >= 0.1, brightness, 0)
samples = np.zeros(num_samples, dtype=np.float32)
chunk_size = 10000
for start in tqdm(range(0, num_samples, chunk_size)):
end = min(start + chunk_size, num_samples)
t = np.linspace(start / sample_rate, end / sample_rate, end - start)
pixel_xs = (t * width / duration_seconds).astype(int)
pixel_xs = np.clip(pixel_xs, 0, width - 1)
amp_per_sample = amplitudes[:, pixel_xs]
amp_per_sample[amp_per_sample < amp_threshold] = 0
amp_per_sample = uniform_filter1d(amp_per_sample, size=7, axis=1) # Smooth
phases = 2 * np.pi * freqs[:, None] * t[None, :]
active = np.count_nonzero(amp_per_sample, axis=0)
chunk = np.sum(amp_per_sample * np.sin(phases), axis=0)
# Normalize chunk by number of active oscillators to avoid "snow"
chunk = np.where(active > 0, chunk / active, 0)
samples[start:end] = chunk
# Final normalization
samples /= np.max(np.abs(samples) + 1e-8)
# Convert to int16 for wav
wav_samples = (samples * 32767).astype(np.int16)
write(out_wav, sample_rate, wav_samples)
print(f"Audio saved to {out_wav}")
if __name__ == '__main__':
input_file = ''
output_file = ''
duration = 10
try:
opts, args = getopt.getopt(sys.argv[1:], "hi:o:d:yRes:thresh:")
except getopt.GetoptError:
print('error: img_to_freq.py -i <input_picture> -o <output_sound> -d <audio_duration>')
for opt, arg in opts:
if opt == '-h':
print('error: img_to_freq.py -i <input_picture> -o <output_sound> -d <audio_duration>')
sys.exit(2)
elif opt == '-i':
input_file = arg
elif opt == '-o':
output_file = arg
elif opt == '-d':
duration = arg
unwrapped_img = unwrap_img(input_file)
cv2.imwrite('output.png', unwrapped_img)
image_to_audio(unwrapped_img, output_file, duration, 44100, 20, 0.1)

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 MiB

1
python/README.md Normal file
View File

@@ -0,0 +1 @@
git repo for art num

1
references/README.md Normal file
View File

@@ -0,0 +1 @@
git repo for art num

View File

@@ -0,0 +1,31 @@
# artistic ref : usage de python
## [Computational Poems : Les deux, Nick Montfort](https://nickm.com/2/les_deux.html)
- US digital artist / chercheur
- générateur de poème online dynamique (javascript)
- poème multilangue (fr, esp, cn) => dispositif de traduction (js)
## [The Great Netfix, *Ritasdatter & Gansing*](http://netflix.lnd4.net/)
*a video store after the end of the world*
- notion de de-clouding : proposition speculative de redistribution de la “cloub-base” contemporaine
- activité de **scraping** de film Netflix via VPN (utilitaire de deplacement immatérielle de la localisation du client) & enregistrement **VHS**
- dispositif rspi (WLAN) - tape recorder VHS
## [Videogrep, *Sam Lavigne* (2014)](https://antiboredom.github.io/videogrep/)
- python script that searches through dialog on videos and combine then in a flesh video
- e.g : condense toute les itération dune expression dune video originale
- visibilisation de normalisation dusage de stratégie marketing (element de langage) dans contexte politique -partisant-
- commande ligne tool / python module en libre acces sur archive github du project
```videogrep -- input path/to/vid.mp4 --search 'search phrase'```
## [Unerasable Characters, *Winnie Soon*](https://calls.ars.electronica.art/2023/prix/winners/7149/)
Prix Ars Electronica, 2023
- scraping data censurées/suprimées from Weibo (chinese social media == twitter)
- dispersion des ideogram dans matrice lumineuse physique
- concatenation de lensemble des caractère par machine learning (Tensor Flow) pour republication sur source (Weibo) et production dune édition physique

1
upython/README.md Normal file
View File

@@ -0,0 +1 @@
git repo for art num