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

时间:2015-04-13 14:15:48

标签: android audiotrack

阅读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" /> ,但仍然不知道出了什么问题。

1 个答案:

答案 0 :(得分:0)

替换它;

float[]raw2=bytesToFloats(read(f2));

有了这个;

byte[]raw2=read(f2);

并替换它;

FFTProcessor.performFastConvolution(convhandle, raw2, im2);

有了这个;

FFTProcessor.performFastConvolution(convhandle, bytesToFloats(raw2), im2);