阅读AudioTrack官方文档,我注意到我可以编写一个浮点数组,然后以流媒体或缓冲模式读取它:
public int write(float [] audioData,int offsetInFloats,int sizeInFloats,int writeMode) 在API级别21中添加
将音频数据写入音频接收器进行播放(流模式), 或复制音频数据以供以后播放(静态缓冲模式)。在 静态缓冲模式,从offset开始将数据复制到缓冲区 0,忽略写入模式。在流模式下,阻塞 行为将取决于写入模式。
我尝试在我的代码中使用它:
....
float[]raw2=bytesToFloats(read(f2));
int convhandle= FFTProcessor.createFastConvolutionContext(raw1.length, raw1, im1);
long t1=System.currentTimeMillis();
FFTProcessor.performFastConvolution(convhandle, raw2, im2);
long t2=System.currentTimeMillis()-t1;
int minSize=audio.getMinBufferSize(22050, AudioFormat.CHANNEL_CONFIGURATION_STEREO, AudioFormat.ENCODING_PCM_8BIT);
audio = new AudioTrack(AudioManager.STREAM_MUSIC,22050, AudioFormat.CHANNEL_CONFIGURATION_STEREO, AudioFormat.ENCODING_PCM_8BIT, minSize ,AudioTrack.MODE_STREAM);
audio.write(raw2, 0, raw2.length, WRITE_NON_BLOCKING);
audio.play();
......
但是我在write()方法中遇到了这个错误:
The method write(byte[], int, int) in the type AudioTrack is not applicable for the arguments (float[], int, int, int)
我更新了我的sdk,并检查了清单文件android:targetSdkVersion="21" />
,但仍然不知道出了什么问题。
答案 0 :(得分:0)
替换它;
float[]raw2=bytesToFloats(read(f2));
有了这个;
byte[]raw2=read(f2);
并替换它;
FFTProcessor.performFastConvolution(convhandle, raw2, im2);
有了这个;
FFTProcessor.performFastConvolution(convhandle, bytesToFloats(raw2), im2);