novel2audio/novel2audio.py
2014-06-21 14:01:37 +02:00

73 lines
2.5 KiB
Python

#!/usr/bin/python
# -*- coding: utf-8 -*-
from re import split, sub
from sys import argv
from os import getcwd
f = open(argv[1], "r")
stuff = list()
pagenum = 1
for line in f:
if line == "%d\n"%pagenum:
pagenum+=1
elif line.strip() != "":
stuff.append(line.strip()) # replace newlines with spaces
stuff = " ".join(stuff)
stuff = sub(r"(\d)\s(\d)", r"\1\2", stuff) # remove whitespaces between digits
stuff = stuff.replace("'", "'\"'\"'")
stuff = split(r"(».+?«)", stuff)
if len(stuff) == 1:
stuff = split(r"(„.+?“)", stuff[0])
if len(stuff) == 1:
stuff = split(r"(\".+?\")", stuff[0])
if len(stuff) == 1:
print "can't split"
exit(1)
processes = list()
tempdir="/dev/shm"
cwd=getcwd()
i = 0
for s in stuff:
s = s.strip(', ')
if len(s) == 0:
continue
if s.startswith('»') and s.endswith('«') or s.startswith('') and s.endswith('') or s.startswith('"') and s.endswith('"'):
print "wine sapi2wav.exe %s/%04d.wav 3 -t '%s'"%(tempdir, i, s)
else:
print "wine sapi2wav.exe %s/%04d.wav 2 -t '%s'"%(tempdir, i, s)
i+=1
print "ln -s %s/silence.wav %s/%04d.wav"%(cwd,tempdir,i)
i+=1
#python novel2audio.py novel.txt | ./parallel.sh
#./concatenate_wav.sh [0-9]*.wav | python stride.py | oggenc --quality 0 --raw --raw-bits 16 --raw-chan 1 --raw-rate 22050 - > out.ogg
#./concatenate_wav.sh [0-9]*.wav | python stride.py | sox --type raw --rate 22050 --encoding signed-integer --bits 16 --channels 1 - --rate 22050 --comment "" --compression 0 out.ogg tempo -s 2.0
# the stride of 2 is used because the bytes in the input wav
# files are of the form ABABCDCDEFEFGHGH
# since the input is 44100Hz, remove every 2nd byte tuple and output 22050Hz
# sox can also downsample but it easily converts
# 00000000 to 0100 or to FFFF
# using ./stride is also twice as fast as having sox do the downsampling
#sudo mount -o remount,size=1200M /dev/shm
#rm -rf /dev/shm/[0-9]*.wav
#for f in ../Perry\ Rhodan\ Ebook\ Sammlung\ Komplett/txt/Perry\ Rhodan\ -\ Romanzyklus\ -\ 0300-0399\ -\ M\ 87/<365-399>*; do
# cat "$f" | tr '»' '"' | tr '«' '"' | tr "'" '"' > /tmp/out
# python novel2audio.py "/tmp/out" | /usr/bin/time xargs --delimiter='\n' --max-args=1 --max-procs=4 -I '{}' sh -c '{} > /dev/null'
# ./concatenate_wav /dev/shm/[0-9]*.wav | ./stride | sox --show-progress --type raw --rate 22050 --encoding signed-integer --bits 16 --channels 1 - --rate 22050 --comment "" --compression 0 "`basename \"$f\" .txt`.ogg" tempo -s 2.0
# rm /dev/shm/[0-9]*.wav
#done