
Recherche avancée
Autres articles (77)
-
Formulaire personnalisable
21 juin 2013, parCette page présente les champs disponibles dans le formulaire de publication d’un média et il indique les différents champs qu’on peut ajouter. Formulaire de création d’un Media
Dans le cas d’un document de type média, les champs proposés par défaut sont : Texte Activer/Désactiver le forum ( on peut désactiver l’invite au commentaire pour chaque article ) Licence Ajout/suppression d’auteurs Tags
On peut modifier ce formulaire dans la partie :
Administration > Configuration des masques de formulaire. (...) -
Les tâches Cron régulières de la ferme
1er décembre 2010, parLa gestion de la ferme passe par l’exécution à intervalle régulier de plusieurs tâches répétitives dites Cron.
Le super Cron (gestion_mutu_super_cron)
Cette tâche, planifiée chaque minute, a pour simple effet d’appeler le Cron de l’ensemble des instances de la mutualisation régulièrement. Couplée avec un Cron système sur le site central de la mutualisation, cela permet de simplement générer des visites régulières sur les différents sites et éviter que les tâches des sites peu visités soient trop (...) -
Amélioration de la version de base
13 septembre 2013Jolie sélection multiple
Le plugin Chosen permet d’améliorer l’ergonomie des champs de sélection multiple. Voir les deux images suivantes pour comparer.
Il suffit pour cela d’activer le plugin Chosen (Configuration générale du site > Gestion des plugins), puis de configurer le plugin (Les squelettes > Chosen) en activant l’utilisation de Chosen dans le site public et en spécifiant les éléments de formulaires à améliorer, par exemple select[multiple] pour les listes à sélection multiple (...)
Sur d’autres sites (12892)
-
Fix a duplicate word.
11 février 2012, par Ralph GilesFix a duplicate word.
Thanks to darkstarbyte for pointing out the typo.
git-svn-id : http://svn.xiph.org/trunk/theora@18195 0101bb08-14d6-0310-b084-bc0e0c8e3800
-
avcodec/dca : fix sync word search error condition
2 mai 2016, par foo86 -
how to add effect to audio, sound like a phone call phone, inner monologue, or sounds like a man/woman ? [closed]
7 mars, par MathewI'm trying to apply different audio effects, such as making audio sound like a phone call. Below is my current approach. As you can see, I'm using multiple filters and simple algorithms to achieve this effect, but the output quality isn't ideal.


I've looked into FFmpeg filters and noticed mentions of LADSPA/LV2 plugins. Are these viable solutions ? Any other suggestions would be greatly appreciated.


public static void applySceneEffect(String inputPath, String outputPath, int sceneType) {
 LOGGER.info("apply scene effect {} to {}", sceneType, inputPath);

 try (FFmpegFrameGrabber grabber = new FFmpegFrameGrabber(inputPath);
 FFmpegFrameRecorder recorder = new FFmpegFrameRecorder(outputPath, grabber.getAudioChannels())) {

 grabber.setOption("vn", ""); 
 grabber.start();

 
 recorder.setAudioCodec(avcodec.AV_CODEC_ID_PCM_S16LE); 
 recorder.setSampleRate(grabber.getSampleRate());
 recorder.setAudioChannels(grabber.getAudioChannels());
 recorder.setAudioBitrate(grabber.getAudioBitrate());
 recorder.setFormat("wav"); 


 String audioFilter = String.join(",",
 "aresample=8000", 
 "highpass=f=300, lowpass=f=3400", 
 "acompressor=threshold=-15dB:ratio=4:attack=10:release=100", 
 "volume=1.5", 
 "aecho=0.9:0.4:10:0.6"
 );

 FFmpegFrameFilter f1 = new FFmpegFrameFilter(audioFilter, grabber.getAudioChannels());
 f1.setSampleRate(grabber.getSampleRate());
 f1.start();

 recorder.start();

 Random random = new Random();
 double noiseLevel = 0.02; 

 
 while (true) {
 var frame = grabber.grabFrame(true, false, true, true);
 if (frame == null) {
 break;
 }

 ShortBuffer audioBuffer = (ShortBuffer) frame.samples[0];
 short[] audioData = new short[audioBuffer.remaining()];
 audioBuffer.get(audioData);

 applyElectricNoise(audioData, grabber.getSampleRate());

 audioData = applyDistortion(audioData, 1.5, 30000);

 audioBuffer.rewind();
 audioBuffer.put(audioData);
 audioBuffer.flip();


 f1.push(frame); 
 Frame filteredFrame;
 while ((filteredFrame = f1.pull()) != null) {
 recorder.record(filteredFrame); 
 }
 }

 recorder.stop();
 recorder.release();
 grabber.stop();
 grabber.release();
 } catch (FrameGrabber.Exception | FrameRecorder.Exception | FFmpegFrameFilter.Exception e) {
 throw new RuntimeException(e);
 }
}


private static final double NOISE_LEVEL = 0.005; 
private static final int NOISE_FREQUENCY = 60; 

public static void applyElectricNoise(short[] audioData, int sampleRate) {
 Random random = new Random();

 
 for (int i = 0; i < audioData.length; i++) {
 double noise = Math.sin(2 * Math.PI * NOISE_FREQUENCY * i / sampleRate);

 double electricNoise = random.nextGaussian() * NOISE_LEVEL * Short.MAX_VALUE + noise;

 audioData[i] = (short) Math.max(Math.min(audioData[i] + electricNoise, Short.MAX_VALUE), Short.MIN_VALUE); 
 }
}

public static short[] applyTremolo(short[] audioData, int sampleRate, double frequency, double depth) {
 double phase = 0.0;
 double phaseIncrement = 2 * Math.PI * frequency / sampleRate;

 for (int i = 0; i < audioData.length; i++) {
 double modulator = 1.0 - depth + depth * Math.sin(phase); 
 audioData[i] = (short) (audioData[i] * modulator);

 phase += phaseIncrement;
 if (phase > 2 * Math.PI) {
 phase -= 2 * Math.PI;
 }
 }
 return audioData;
}

public static short[] applyDistortion(short[] audioData, double gain, double threshold) {
 for (int i = 0; i < audioData.length; i++) {
 double sample = audioData[i] * gain;

 if (sample > threshold) {
 sample = threshold;
 } else if (sample < -threshold) {
 sample = -threshold;
 }

 audioData[i] = (short) sample;
 }
 return audioData;
}