Android 由libmpg123解码的PCM未在音频曲目中播放

Android 由libmpg123解码的PCM未在音频曲目中播放,android,android-ndk,native,pcm,audiotrack,Android,Android Ndk,Native,Pcm,Audiotrack,经过这么多的努力,我能够通过mpg123库将mp3解码到PCM,但问题是我不知道我得到的缓冲区是否是PCM的,因为当我尝试输入短缓冲区时,我在AudioTrack中没有得到任何声音,尽管我已成功地将预转换的PCM文件检查并播放到AudioTrack。我的代码是 提前感谢:) Log.e(“,”+NativeWrapper.initLib()); int err=NativeWrapper.initMP3(文件名); Log.e(“,”err“+err”); 如果(错误!=MPG123_正常){

经过这么多的努力,我能够通过mpg123库将mp3解码到PCM,但问题是我不知道我得到的缓冲区是否是PCM的,因为当我尝试输入短缓冲区时,我在AudioTrack中没有得到任何声音,尽管我已成功地将预转换的PCM文件检查并播放到AudioTrack。我的代码是 提前感谢:)

Log.e(“,”+NativeWrapper.initLib());
int err=NativeWrapper.initMP3(文件名);
Log.e(“,”err“+err”);
如果(错误!=MPG123_正常){
//TODO:显示错误
}
Log.e(“,”文件名“+文件名);
AudioFileInformations audioInfo=NativeWrapper
.getAudioInformations();
如果(!audioInfo.success){
//TODO:显示错误
}否则{
int minBufferSize=AudioTrack.getMinBufferSize((int)44100,
AudioFormat.CHANNEL\u配置\u立体声,
音频格式。编码(PCM(16位);
曲目=新的音频曲目(AudioManager.STREAM_MUSIC,(int)44100,
AudioFormat.CHANNEL\u配置\u立体声,
AudioFormat.ENCODING_PCM_16位,最小缓冲区大小*4,
音频跟踪模式(音频流);
缓冲区=新短[最小缓冲区大小];
布尔值优先=真;
signalThread.doNotify();
试一试{
fos=新文件输出流(环境)
.getExternalStorageDirectory().getPath()
+ "/"
+“jumme_out.mp3”);
}捕获(FileNotFoundException e1){
e1.printStackTrace();
}
做{
若果(完)
打破
试一试{
err=NativeWrapper
.decodeM3(最小缓冲区大小*2,缓冲区);
如果(错误==MPG123_正常| |错误==MPG123_新格式){
第一个=假;
track.write(bufferbyte,0,bufferbyte.length);track.flush();
}否则
打破
}捕获(例外e){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
}而(!结束);
如果(错误==MPG123_完成){
track.flush();
track.stop();
试一试{
fos.flush();
fos.close();
}捕获(IOE异常){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
现在我有了NDK解码的PCM,我想动态地改变音高和速度…但是我该如何处理音高和音高…我所能做的就是改变音轨中的采样率…这只适用于KitKat。。 我还实现了Sonic NDK,它可以播放带有噪音的声音。。 但是Sonic需要给PCM供电,所以我通过mpg123转换成PCM,并动态地给它供电。但是整个过程不够快,我听到环路中有一个间隙。。 代码是:

void recursive(){
缓冲区=新短[最小缓冲区大小];
err=NativeWrapper.decodep3(minBufferSize*2,buffer);
byte[]bufferbyte=ShortToByte_Twiddle_方法(缓冲区);
sonic.putBytes(bufferbyte,bufferbyte.length);
int available=sonic.availableBytes();
modifiedSamples=新字节[可用];
sonic.receiveBytes(修改后的样本,可用);
track.write(modifiedSamples,0,可用);//write
如果(错误!=MPG123_完成){
递归();
}

}
我看不到你调用过
track.play()
。哦,我的错误..非常感谢,先生..现在它工作顺利。我看不到你调用过
track.play()
。哦,我的错误..非常感谢,先生..现在它工作顺利。