Android中,可以将录制的声音变形为有趣的音调有哪些选项? iPhone可能有像 http://dirac.dspdimension.com 这样的选项,我们是否有一些类似的Android库可以帮助从录制的文件中创建有趣的声音?要求是创建"会说话的汤姆"/"花栗鼠化"的东西(如果这有助于理解上下文)。
如果没有现成的库,还有什么其他方法可以做到这一点?
一种选择是使用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);
}
}
});
我们可以将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
希望,这可能会在未来帮助某人。
目前移动设备上的大多数语音调制应用程序似乎都在使用音高调制和一些额外的音频效果的变化(请注意,语音变形是需要解决的更大问题)。
在Android上,"AudioTrack"可以帮助您调整音高设置(以及许多其他音频特性)以操纵输入音频,从而获得所需的有趣/"芯片化"版本。
尝试在应用中嵌入纯数据。 纯数据很棒,学习起来很有趣。试一试,它很容易改变声音。