【问题标题】:How to generate an audio file from N concatenated audio samples separated by certain time intervals?如何从以特定时间间隔分隔的 N 个连接的音频样本生成音频文件?
【发布时间】:2020-03-15 17:40:03
【问题描述】:

我有一个模拟鼓组的 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)的方法,因为我已经在应用程序中拥有音频文件以及录音的逻辑顺序。

我尝试遵循此问题 (https://stackoverflow.com/a/656302) 中显示的方法。 音频的合并起作用了,但是这样下一个音频只能放在上一个音频结束之后,这使得两个(或多个)音频无法同时播放。也无法定义分隔音频的时间。

ffmpeg 库似乎可以很好地处理这类问题,甚至还有一个适用于 Android 的版本。 但我不知道如何使用它。

有人对如何解决这个问题有建议吗? (是否使用ffmpeg)

【问题讨论】:

    标签: android audio ffmpeg


    【解决方案1】:

    FFmpeg

    ... 可能是最好的解决方案。我建议阅读更多关于它的信息here。命令行工具ffmpeg(可在大多数FFmpeg android 包中访问)接受参数-itsoffset-itsoffset 实质上延迟了输入流。

    如我所见,数组包含带有乐器的对象和下一个音符的时间。具有时间增量的“for”循环将起作用。

    此伪代码假定 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
    

    【讨论】:

    • 我尝试使用一些音频文件运行生成的命令。 ffmpeg -itsoffset 0 -i drum1_snare.ogg -itsoffset 300 -i drum1_close_hh.ogg -itsoffset 600 -i drum1_tom_2.ogg output.wav 但是,产生的声音并没有像预期的那样发出...... ffmpeg 只连接了输出中的第一个音频。
    • 我应该指定-itsoffset <number> 以秒为单位。每个输入之间有 5 分钟的休息时间。
    • 即使将时间更改为 3 秒和 5 秒也不起作用。这是我使用的命令: ffmpeg -itsoffset 0 -i drum1_snare.ogg -itsoffset 3 -i drum1_close_hh.ogg -itsoffset 6 -i drum1_tom_2.ogg output.wav 这是我得到的结果的打印:i.imgur.com/1BMtRWS.png
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多