AudioFormat在android.media.AudioFormat中不公开

时间:2016-09-22 04:22:08

标签: android audio fft audioformat

我正在尝试像Shazam一样开发Android应用程序。我搜索了Shazam如何在Google上工作,我找到了this to read。如你所见,它首先录制了这首歌。但是我的录制代码存在问题,因为Android Studio显示的错误带有该代码的红色下划线。

这是我的代码:

 SELECT `crs_room_type_detail`.*, `crs_room_type`.`room_type_name`
    FROM (`crs_room_type_detail`)
    JOIN `crs_room_type` ON `crs_room_type_detail`.`room_type_id` = `crs_room_type`.`room_type_id`
    WHERE `crs_room_type_detail`.`hotel_id` =  '4'
    AND `crs_room_type_detail`.`sdate` BETWEEN '2016-09-21' AND '2016-10-04'
    AND `crs_room_type_detail`.`edate` BETWEEN '2016-09-21' AND '2016-10-04'
    GROUP BY `crs_room_type_detail`.`room_type_id`

用于格式化录音。当我将该代码复制到主要活动时,它会显示错误如下:

enter image description here

当我将光标悬停在on错误上时,它表示" AudioFormat在android.media.AudioFormat中不公开。无法从外部包裹访问"。我该如何解决?我所遵循的链接中的代码是错误的吗?我一直在寻找Android的教程代码来开发类似Shazam应用程序的东西。

编辑Andrew Cheong的答案

我知道为什么因为Cheong的答案所以我这样使用

private AudioFormat getFormat() {
    float sampleRate = 44100;
    int sampleSizeInBits = 16;
    int channels = 1;          //mono
    boolean signed = true;     //Indicates whether the data is signed or unsigned
    boolean bigEndian = true;  //Indicates whether the audio data is stored in big-endian or little-endian order
    return new AudioFormat(sampleRate, sampleSizeInBits, channels, signed, bigEndian);
}

但正如您在代码中看到的,我只能找到setSampleRate()来设置采样率。我找不到其他方法来设置sampleSizeInBits,channels,signed和bigEndian。我不知道如何设置它们。如何设置其余变量?

1 个答案:

答案 0 :(得分:2)

如果你看the documentation for AudioFormat,你可能会注意到它有一个“Builder Class。”

class   AudioFormat.Builder
        Builder class for AudioFormat objects. 
  

AudioFormat对象的Builder类。使用此类配置和创建AudioFormat实例。通过设置音频编码,通道掩码或采样率等格式特征,可以指示在使用此音频格式的任何地方,这些特性与此设备上的默认行为有所不同。有关可用于配置AudioFormat实例的不同参数的完整说明,请参阅AudioFormat。

这是build()方法。

这是应用程序设计中的一种“模式”,如果你不是设计模式的学生,那么它有点抽象/难以理解,但无论如何都是here's a relevant article