在Android中找不到AudioTrack.write(浮点[],int,int,int)

在Android中找不到AudioTrack.write(浮点[],int,int,int),android,audiotrack,Android,Audiotrack,阅读AudioTrack官方文档时,我注意到我可以编写一个浮点数组,然后以流或缓冲模式读取: 公共整数写入(浮点[]音频数据,整数偏移浮点,整数大小浮点,整数写入模式) 在API级别21中添加 将音频数据写入音频接收器进行播放(流模式), 或复制音频数据以供以后播放(静态缓冲区模式)。在里面 静态缓冲区模式,从偏移量开始将数据复制到缓冲区 0,则忽略写入模式。在流模式下,阻塞 行为将取决于写入模式 我试着在我的代码中这样使用它: .... float[]raw2

阅读AudioTrack官方文档时,我注意到我可以编写一个浮点数组,然后以流或缓冲模式读取:

公共整数写入(浮点[]音频数据,整数偏移浮点,整数大小浮点,整数写入模式) 在API级别21中添加

将音频数据写入音频接收器进行播放(流模式), 或复制音频数据以供以后播放(静态缓冲区模式)。在里面 静态缓冲区模式,从偏移量开始将数据复制到缓冲区 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()方法中得到了这个错误:

我更新了我的sdk,并检查了清单文件,
android:targetSdkVersion=“21”/>
但仍然不知道出了什么问题。

更换此

float[]raw2=bytesToFloats(read(f2));
FFTProcessor.performFastConvolution(convhandle, raw2, im2);
有了这个,

byte[]raw2=read(f2);
FFTProcessor.performFastConvolution(convhandle, bytesToFloats(raw2), im2);
并将其替换

float[]raw2=bytesToFloats(read(f2));
FFTProcessor.performFastConvolution(convhandle, raw2, im2);
有了这个,

byte[]raw2=read(f2);
FFTProcessor.performFastConvolution(convhandle, bytesToFloats(raw2), im2);

您的
minSdkVersion
是什么?@StenSoft您不能使用
minSdkVersion
中不可用的函数,除非您使用
@TargetApi
装饰类/方法。请注意,在较低的API上使用该调用将使应用程序崩溃。因此我无法使用它:(您使用的是eclipse吗?这不会执行卷积。好的,但我认为您的消息表明您正在尝试将float[]传递到方法中,而不是将byte[]