2

有哪些选项可以在 Android 中将录制的声音变形为有趣的音调?iPhone 可能有http://dirac.dspdimension.com之类的选项,我们是否有一些类似的 android 库可以帮助从录制的文件中创建有趣的声音?要求是按照“会说话的汤姆”/“花栗鼠”的方式创建一些东西(如果这有助于理解上下文)。

如果没有现成的库,还有什么其他方法可以做到这一点?

4

4 回答 4

2

一种选择是使用 AudioTrack。它从 API 3 开始可用,并且被广泛使用。它将帮助您修改要扭曲的音频文件的频率,从而修改音高。更高的音高会给你想要的花栗鼠般的声音。

但是,由于其年代久远,AudioTrack 可能难以为您实现。试试 Android 的soundpool api。它灵活,一次可以播放数十种声音,让您轻松修改音高/频率。

这是我测试它的方法(它有效):

SoundPool soundPool = new SoundPool(1, AudioManager.STREAM_MUSIC, 0);
boolean isSoundLoaded = false;
float frequencyPitch = 1.3f; // tweak this. it accepts any number between 0.5f and 2.0f
int soundID = soundPool.load(filePath+fileName, 1);
soundPool.setOnLoadCompleteListener(new OnLoadCompleteListener() {
        @Override
        public void onLoadComplete(SoundPool soundPool, int sampleId, int status) {
            isSoundLoaded = true;
            if(isSoundLoaded)
    {
    soundPool.play(soundID, 1f, 1f, 1, 0, frequencyPitch);
    }
        }
    });
于 2014-04-10T17:02:05.133 回答
2

我们可以利用 FFMPEG 进行语音转换。

例子:

/**
 * Function to execute FFMPEG Query
 */
    private fun exceuteFFMPEG(cmd: Array<String>) {
        FFmpeg.execute(cmd)
        val rc = FFmpeg.getLastReturnCode()
        val output = FFmpeg.getLastCommandOutput()

        if (rc == RETURN_CODE_SUCCESS) {
            Log.i("GetInfo", "Command execution completed successfully.")
            hideProgress()
            isEffectAddedOnce = true
            start()
        } else if (rc == RETURN_CODE_CANCEL) {
            Log.i("GetInfo", "Command execution cancelled by user.")
        } else {
            Log.i(
                "GetInfo",
                String.format(
                    "Command execution failed with rc=%d and output=%s.",
                    rc,
                    output
                )
            )
        }
    }

    /**
     * Function used to play the audio like a Radio
     */
    private fun playRadio(fileName1: String, fileName2: String) {
        showProgress()
        player?.stop()
        val cmd = arrayOf(
            "-y",
            "-i",
            fileName1,
            "-af",
            "atempo=1",
            fileName2
        )//Radio

        exceuteFFMPEG(cmd)

    }

    /**
     * Function used to play the audio like a Chipmunk
     */
    private fun playChipmunk(fileName1: String, fileName2: String) {
        showProgress()
        player?.stop()
        val cmd = arrayOf(
            "-y",
            "-i",
            fileName1,
            "-af",
            "asetrate=22100,atempo=1/2",
            fileName2
        )//Chipmunk
        exceuteFFMPEG(cmd)
    }

    /**
     * Function used to play the audio like a Robot
     */
    private fun playRobot(fileName1: String, fileName2: String) {
        showProgress()
        player?.stop()
        val cmd = arrayOf(
            "-y",
            "-i",
            fileName1,
            "-af",
            "asetrate=11100,atempo=4/3,atempo=1/2,atempo=3/4",
            fileName2
        )//Robot
        exceuteFFMPEG(cmd)
    }

    /**
     * Function used to play the audio like a Cave
     */
    private fun playCave(fileName1: String, fileName2: String) {
        showProgress()
        player?.stop()
        val cmd = arrayOf(
            "-y",
            "-i",
            fileName1,
            "-af",
            "aecho=0.8:0.9:1000:0.3",
            fileName2
        )//Cave

        exceuteFFMPEG(cmd)

    }

有关更多详细信息,您可以在以下位置参考示例

https://github.com/sachinvarma/VoiceChanger

请查看以下网站以获取有关有助于我们处理其他影响的信息的更多信息。

https://ffmpeg.org/ffmpeg-filters.html

希望,这可能会在将来对某人有所帮助。

于 2020-05-10T06:20:05.807 回答
0

目前,移动设备上的大多数语音调制应用程序似乎都在使用音高调制的变体和一些额外的音频效果(请注意,语音变形要解决的问题要大得多)。

在 Android 上,“AudioTrack”可帮助您调整音高设置(以及许多其他音频特征),以操纵输入音频,从而获得所需的有趣/“chip-munkified”版本。

于 2013-05-14T13:53:09.907 回答
0

尝试在您的应用程序中嵌入纯数据。纯数据很棒而且学习起来很有趣。试一试,它很容易变形声音。

于 2015-10-22T20:10:58.530 回答