我想为android创建简单的均衡器.我该怎么做?
尝试在MediaPlayer类中找到一些方法.但我所有的尝试都失败了.
在启用均衡器功能之前,我检查api级别以确保它等于或大于9.从我从用户那里获得的报告中,似乎抛出了一些异常:
代码 eq = new Equalizer(0, mp.getAudioSessionId())
可以提出:
Caused by: java.lang.UnsupportedOperationException: Effect library not loaded
at android.media.audiofx.AudioEffect.<init>(AudioEffect.java:355)
at android.media.audiofx.Equalizer.<init>(Equalizer.java:149)
Run Code Online (Sandbox Code Playgroud)
并且代码eq.getBandLevelRange()
可以引发:
Caused by: java.lang.UnsupportedOperationException: AudioEffect: invalid parameter operation
at android.media.audiofx.AudioEffect.checkStatus(AudioEffect.java:1182)
at android.media.audiofx.Equalizer.getBandLevelRange(Equalizer.java:206)
Run Code Online (Sandbox Code Playgroud)
我不知道是否有解决方案,如果不是,我可以捕获这些异常并禁用均衡器,但我需要知道究竟是什么造成了这种情况,所以我可以通知我的用户而不会让他们感到沮丧.
谢谢你的帮助
我正试着用Web Audio API来重新创建类似
Winamp的10波段均衡器.
据我所知,我要创建10个双二阶滤波器,设置其type
到2(一个带通滤波器),并设置其frequency
来[60, 170, 310, 600, 1000, 3000, 6000, 12000, 14000, 16000]
分别.有一次,我已经做到了(这里的地方,我开始有点糊涂了),那么我会创建一个单独的增益节点对每个频率"带",并将其值绑定到一个滑块.
<input id="someFreqBand" type="range" min="-12" max="12" step="0.1" value="0" onchange="slide()"/>
Run Code Online (Sandbox Code Playgroud)
假设所有这些都是正确的,那么唯一剩下的步骤是将所有10个增益节点连接到音频上下文destination
(我想这将采用所有10个频率"频带"并将它们混合/同步回来).这是创建Web Audio 10波段均衡器的正确方法吗?
我很困惑的主要问题是我如何将源"连接"到10个频带滤波器(+相关增益节点),因为所有节点只有一个输入或输出(包括目的地).
我几乎相同的问题,其中描述这里,答案在这个职位并不能帮助我,我立即释放我的乐队均衡水平设置之后.它在我的4.0.4设备上运行良好,它在朋友的2.3.5设备上运行良好,它在一小部分设备上崩溃,并且在这些设备上运行哪个版本的android无关紧要.
所以有错误
Equalizer mEqualizer = new Equalizer(0, mediaPlayer.getAudioSessionId());
java.lang.UnsupportedOperationException: Effect library not loaded
at android.media.audiofx.AudioEffect.<init>(AudioEffect.java:355)
at android.media.audiofx.Equalizer.<init>(Equalizer.java:149)
Run Code Online (Sandbox Code Playgroud)
我不知道如何解决这个问题,有什么建议吗?
我正在寻找一种在我的应用程序中使用均衡器的方法,它不依赖于android.media.audiofx包,特别是android.media.audiofx.均衡器类,因为它们仅适用于api级别> 9.
有没有人知道在android下运行良好的本地库?我找到了mpg123,但似乎这个库非常慢.或者是否有其他方法来实现没有本机库的均衡器?
我可以使用AVPlayer类从iPod库播放歌曲.现在我想要做的是将均衡器插入到产生的音频中.
有人经历过这样的经历吗?
我知道有很多关于均衡器的问题,但是我没有得到我想要的东西.我想要做的是一个均衡器,用于修改音频样本,如:
equalizer.eqAudio(audiosamples, band, gain)
Run Code Online (Sandbox Code Playgroud)
我不确定这是否是我想要的确切接口,因为我在实现它们方面对DSP知之甚少(我使用过滤器,限制器,压缩器但没有制造它们).
所以谷歌搜索我读到我必须对样本进行FFT,这样我得到每个频率范围的数据而不是幅度,按照我想要的方式处理它,然后进行FFT的反转,这样我再次得到音频样本的结果.我寻找了这个FFT的实现,并找到了JTransform for Java.该库具有称为离散余弦变换(DCT)的FFT相关算法的实现.
我的问题是:
谢谢!
我正在尝试小型音频歌曲均衡器.我想在Poweramp播放器中加入高音,立体声等选项.
我成功实现了5个频段的equlizer如下: -
public class FragmentEqualizer extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {
super.onCreateView(inflater,container,savedInstanceState);
equalizer = new EQ(getActivity(), new Equalizer(0,com.androidhive.musicplayer.AndroidBuildingMusicPlayerActivity.mp.getAudioSessionId()));
for(Bar bar : eqBars)
bar.setActiveEQ();
maximum= EQ.getEqualizer().getBandLevelRange()[1];
minimum= EQ.getEqualizer().getBandLevelRange()[0];
}
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
lvforprest.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,int position, long id) {
btnformenu.setText(gtuforpresets.get(position).gtumcaFirstName);
if(position!=0 && position <=10)
{
try
{
EQ.getEqualizer().usePreset((short) (position-1));
EQ.getEqualizer().setBandLevel((short)0, EQ.getEqualizer().getBandLevel((short) 0));
EQ.getEqualizer().setBandLevel((short)1, EQ.getEqualizer().getBandLevel((short) 1));
EQ.getEqualizer().setBandLevel((short)2, EQ.getEqualizer().getBandLevel((short) 2));
EQ.getEqualizer().setBandLevel((short)3, EQ.getEqualizer().getBandLevel((short) 3));
EQ.getEqualizer().setBandLevel((short)4, EQ.getEqualizer().getBandLevel((short) 4)); …
Run Code Online (Sandbox Code Playgroud) 我见过很多应用程序在内置均衡器(谷歌播放音乐,Spotify,三星股票音乐播放器)中打开系统.直接,无需从头开始编写自己的.这些应用程序如何做到这一点?我找不到解决方案.
} else if (id == R.id.action_fx) {
Intent intent = new Intent();
intent.setAction("android.media.action.DISPLAY_AUDIO_EFFECT_CONTROL_PANEL");
if ((intent.resolveActivity(getPackageManager()) != null)) {
startActivity(intent);
} else {
Intent intent11 = new Intent(MainActivity.this, Help.class);
intent11.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
startActivity(intent11);
// No equalizer found :(
}
return true;
Run Code Online (Sandbox Code Playgroud) 我在这行代码上的均衡器上遇到UnsupportedOperationException错误.bassBoost.setStrength((short) bassBoostPos);
这是代码
equalizer = new Equalizer(0, 0);
if (equalizer != null) {
equalizer.setEnabled (isEqualizer);
numBands = equalizer.getNumberOfBands();
short r[] = equalizer.getBandLevelRange();
minLevel = r[0];
maxLevel = r[1];
bassBoost = new BassBoost (0, 0);
if(bassBoost != null) {
bassBoost.setEnabled(bassBoostPos > 0 ? true : false);
bassBoost.setStrength((short) bassBoostPos);
}
Run Code Online (Sandbox Code Playgroud)
这是例外
java.lang.UnsupportedOperationException: AudioEffect: invalid parameter
operation
at android.media.audiofx.AudioEffect.checkStatus(AudioEffect.java:1271)
at android.media.audiofx.BassBoost.setStrength(BassBoost.java:127)
Run Code Online (Sandbox Code Playgroud)
如何解决此问题,以便应用程序不会崩溃.我的意思是我如何检查设备是否支持此操作,如果它不支持,我会跳过这一行.谢谢.
equalizer ×10
android ×7
java ×3
audioeffect ×2
media ×2
audio ×1
avplayer ×1
fft ×1
html5-audio ×1
ios ×1
javascript ×1
media-player ×1
operation ×1