Как создать аудиофайл из N составных аудиосэмплов, разделенных определенными временными интервалами? - PullRequest
1 голос
/ 15 марта 2020

У меня есть приложение Android, которое имитирует набор ударных, где пользователь может «записывать» свои исполнения. В настоящее время эта запись состоит из файла. json, в котором был воспроизведен аудиосэмпл и указано время, прошедшее между предыдущей и текущей нотой, примерно так:

[
    {
        drumkit: 'snare',
        time: '0'
    },
    {
        drumkit: 'kick',
        time: '5'
    },
    {
        drumkit: 'splash',
        time: '3'
    }
    {
        drumkit: 'snare',
        time: '0'
    },
    {
        drumkit: 'kick',
        time: '2'
    },
    {
        drumkit: 'crash',
        time: '0'
    }

]

Тем не менее, теперь я ищу способ создания аудиофайла (например, mp3) из этой записи, поскольку у меня уже есть аудиофайлы в приложении, а также логическая последовательность записи.

Я пытался следовать подход, показанный в этом вопросе ({ ссылка }). Объединение aud ios сработало, но таким образом следующее аудио может быть размещено только после окончания предыдущего, что делает невозможным воспроизведение двух (или более) aud ios одновременно. Также невозможно определить время, которое отделяет aud ios.

. Библиотека ffmpeg, кажется, хороша для решения проблем такого типа, есть даже версия для Android. Но я не знаю, как это сделать, используя его.

У кого-нибудь будет предложение, как решить проблему? (Использует или нет ffmpeg)

1 Ответ

1 голос
/ 25 марта 2020

FFmpeg

... вероятно, лучшее решение. Я предлагаю прочитать больше об этом здесь . Инструмент командной строки ffmpeg (доступный в большинстве пакетов FFmpeg android) принимает параметр -itsoffset. -itsoffset существенно задерживает входной поток.

Как я вижу, массив содержит объекты с инструментом и время до следующей ноты. 'Для' l oop с шагом времени будет работать.

В этом псевдокоде предполагается, что ffmpeg является программой / библиотекой / .so файлом командной строки .

# Preferably an object or function to map 'Object.Instrument' to a path
# { drumkit: "snare", time: 3 }  =>  ./snare.wav
Variable Command = 'ffmpeg'
Variable Sum = 0 # in seconds
Foreach Object in Array
    # Be careful with whitespace in the command
    Command = Command + ' -itsoffset ' + Sum + ' -i ' + Object.Instrument + '.wav'
    Show (Command)

    Sum = Sum + Object.Time

End Foreach
Command = Command + ' /output/path/file.wav'
# ffmpeg -itsoffset 0 -i snare.wav -itsoffset 3 -i kick.wav /output/path/file.wav
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...