v0.0.1
This commit is contained in:
parent
8803047980
commit
eb91e1f684
23
README.md
23
README.md
@ -1,3 +1,26 @@
|
|||||||
# logstreamer
|
# logstreamer
|
||||||
|
|
||||||
LogStreamer est un logiciel permettant la diffusion sonore d'un fichier via un serveur Icecast
|
LogStreamer est un logiciel permettant la diffusion sonore d'un fichier via un serveur Icecast
|
||||||
|
|
||||||
|
|
||||||
|
## Prérequis
|
||||||
|
|
||||||
|
* python3
|
||||||
|
* pigtail
|
||||||
|
```
|
||||||
|
pip3 install pigtail
|
||||||
|
```
|
||||||
|
|
||||||
|
## Utilisation
|
||||||
|
|
||||||
|
* Ajuster les valeurs des constantes LOG et WAV_OUTPUT en fonction des besoins
|
||||||
|
* LOG: Le log à jouer
|
||||||
|
* WAV_OUTPUT: Le fichier wav de sortie
|
||||||
|
* MAX_DURATION: La durée maximale d'une note
|
||||||
|
* EXCLUDE: Les caractères dont les valeurs sont ajoutées à cette liste ne seront pas traités
|
||||||
|
* Exécuter ```python3 logstreamer.py```
|
||||||
|
* Lire le fichier wav résultant avec un lecteur audio supportant le format wav
|
||||||
|
|
||||||
|
## TODO
|
||||||
|
|
||||||
|
* Gérer la diffusion vers un serveur Icecast avec ```python-shout```
|
||||||
|
75
logstreamer.py
Executable file
75
logstreamer.py
Executable file
@ -0,0 +1,75 @@
|
|||||||
|
#!/bin/env python3
|
||||||
|
|
||||||
|
"""
|
||||||
|
# Prérequis
|
||||||
|
|
||||||
|
* python3
|
||||||
|
* pigtail
|
||||||
|
```
|
||||||
|
pip3 install pigtail
|
||||||
|
```
|
||||||
|
|
||||||
|
# Utilisation
|
||||||
|
|
||||||
|
* Ajuster les valeurs des constantes LOG et WAV_OUTPUT en fonction des besoins
|
||||||
|
* LOG: Le log à jouer
|
||||||
|
* WAV_OUTPUT: Le fichier wav de sortie
|
||||||
|
* MAX_DURATION: La durée maximale d'une note
|
||||||
|
* EXCLUDE: Les caractères dont les valeurs sont ajoutées à cette liste ne seront pas traités
|
||||||
|
* Exécuter python3 text2wav.py
|
||||||
|
* Lire le fichier wav résultant avec un lecteur audio supportant le format wav
|
||||||
|
|
||||||
|
"""
|
||||||
|
import wave
|
||||||
|
import math
|
||||||
|
import struct
|
||||||
|
import random
|
||||||
|
from pygtail import Pygtail
|
||||||
|
|
||||||
|
LOG = '/var/log/httpd/access_log'
|
||||||
|
WAV_OUTPUT = '/home/doug/test/test.wav'
|
||||||
|
MAX_DURATION = 0.08
|
||||||
|
EXCLUDE = []
|
||||||
|
|
||||||
|
def sine_wave(frequency=444, framerate=44100, amplitude=0.5, duration=1):
|
||||||
|
"""
|
||||||
|
frequency: La fréquence à échantillonner
|
||||||
|
framerate: Le taux d'échantillonnage
|
||||||
|
amplitude: Le volume sonore (de 0 à 1)
|
||||||
|
duration: La durée de l'échantillon en seconde
|
||||||
|
"""
|
||||||
|
amplitude = amplitude * 32767
|
||||||
|
if amplitude > 32767:
|
||||||
|
amplitude = 32767
|
||||||
|
elif amplitude < 0:
|
||||||
|
amplitude = 0
|
||||||
|
|
||||||
|
data = []
|
||||||
|
for i in range(int(duration * framerate)):
|
||||||
|
value = int(amplitude*math.cos(2*frequency*math.pi*float(i)/float(framerate)))
|
||||||
|
data.append(value)
|
||||||
|
return struct.pack('<{}h'.format(len(data)), *data)
|
||||||
|
|
||||||
|
def notes_table(oord):
|
||||||
|
freq = math.floor(math.log(oord)*5000-20000)
|
||||||
|
duration = MAX_DURATION
|
||||||
|
return (freq, duration)
|
||||||
|
|
||||||
|
with wave.open(WAV_OUTPUT, 'wb') as wave_file:
|
||||||
|
nchannels = 1
|
||||||
|
sampwidth = 2
|
||||||
|
framerate = 44100
|
||||||
|
wave_file.setnchannels(nchannels)
|
||||||
|
wave_file.setsampwidth(sampwidth)
|
||||||
|
wave_file.setframerate(framerate)
|
||||||
|
|
||||||
|
try:
|
||||||
|
for line in Pygtail(LOG):
|
||||||
|
for letter in line:
|
||||||
|
oord = ord(letter)
|
||||||
|
freq, duration = notes_table(oord)
|
||||||
|
if oord not in EXCLUDE:
|
||||||
|
print("Caractère: {} | Ord: {} | Fréquence: {} | Durée: {}".format(letter, oord, freq, duration))
|
||||||
|
wave_file.writeframes(sine_wave(frequency=freq, duration=duration))
|
||||||
|
except Exception as e:
|
||||||
|
print('\033[91m{}\033[0m'.format(e))
|
Loading…
Reference in New Issue
Block a user