diff --git a/AUTHORS b/AUTHORS
index d749eb8fcf..759fbbde75 100644
--- a/AUTHORS
+++ b/AUTHORS
@@ -1,28 +1,40 @@
** Phraseanet is written and maintained by the Phraseanet Developer Team **
- Benoît Burnichon
- Jean-Yves Gaulier
- Andrey Kalinovsky
- Nicolas Legoff
- Romain Neutron
+ - Jean-Yves Gaulier
+ - Milos M
+ - Mike NG
+ - Xavier Rousset
+ - Aina Sitraka
+ - Filip Vilic
+
** Proudly Powered by Alchemy **
- Nicolas Amendola
- Nathanaël Attar
- Aurélie Bachelet
- Anthony Cabot
- Moctar Diouf
- Jennifer Guérin
- Nicolas Honoré
- Nicolas Maillat
- Guillaume Maubert
- Jonathan Schneider
+ - Aurélie Bachelet
+ - Laetitia Bianchi
+ - Anthony Cabot
+ - Moctar Diouf
+ - Jennifer Guérin
+ - Félix Noir
+ - Nicolas Maillat
+ - Guillaume Maubert
+
** They gave some love to Phraseanet **
- Ysoline Gresille
+ - Nicolas Amendola
+ - Nathanaël Attar
+ - Florian Blouet
+ - Benoît Burnichon
+ - Thibaud Fabre
+ - Ysoline Gresille
+ - Nicolas Honoré
+ - Andrey Kalinovsky
+ - Nicolas Legoff
+ - Romain Neutron
+ - Jonathan Schneider
+
Phraseanet c/o Alchemy
30 Place Saint Georges
75009 Paris - France
diff --git a/CONTRIBUTORS b/CONTRIBUTORS
index 4c9772eaed..794f49dee1 100644
--- a/CONTRIBUTORS
+++ b/CONTRIBUTORS
@@ -1,3 +1,7 @@
+#version 4.0
+ - Krzysztof Szulski Security
+ - Ideepix Docker Deploiement
+
#version 3.7
- Pieter Demonie (Dutch localization)
diff --git a/composer.lock b/composer.lock
index 8a41ac8dfc..d9eae9b3ee 100644
--- a/composer.lock
+++ b/composer.lock
@@ -4334,16 +4334,16 @@
},
{
"name": "media-alchemyst/media-alchemyst",
- "version": "0.5.1",
+ "version": "0.5.2",
"source": {
"type": "git",
"url": "https://github.com/alchemy-fr/Media-Alchemyst.git",
- "reference": "b82bb891640cb1ce5d5523235047c34c64194514"
+ "reference": "5d2fe6dd95215804202ecf0466fd9cfaeedd0140"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/alchemy-fr/Media-Alchemyst/zipball/b82bb891640cb1ce5d5523235047c34c64194514",
- "reference": "b82bb891640cb1ce5d5523235047c34c64194514",
+ "url": "https://api.github.com/repos/alchemy-fr/Media-Alchemyst/zipball/5d2fe6dd95215804202ecf0466fd9cfaeedd0140",
+ "reference": "5d2fe6dd95215804202ecf0466fd9cfaeedd0140",
"shasum": ""
},
"require": {
@@ -4404,7 +4404,7 @@
"video",
"video processing"
],
- "time": "2016-03-16T13:11:52+00:00"
+ "time": "2019-01-25T12:09:11+00:00"
},
{
"name": "monolog/monolog",
diff --git a/lib/Alchemy/Phrasea/Controller/Admin/SubdefsController.php b/lib/Alchemy/Phrasea/Controller/Admin/SubdefsController.php
index 6b938cb569..e30aa03946 100644
--- a/lib/Alchemy/Phrasea/Controller/Admin/SubdefsController.php
+++ b/lib/Alchemy/Phrasea/Controller/Admin/SubdefsController.php
@@ -145,6 +145,7 @@ class SubdefsController extends Controller
$options[Audio::OPTION_AUDIOBITRATE] = $config["audio"]["definitions"][$preset][Audio::OPTION_AUDIOBITRATE];
$options[Audio::OPTION_AUDIOSAMPLERATE] = $config["audio"]["definitions"][$preset][Audio::OPTION_AUDIOSAMPLERATE];
$options[Audio::OPTION_ACODEC] = $config["audio"]["definitions"][$preset][Audio::OPTION_ACODEC];
+ $options[Audio::OPTION_AUDIOCHANNEL] = $config["audio"]["definitions"][$preset][Audio::OPTION_AUDIOCHANNEL];
foreach ($config["audio"]["definitions"][$preset][Subdef::OPTION_DEVICE] as $devices) {
$options[Subdef::OPTION_DEVICE][] = $devices;
}
@@ -211,7 +212,7 @@ class SubdefsController extends Controller
{
$mapping = [
Type::TYPE_IMAGE => [Subdef::TYPE_IMAGE, Subdef::TYPE_PDF],
- Type::TYPE_VIDEO => [Subdef::TYPE_IMAGE, Subdef::TYPE_VIDEO, Subdef::TYPE_ANIMATION],
+ Type::TYPE_VIDEO => [Subdef::TYPE_IMAGE, Subdef::TYPE_VIDEO, Subdef::TYPE_ANIMATION, Subdef::TYPE_AUDIO],
Type::TYPE_AUDIO => [Subdef::TYPE_IMAGE, Subdef::TYPE_AUDIO],
Type::TYPE_DOCUMENT => [Subdef::TYPE_IMAGE, Subdef::TYPE_FLEXPAPER, Subdef::TYPE_PDF],
Type::TYPE_FLASH => [Subdef::TYPE_IMAGE]
@@ -525,29 +526,44 @@ class SubdefsController extends Controller
],
Subdef::TYPE_AUDIO => [
"definitions" => [
- "Low AAC 96 kbit/s" => [
+ "Low MP3 96 kbit/s" => [
Audio::OPTION_AUDIOBITRATE => "100",
Audio::OPTION_AUDIOSAMPLERATE => "8000",
Audio::OPTION_ACODEC => "libmp3lame",
Subdef::OPTION_DEVICE => ["all"]
],
- "Normal AAC 128 kbit/s" => [
+ "Normal MP3 128 kbit/s" => [
Audio::OPTION_AUDIOBITRATE => "180",
Audio::OPTION_AUDIOSAMPLERATE => "44100",
Audio::OPTION_ACODEC => "libmp3lame",
Subdef::OPTION_DEVICE => ["all"]
],
- "High AAC 320 kbit/s" => [
+ "High MP3 320 kbit/s" => [
Audio::OPTION_AUDIOBITRATE => "230",
Audio::OPTION_AUDIOSAMPLERATE => "50000",
Audio::OPTION_ACODEC => "libmp3lame",
Subdef::OPTION_DEVICE => ["all"]
],
+ "Wave Mono 16 kHz" => [
+ Audio::OPTION_AUDIOBITRATE => "256",
+ Audio::OPTION_AUDIOSAMPLERATE => "16000",
+ Audio::OPTION_ACODEC => "pcm_s16le",
+ Audio::OPTION_AUDIOCHANNEL => "mono",
+ Subdef::OPTION_DEVICE => ["all"]
+ ],
+ "Wave Mono 8 kHz" => [
+ Audio::OPTION_AUDIOBITRATE => "128",
+ Audio::OPTION_AUDIOSAMPLERATE => "8000",
+ Audio::OPTION_ACODEC => "pcm_s16le",
+ Audio::OPTION_AUDIOCHANNEL => "mono",
+ Subdef::OPTION_DEVICE => ["all"]
+ ],
],
"form" => [
Audio::OPTION_AUDIOBITRATE => "slide",
Audio::OPTION_AUDIOSAMPLERATE => "select",
Audio::OPTION_ACODEC => "select",
+ Audio::OPTION_AUDIOCHANNEL => "select",
Subdef::OPTION_DEVICE => "checkbox",
],
],
diff --git a/lib/Alchemy/Phrasea/Filesystem/FilesystemService.php b/lib/Alchemy/Phrasea/Filesystem/FilesystemService.php
index fe2ac305c9..8da30984f0 100644
--- a/lib/Alchemy/Phrasea/Filesystem/FilesystemService.php
+++ b/lib/Alchemy/Phrasea/Filesystem/FilesystemService.php
@@ -201,6 +201,8 @@ class FilesystemService
return 'ogg';
case 'libmp3lame':
return 'mp3';
+ case 'pcm_s16le':
+ return 'wav';
}
return null;
diff --git a/lib/Alchemy/Phrasea/Media/Subdef/Audio.php b/lib/Alchemy/Phrasea/Media/Subdef/Audio.php
index ac50940dc1..2551669dd1 100644
--- a/lib/Alchemy/Phrasea/Media/Subdef/Audio.php
+++ b/lib/Alchemy/Phrasea/Media/Subdef/Audio.php
@@ -19,6 +19,7 @@ class Audio extends Provider
const OPTION_THREADS = 'threads';
const OPTION_ACODEC = 'acodec';
const OPTION_AUDIOSAMPLERATE = 'audiosamplerate';
+ const OPTION_AUDIOCHANNEL = 'audiochannel';
public function __construct(TranslatorInterface $translator)
{
@@ -29,9 +30,12 @@ class Audio extends Provider
47250, 48000, 50000, 50400, 88200, 96000
];
+ $audioChannel = ['mono', 'stereo'];
+
$this->registerOption(new OptionType\Range($this->translator->trans('Audio Birate'), self::OPTION_AUDIOBITRATE, 32, 320, 128, 32));
$this->registerOption(new OptionType\Enum($this->translator->trans('AudioSamplerate'), self::OPTION_AUDIOSAMPLERATE, $AVaudiosamplerate));
- $this->registerOption(new OptionType\Enum($this->translator->trans('Audio Codec'), self::OPTION_ACODEC, ['libmp3lame', 'flac'], 'libmp3lame'));
+ $this->registerOption(new OptionType\Enum($this->translator->trans('Audio Codec'), self::OPTION_ACODEC, ['libmp3lame', 'flac', 'pcm_s16le'], 'libmp3lame'));
+ $this->registerOption(new OptionType\Enum($this->translator->trans('Audio channel'), self::OPTION_AUDIOCHANNEL, $audioChannel));
}
public function getType()
@@ -53,7 +57,21 @@ class Audio extends Provider
$this->spec->setAudioCodec($this->getOption(self::OPTION_ACODEC)->getValue());
$this->spec->setAudioSampleRate($this->getOption(self::OPTION_AUDIOSAMPLERATE)->getValue());
$this->spec->setAudioKiloBitrate($this->getOption(self::OPTION_AUDIOBITRATE)->getValue());
+ $this->spec->setAudioChannels($this->getChannelNumber($this->getOption(self::OPTION_AUDIOCHANNEL)->getValue()));
return $this->spec;
}
+
+ private function getChannelNumber($audioChannel)
+ {
+ switch($audioChannel)
+ {
+ case 'mono':
+ return 1;
+ case 'stereo':
+ return 2;
+ default:
+ return null;
+ }
+ }
}
diff --git a/lib/classes/databox/subdef.php b/lib/classes/databox/subdef.php
index 0dcab4ccc1..f1a269d731 100644
--- a/lib/classes/databox/subdef.php
+++ b/lib/classes/databox/subdef.php
@@ -44,7 +44,7 @@ class databox_subdef
SubdefType::TYPE_DOCUMENT => [SubdefSpecs::TYPE_IMAGE, SubdefSpecs::TYPE_FLEXPAPER, SubdefSpecs::TYPE_PDF],
SubdefType::TYPE_FLASH => [SubdefSpecs::TYPE_IMAGE],
SubdefType::TYPE_IMAGE => [SubdefSpecs::TYPE_IMAGE, SubdefSpecs::TYPE_PDF],
- SubdefType::TYPE_VIDEO => [SubdefSpecs::TYPE_IMAGE, SubdefSpecs::TYPE_VIDEO, SubdefSpecs::TYPE_ANIMATION],
+ SubdefType::TYPE_VIDEO => [SubdefSpecs::TYPE_IMAGE, SubdefSpecs::TYPE_VIDEO, SubdefSpecs::TYPE_ANIMATION, SubdefSpecs::TYPE_AUDIO],
SubdefType::TYPE_UNKNOWN => [SubdefSpecs::TYPE_IMAGE],
];
const CLASS_THUMBNAIL = 'thumbnail';
@@ -156,6 +156,10 @@ class databox_subdef
if ($sd->audiosamplerate) {
$audio->setOptionValue(Audio::OPTION_AUDIOSAMPLERATE, (int) $sd->audiosamplerate);
}
+ if ($sd->audiochannel) {
+ $audio->setOptionValue(Audio::OPTION_AUDIOCHANNEL, (string) $sd->audiochannel);
+ }
+
return $audio;
}
/**
diff --git a/lib/conf.d/data_templates/DublinCore.xml b/lib/conf.d/data_templates/DublinCore.xml
index aada9b2258..e50bf58612 100644
--- a/lib/conf.d/data_templates/DublinCore.xml
+++ b/lib/conf.d/data_templates/DublinCore.xml
@@ -148,7 +148,7 @@
{{datapathnoweb}}{{basename}}/subdefs
- flexpaper
+ pdf
no
screen
diff --git a/lib/conf.d/data_templates/en-simple.xml b/lib/conf.d/data_templates/en-simple.xml
index e42b18a490..d4a00c347b 100644
--- a/lib/conf.d/data_templates/en-simple.xml
+++ b/lib/conf.d/data_templates/en-simple.xml
@@ -148,7 +148,7 @@
{{datapathnoweb}}{{basename}}/subdefs
- flexpaper
+ pdf
no
screen
diff --git a/lib/conf.d/data_templates/fr-simple.xml b/lib/conf.d/data_templates/fr-simple.xml
index 6af9a072f3..3ada8adaa6 100644
--- a/lib/conf.d/data_templates/fr-simple.xml
+++ b/lib/conf.d/data_templates/fr-simple.xml
@@ -148,7 +148,7 @@
{{datapathnoweb}}{{basename}}/subdefs
- flexpaper
+ pdf
no
screen