Android录制了声音变形或操纵有趣的声音

时间:2012-12-16 16:41:33

标签: android audio voice morphing

有哪些选项能够在Android中将录制的声音变成有趣的音调? iPhone可能有像http://dirac.dspdimension.com这样的选项,我们是否有一些类似的android库,可以帮助从录制的文件中创建有趣的声音?要求是在'talk tom'/'chipmunkify'上创建一些东西(如果这有助于理解上下文)。

如果没有现成的库,还有其他方法吗?

4 个答案:

答案 0 :(得分: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);
    }
        }
    });

答案 1 :(得分:0)

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

在Android上“AudioTrack”可以帮助您调整音高设置(以及许多其他音频特性)来操纵输入音频,从而导致所需的搞笑/“芯片模板”版本。

答案 2 :(得分:0)

尝试在您的应用中嵌入纯数据。纯数据非常棒,也很有趣。尝试一下,很容易改变声音。

答案 3 :(得分:0)

我们可以将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

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