我正在尝试使用 .NET MAUI 编写自己的 MP3 播放器。 其中一个库是基于 android 媒体播放器的。正如我在文档中读到的,它在 android.media.audiofx 包中有一个均衡器类。
我想为以下频率创建均衡器:32、64、125、250、500、1000、2000、4000、8000、16000 和 20000Hz,但无法弄清楚。
任何人都可以向我展示一些示例 java 代码吗?我可以尝试将其转换为 c#。 我查看了代码here,但没有太多帮助。
谢谢
Android内置均衡器似乎只支持固定数量的频段和固定频率。 对于不同的设备,它提供不同数量的频段。
我发现创建 X 频段均衡器的一种方法是直接处理音频流并对流原始样本应用滤波器函数。
但对于压缩音频格式,还需要解码器来获取音频样本。
所以一个可能的链是:
正如我通常看到的,低级的东西是用 C/C++ 编写的。但我认为可以使用 Android
AudioTrack
将代码转换为 Java 或 C# 以进行直接音频流处理。
也请查看这些讨论:
import android.media.audiofx.Equalizer;
// ...
Equalizer equalizer = new Equalizer(0, mediaPlayer.getAudioSessionId());
// Check if the equalizer is available
if (equalizer.getEnabled()) {
// Get the frequencies supported by the equalizer
short minEqualizerBandLevel = equalizer.getBandLevelRange()[0];
short maxEqualizerBandLevel = equalizer.getBandLevelRange()[1];
int numEqualizerBands = equalizer.getNumberOfBands();
int[] equalizerFrequencies = new int[numEqualizerBands];
// Get the center frequencies for each equalizer band
for (int i = 0; i < numEqualizerBands; i++) {
equalizerFrequencies[i] = equalizer.getCenterFreq((short) i) / 1000;
}
// Display the frequencies and levels of each equalizer band
for (int i = 0; i < numEqualizerBands; i++) {
int bandLevel = equalizer.getBandLevel((short) i);
System.out.println("Frequency: " + equalizerFrequencies[i] + "Hz, Level: " + bandLevel + "dB");
}
// Configure the levels of the equalizer bands
for (int i = 0; i < numEqualizerBands; i++) {
// Calculate the desired level for each band (e.g., 0dB for all bands)
int desiredLevel = 0;
// Check if the desired level is valid for the current band
if (desiredLevel >= minEqualizerBandLevel && desiredLevel <= maxEqualizerBandLevel) {
equalizer.setBandLevel((short) i, (short) desiredLevel);
}
}
}