README.md 5.78 KB
Newer Older
Nadir Dalla Pozza's avatar
Nadir Dalla Pozza committed
1
# Packager
Niccolò Pretto's avatar
Niccolò Pretto committed
2

Nadir Dalla Pozza's avatar
Nadir Dalla Pozza committed
3
4
5
6
## Description
Implements the Technical Specification of [MPAI CAE-ARP](https://mpai.community/standards/mpai-cae/about-mpai-cae/#Figure2) *Tape Audio Restoration* AIM, providing:
* Restored Audio Files;
* Editing List.
Niccolò Pretto's avatar
Niccolò Pretto committed
7
8

## Getting started
Nadir Dalla Pozza's avatar
Nadir Dalla Pozza committed
9
The *Tape Audio Restoration* is written in Python 3.9 which is therefore required to run the program.
Niccolò Pretto's avatar
Niccolò Pretto committed
10

Nadir Dalla Pozza's avatar
Nadir Dalla Pozza committed
11
12
## Installation
[PyYaml](https://pyyaml.org) is required for reading the configuration file. You can install it with:
Niccolò Pretto's avatar
Niccolò Pretto committed
13
```
Nadir Dalla Pozza's avatar
Nadir Dalla Pozza committed
14
15
16
17
18
19
20
21
22
23
pip install pyyaml
```
[NumPy](https://numpy.org) and [SciPy](https://scipy.org) are required for correcting the audio of the Preservation Audio File. You can install them with:
```
pip install numpy
pip install scipy
```
Finally, [Matplotlib](https://matplotlib.org) is required for (optionally) plotting the frequency responses of the filters. You can install it with:
```
pip install matplotlib
Niccolò Pretto's avatar
Niccolò Pretto committed
24
25
```

Nadir Dalla Pozza's avatar
Nadir Dalla Pozza committed
26
27
28
29
You can also use `requirements.txt` file to install all needed dependencies at once:
```
pip install -r requirements.txt
```
Niccolò Pretto's avatar
Niccolò Pretto committed
30

Nadir Dalla Pozza's avatar
Nadir Dalla Pozza committed
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
## Usage
Once the libraries are installed, you should customise the configuration file `config.yaml`.
There are nine required parameters:
1. `WORKING_PATH` that specifies the working path where all input files are stored and where all output files will be saved;
2. `PRESERVATION_FILE_NAME` that specifies the name of the Preservation Audio File to be considered. Use an empty string 
to plot filter frequency response;
3. `STANDARD_W` that specifies the equalisation standard used to record the tape;
4. `SPEED_W` that specifies the speed used when recording the tape;
5. `STANDARD_R` that specifies the equalisation standard used to read the tape;
6. `SPEED_R` that specifies the speed used when reading the tape;
7. `FS` that specifies the sampling frequency to be used for the filters and the impulse responses.
This parameter won't be considered if `PRESERVATION_FILE_NAME` parameter is not an empty string;
8. `BPS` that specifies the bits-per-sample to be used when saving the filter impulse response as WAV;
9. `PLOTS` that specifies if the plots of the frequency response should be shown.

To execute the script without issues, the inner structure of the `WORKING_PATH` directory shall be like:
```
.
├── AccessCopyFiles
│   └── ...
├── PreservationAudioFile
│   ├── File1.wav
│   ├── File2.wav
│   └── ...
├── PreservationAudioVisualFile
│   ├── File1.mp4
│   ├── File2.mp4
│   └── ...
├── PreservationMasterFiles
│   └── ...
└── temp
    ├── File1
    │   ├── AudioAnalyser_IrregullarityFileOutput1.json
    │   ├── AudioAnalyser_IrregullarityFileOutput2.json
    │   ├── AudioBlocks
    │   │   ├── AudioBlock1.jpg
    │   │   ├── AudioBlock2.jpg
    │   │   └── ...
    │   ├── EditingList.json
    │   ├── IrregularityImages
    │   │   ├── IrregularityImage1.jpg
    │   │   ├── IrregularityImage2.jpg
    │   │   └── ...
    │   ├── RestoredAudioFiles
    │   │   ├── RestoredAudioFile1.wav
    │   │   ├── RestoredAudioFile2.wav
    │   │   └── ...
    │   ├── TapeIrregularityClassifier_IrregularityFileOutput1.json
    │   ├── TapeIrregularityClassifier_IrregularityFileOutput2.json
    │   ├── VideoAnalyser_IrregularityFileOutput1.json
    │   └── VideoAnalyser_IrregularityFileOutput2.json
    ├── File2
    │   ├── AudioAnalyser_IrregullarityFileOutput1.json
    │   ├── AudioAnalyser_IrregullarityFileOutput2.json
    │   ├── AudioBlocks
    │   │   ├── AudioBlock1.jpg
    │   │   ├── AudioBlock2.jpg
    │   │   └── ...
    │   ├── EditingList.json
    │   ├── IrregularityImages
    │   │   ├── IrregularityImage1.jpg
    │   │   ├── IrregularityImage2.jpg
    │   │   └── ...
    │   ├── RestoredAudioFiles
    │   │   ├── RestoredAudioFile1.wav
    │   │   ├── RestoredAudioFile2.wav
    │   │   └── ...
    │   ├── TapeIrregularityClassifier_IrregularityFileOutput1.json
    │   ├── TapeIrregularityClassifier_IrregularityFileOutput2.json
    │   ├── VideoAnalyser_IrregularityFileOutput1.json
    │   └── VideoAnalyser_IrregularityFileOutput2.json
    └── ...
```
`PreservationAudioFile` and `PreservationAudioVisualFile` directories contain the input of ARP Workflow, while `AccessCopyFiles` and `PreservationMasterFiles` directories contain its output. `temp` directory is used to store all files exchanged between the AIMs within the Workflow.
Niccolò Pretto's avatar
Niccolò Pretto committed
105

Nadir Dalla Pozza's avatar
Nadir Dalla Pozza committed
106
107
108
Please note that:
* Corresponding input files shall present the same name;
* The name of Irregularity Files given above is ***mandatory***.
Niccolò Pretto's avatar
Niccolò Pretto committed
109

Nadir Dalla Pozza's avatar
Nadir Dalla Pozza committed
110
With this structure, `PRESERVATION_FILE_NAME` parameter could be equal to `File1` or `File2`.
Niccolò Pretto's avatar
Niccolò Pretto committed
111

Nadir Dalla Pozza's avatar
Nadir Dalla Pozza committed
112
113
114
115
116
You can now launch the *Tape Audio Restoration* from the command line with:
```
python3 main.py
```
Useful log information will be displayed during execution, requiring occasional interaction.
Niccolò Pretto's avatar
Niccolò Pretto committed
117
118

## Support
Nadir Dalla Pozza's avatar
Nadir Dalla Pozza committed
119
120
121
If you require additional information or have any problem, you can contact us at:
* Nadir Dalla Pozza (nadir.dallapozza@unipd.it);
* Niccolò Pretto (niccolo.pretto@unipd.it).
Niccolò Pretto's avatar
Niccolò Pretto committed
122

Nadir Dalla Pozza's avatar
Nadir Dalla Pozza committed
123
124
125
126
127
## Authors and acknowledgment
This project was developed by:
* Nadir Dalla Pozza (University of Padova);
* Niccolò Pretto (University of Padova);
* Sergio Canazza (University of Padova).
Niccolò Pretto's avatar
Niccolò Pretto committed
128

Nadir Dalla Pozza's avatar
Nadir Dalla Pozza committed
129
130
131
132
133
This project takes advantage of the following libraries:
* [Matplotlib](https://matplotlib.org);
* [NumPy](https://numpy.org);
* [PyYaml](https://pyyaml.org);
* [SciPy](https://scipy.org).
Niccolò Pretto's avatar
Niccolò Pretto committed
134

Nadir Dalla Pozza's avatar
Nadir Dalla Pozza committed
135
Developed with Python IDE [PyCharm Community](https://www.jetbrains.com/pycharm/).
Niccolò Pretto's avatar
Niccolò Pretto committed
136
137

## License
Nadir Dalla Pozza's avatar
Nadir Dalla Pozza committed
138
This project is licensed with [GNU GPL v3.0](https://www.gnu.org/licenses/gpl-3.0.html).