Recherche avancée

Médias (91)

Autres articles (22)

  • Keeping control of your media in your hands

    13 avril 2011, par

    The vocabulary used on this site and around MediaSPIP in general, aims to avoid reference to Web 2.0 and the companies that profit from media-sharing.
    While using MediaSPIP, you are invited to avoid using words like "Brand", "Cloud" and "Market".
    MediaSPIP is designed to facilitate the sharing of creative media online, while allowing authors to retain complete control of their work.
    MediaSPIP aims to be accessible to as many people as possible and development is based on expanding the (...)

  • Submit bugs and patches

    13 avril 2011

    Unfortunately a software is never perfect.
    If you think you have found a bug, report it using our ticket system. Please to help us to fix it by providing the following information : the browser you are using, including the exact version as precise an explanation as possible of the problem if possible, the steps taken resulting in the problem a link to the site / page in question
    If you think you have solved the bug, fill in a ticket and attach to it a corrective patch.
    You may also (...)

  • Organiser par catégorie

    17 mai 2013, par

    Dans MédiaSPIP, une rubrique a 2 noms : catégorie et rubrique.
    Les différents documents stockés dans MédiaSPIP peuvent être rangés dans différentes catégories. On peut créer une catégorie en cliquant sur "publier une catégorie" dans le menu publier en haut à droite ( après authentification ). Une catégorie peut être rangée dans une autre catégorie aussi ce qui fait qu’on peut construire une arborescence de catégories.
    Lors de la publication prochaine d’un document, la nouvelle catégorie créée sera proposée (...)

Sur d’autres sites (5086)

  • doc/mailing-list-faq : Mention current problem with GMX

    2 mai 2020, par Michael Niedermayer
    doc/mailing-list-faq : Mention current problem with GMX
    

    Signed-off-by : Michael Niedermayer <michael@niedermayer.cc>

    • [DH] doc/mailing-list-faq.texi
  • The problem with the AudioDispatcher, the analysis in audioDispatcherFactory is not running, TarsosDSP

    4 février, par roman_gor_

    I'm making an application for sound analysis and spotlight control. The colors of the spotlight change to the beat of the music. I use the TarsosDSP library for this, additionally downloaded the FFmpeg-Kit library to convert audio to WAV format, PCM 16L to work with audioDispatcher.&#xA;The problem is that when audio is transmitted in the correct format, dispatcher starts and immediately ends. The boolean Process method is not executed, but the process Finished() method is executed. I found out that the stream starts, the file is not empty, it is converted to the correct format, BUT the getFrameLength() method, when interacting with the AudioStream to which I pass the filePath, returns the file path value -1, that is, in fact, it is not filled in. I've already searched through everything, and the github library code, and all the neural networks, I don't know how to solve this issue. The problem is with AudioDispatcher and AudioDispatcherFactory.from Pipe() ?

    &#xA;

    private void playAndAnalyzeAudio(String filePath, Uri uri)&#xA;    {&#xA;        if (mediaPlayer != null)&#xA;            mediaPlayer.release();&#xA;        mediaPlayer = MediaPlayer.create(requireContext(), uri);&#xA;&#xA;        new Thread(() -> {&#xA;            extractAudio(inputFilePath, outputFilePath);&#xA;            getActivity().runOnUiThread(() -> {&#xA;                mediaPlayer = MediaPlayer.create(requireContext(), uri);&#xA;                if (mediaPlayer != null) {&#xA;                    mediaPlayer.start(); // Start music after analyze&#xA;                    startSendingData(); // Start data sending&#xA;                }&#xA;            });&#xA;        }).start();&#xA;    }&#xA;&#xA;    private void analyzeAudio(String filePath)&#xA;    {&#xA;        try {&#xA;            AudioDispatcher audioDispatcher = AudioDispatcherFactory.fromPipe(filePath, 44100, 1024, 0);&#xA;            MFCC mfcc = new MFCC(1024, 44100, 13, 50, 20, 10000);&#xA;            audioDispatcher.addAudioProcessor(mfcc);&#xA;            Log.d("AUDIO_ANALYSIS", "Начинаем анализ аудиофайла..." &#x2B; audioDispatcher);&#xA;            audioDispatcher.addAudioProcessor(new AudioProcessor() {&#xA;                @Override&#xA;                public boolean process(AudioEvent audioEvent) {&#xA;                    Log.d("AUDIO_ANALYSIS", "Обрабатываем аудио...");&#xA;&#xA;                    float[] amplitudes = audioEvent.getFloatBuffer();&#xA;                    Log.d("AUDIO_ANALYSIS", "Размер буфера: " &#x2B; amplitudes.length);&#xA;&#xA;                    float[] mfccs = mfcc.getMFCC();&#xA;                    if (mfccs == null) {&#xA;                        Log.e("AUDIO_ANALYSIS", "MFCC не сгенерировался!");&#xA;                        return true;&#xA;                    }&#xA;&#xA;                    float currentBass = mfccs[0] &#x2B; mfccs[1];&#xA;                    float totalEnergy = 0;&#xA;                    for (float amp : amplitudes) {&#xA;                        totalEnergy &#x2B;= Math.abs(amp);&#xA;                    }&#xA;&#xA;                    Log.d("AUDIO_ANALYSIS", "Bass Energy: " &#x2B; currentBass &#x2B; ", Total Energy: " &#x2B; totalEnergy);&#xA;&#xA;                    if (currentBass > BASS_THRESHOLD || totalEnergy > ENERGY_THRESHOLD) {&#xA;                        changeColor();&#xA;                        Log.d("SONG", "Color wac changed on a : " &#x2B; currentColor);&#xA;                        brightness = MAX_BRIGHTNESS;&#xA;                    } else {&#xA;                        brightness *= 0.9f;&#xA;                    }&#xA;&#xA;                    return true;&#xA;                }&#xA;&#xA;                @Override&#xA;                public void processingFinished() {&#xA;                    getActivity().runOnUiThread(() -> Toast.makeText(requireContext(), "Анализ завершён", Toast.LENGTH_SHORT).show());&#xA;                }&#xA;            });&#xA;            File file = new File(filePath);&#xA;            if (!file.exists() || file.length() == 0) {&#xA;                Log.e("AUDIO_ANALYSIS", "Error: file is empty! " &#x2B; filePath);&#xA;                return;&#xA;            } else {&#xA;                Log.d("AUDIO_ANALYSIS", "File is, size: " &#x2B; file.length() &#x2B; " byte.");&#xA;            }&#xA;            Log.d("AUDIO_ANALYSIS", "Start of analyzing: " &#x2B; filePath);&#xA;            File ffmpegFile = new File(getContext().getCacheDir(), "ffmpeg");&#xA;            if (!ffmpegFile.setExecutable(true)) {&#xA;                Log.e("AUDIO_ANALYSIS", "You don&#x27;t have any roots for ffmpeg!");&#xA;            }&#xA;            else&#xA;                Log.e("AUDIO_ANALYSIS", "You have roots for ffmpeg!");&#xA;&#xA;            new Thread(() -> {&#xA;                Log.d("AUDIO_ANALYSIS", "Start dispatcher...");&#xA;                audioDispatcher.run();&#xA;                Log.d("AUDIO_ANALYSIS", "Dispatcher end.");&#xA;            }).start();&#xA;        } catch (Exception e) {&#xA;            e.printStackTrace();&#xA;            Toast.makeText(requireContext(), "Error of analyzing", Toast.LENGTH_SHORT).show();&#xA;        }&#xA;    }&#xA;public void extractAudio(String inputFilePath, String outputFilePath) {&#xA;        File outputFile = new File(outputFilePath);&#xA;        if (outputFile.exists()) {&#xA;            outputFile.delete();  // Удаляем существующий файл&#xA;        }&#xA;        // Строим команду для извлечения аудио&#xA;        String command = "-i " &#x2B; inputFilePath &#x2B; " -vn -acodec pcm_s16le -ar 44100 -ac 2 " &#x2B; outputFilePath;&#xA;&#xA;        // Используем FFmpegKit для выполнения команды&#xA;        FFmpegKit.executeAsync(command, session -> {&#xA;            if (session.getReturnCode().isSuccess()) {&#xA;                Log.d("AUDIO_EXTRACT", "Аудио извлечено успешно: " &#x2B; outputFilePath);&#xA;                analyzeAudio(outputFilePath);  // Продолжаем анализировать аудио&#xA;            } else {&#xA;                Log.e("AUDIO_EXTRACT", "Ошибка извлечения аудио: " &#x2B; session.getFailStackTrace());&#xA;            }&#xA;        });&#xA;    }&#xA;

    &#xA;

    Sorry about the number of lines, i tried to describe the problem very detailed.&#xA;I tried to change AudioDispatcherFactory.fromPipe() on a AudioDispatcherFactory.fromFile(), but this method don't available in Android, only in Java, how i see the error "Javax.sound..., unexpected error, method don't available"&#xA;I tried to change String command in executeAudio() method, to change arguments of fromPipe() method, but in did not to bring success.&#xA;I want that my audio file will be correct analyze with audiodispatcher and then, that data from analyze will be transfered to arduino. Now in Logs I see "Color : null, value : 0.0.

    &#xA;

  • frame skipping problem in ffmpeg and ffprobe

    3 mai 2019, par user3851234

    I am trying to check the details of the encoded frames using ffmpeg and ffporbe. When I print the details I notice that the details related to some frames are missing. For example using the fallowing command

    ffmpeg -i input.avi -vf showinfo -f null -

    I get :
    n : 247 pts : 247 pts_time:8.24157 pos : 624096 ...

    n : 248 pts : 249 pts_time:8.3083 pos : 624168 ...

    n : 249 pts : 258 pts_time:8.6086 pos : 624352 ...

    n : 250 pts : 270 pts_time:9.009 pos : 630212 ...

    You can see that there is jump from 258 to 270. In addition, when I print the number of decoded frames, it doesn’t match the actual number of frames.

    ffprobe -count_frames -select_streams v:0  -show_entries stream=nb_read_frames -of default=nokey=1:noprint_wrappers=1 input.avi

    it outputs 480 but the correct number is 509

    Changing nb_read_frames to nb_frames solves the problem of the frame numbers but the other details are still missing.
    What does ffmpeg/ffprobe skip some frames ?