我正在录制男声,当我单击播放按钮时,如何将男声转换为女声并以女声播放。我引用了一些我尝试过的sound pool
链接,以通过更改浮动速率来更改声音,但我没有听到女性声音,也没有更改音轨的频率。
这是我的代码:
soundPool = new SoundPool(10, AudioManager.STREAM_MUSIC, 0);
soundPool.setOnLoadCompleteListener(new OnLoadCompleteListener() {
@Override
public void onLoadComplete(SoundPool soundPool, int sampleId,
int status) {
loaded = true;
}
});
soundID = soundPool.load(mFileName, 1);
AudioManager audioManager = (AudioManager) getSystemService(AUDIO_SERVICE);
float actualVolume = (float) audioManager
.getStreamVolume(AudioManager.STREAM_MUSIC);
float maxVolume = (float) audioManager
.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
float volume = actualVolume / maxVolume;
/* if (loaded) {
iv.setImageDrawable(getResources().getDrawable(R.drawable.palyrec));
soundPool.play(soundID, volume, volume, 1, 0, 1.8f);
Log.e("Test", "Played sound");
}*/
int streamID = -1;
do {
iv.setImageDrawable(getResources().getDrawable(R.drawable.palyrec));
streamID = soundPool.play(soundID, volume, volume, 1, 0, 1.7f);
Log.e("Test", "Played sound");
} while(streamID==0);
更改频率代码:
Integer [] freqset = {11025,16000,22050,44100};
File file = new File(Environment.getExternalStorageDirectory(), "test.pcm");
int shortSizeInBytes = Short.SIZE/Byte.SIZE;
int bufferSizeInBytes = (int)(file.length()/shortSizeInBytes);
short[] audioData = new short[bufferSizeInBytes];
try {
InputStream inputStream = new FileInputStream(file);
BufferedInputStream bufferedInputStream = new BufferedInputStream(inputStream);
DataInputStream dataInputStream = new DataInputStream(bufferedInputStream);
int i = 0;
while(dataInputStream.available() > 0){
audioData[i] = dataInputStream.readShort();
i++;
}
dataInputStream.close();
int sampleFreq = (Integer)spFrequency.getSelectedItem();
AudioTrack audioTrack = new AudioTrack(
AudioManager.STREAM_MUSIC,
sampleFreq,
AudioFormat .CHANNEL_CONFIGURATION_MONO,
AudioFormat.ENCODING_PCM_16BIT,
bufferSizeInBytes,
AudioTrack.MODE_STREAM);
audioTrack.play();
audioTrack.write(audioData,0,bufferSizeInBytes);
如何在Android中转换为女性声音?
最佳答案
我相信对频率一词可能会有误解:采样率频率与感知的基音频率不同。
更改采样率频率将同时改变音调和时间,就像播放录音带的速度更快(对于那些足够记住的老者:-))。
向上改变音调频率不会使其听起来更快,但是您会很快注意到引入的数字伪像(花栗鼠声音)。
向下走时听起来可能会更好(如Luka的视频中所示)。
但是,在两种情况下,您都必须更改音高,并且会产生一些怪异的副作用。
最接近的将是通过专门用于协调或调整签名声带的软件获得的结果。这些软音会看着共振峰,并且不会改变它们来改变音高。
例如。:
https://documentation.apple.com/en/logicstudio/effects/index.html#chapter=10%26section=3%26tasks=true
最有名的软件之一:
http://www.celemony.com/en/melodyne/what-is-melodyne
我认为在这种情况下,您可能需要稍微改变一些声音共振峰(其中包含我们的大脑用来识别某人声音的某些特征)和整体音高,但要独立进行。
还要注意,共振峰已编号(F0,F1,F2,F3,...),并且F1和F2允许我们分辨出元音之间的差异。 http://home.cc.umanitoba.ca/~krussll/phonetics/acoustic/formants.html
正如Merlevede所言,我认为很难提出一种“万能的”算法。
Afaict,android上没有库正在执行此操作...