我正在尝试使用小型音频歌曲均衡器。我想在其中添加
高音,立体声等选项,就像在Poweramp播放器中一样。
Poweramp音乐播放器的图像
我成功实现了5个频段的均衡器,如下所示:
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));
eqBars.get(0).setEQPosition(EQ.getEqualizer().getBandLevel((short) 0));
eqBars.get(1).setEQPosition(EQ.getEqualizer().getBandLevel((short) 1));
eqBars.get(2).setEQPosition(EQ.getEqualizer().getBandLevel((short) 2));
eqBars.get(3).setEQPosition(EQ.getEqualizer().getBandLevel((short) 3));
eqBars.get(4).setEQPosition(EQ.getEqualizer().getBandLevel((short) 4));
seekbar1katop.setText(EQ.getEqualizer().getBandLevel((short) 0)+"mB");
seekbar2katop.setText(EQ.getEqualizer().getBandLevel((short) 1)+"mB");
seekbar3katop.setText(EQ.getEqualizer().getBandLevel((short) 2)+"mB");
seekbar4katop.setText(EQ.getEqualizer().getBandLevel((short) 3)+"mB");
seekbar5katop.setText(EQ.getEqualizer().getBandLevel((short) 4)+"mB");
}
catch(IllegalStateException e)
{
Toast.makeText(getActivity(),"Unable",Toast.LENGTH_SHORT).show();
}
catch(IllegalArgumentException e)
{
Toast.makeText(getActivity(),"Unable",Toast.LENGTH_SHORT).show();
}
catch(UnsupportedOperationException e)
{
Toast.makeText(getActivity(),"Unable",Toast.LENGTH_SHORT).show();
}
}
// Toast.makeText(getApplicationContext(),"You Clicked : " + mEqualizer.getEnabled(),Toast.LENGTH_SHORT).show();
}
});
}
}
上面的代码只是我的均衡器代码的简短摘要。它不会像
我在此处发布的示例那样起作用。。
我也想在均衡器中添加高音,立体声,单声道效果。
我已经像这样实现了低音增强:
public static void setBassBoost(BassBoost bassBoost, int percent) {
try{
bassBoost.setStrength((short) ((short) 1000 / 100 * percent));
bassBoost.setEnabled(true);
}catch (Exception e){
}
}
public static void setBassBoostOff(BassBoost bassBoost) {
bassBoost.setEnabled(false);
}
我使用了Inbulilt类来增强低音。
如何在应用中添加高音和立体声/单声道效果?
为了改变低音,中音,高音,不需要使用
该AudioTrack对象(即使使用该对象,您也只能
播放未压缩的PCM数据)。
您只需要使用您的 对象来调整适当的频段级别即可。要获取可用频段的数量,只需致电:
Equalizer
myEqualizer.getNumberOfBands()
Considering the number of available bands, you can now set the level for each
band using the following method:
myEqualizer.setBandLevel(band, level);
where:
频段:将具有新增益的频段。
频段编号从0开始,以(频段数量-1)结束。级别:将以给定频段设置的新的千分之一增益。
getBandLevelRange()将定义最大值和最小值。
更新
要实现一个简单的平衡效果,只是区别左/右
您的播放器的音量(MediaPlayer,SoundPool,…):
mediaPlayer.setVolume(left, right)
要获得单声道效果,您可以考虑使用
Virtualizer,
它提供立体声加宽效果。您可以
使用以下方法设置虚拟化效果的强度:
virtualizer.setStrength(1000); //range is [0..1000]
您需要 仔细阅读
文档
,以检查
基础系统是否真正支持虚拟机的当前配置。
无论如何,这不是真正的单声道输出,我认为如果
不使用诸如
AudioTrack(实际上Poweramp的音频
管道依赖于本地JNI库)这样的低级API,就无法在立体声扬声器上获得单声道输出。如果你想使用的AudioTrack播放,你需要
考虑的,它仅支持PCM数据(WAV)作为输入:你会不会这个手段
能够直接,因为你玩压缩的音频文件(,…如MP3,FLAC)
需要首先手动解码压缩的音频文件。
[Compressed File (MP3)] ===> decode() ===> [PCM data] ===> customEffect() ===> AudioTrack playback()
因此,为了使用和AudioTrack播放压缩的音频(并
最终创建自定义效果),需要执行以下步骤:
关于低音增强效果,您需要检查
正在运行的设备(例如虚拟器)是否支持当前配置。
看看这里为更多信息
这一点。
问一下Xamarin.Forms便携里面Xamarin.Forms的音频怎么播放 正如我所知,有依赖服务,我看到了一些示例,只有iOS和Android,但没有Windows Phone 8.1/Windows 8.1和UWP。
我需要为Android做一个均衡器。不推荐使用El音频会话ID|0。有方法获得当前音频会话ID吗?我想从我的应用程序中均衡其他应用程序的声音。在Google play中,还有其他应用程序使用“兼容模式”。但我不知道他们是怎么做的。例如,应用程序检测到spotify正在播放,会话被选中,并且它可以被均衡。有人知道这是怎么做的吗?多谢了。 示例应用程序:
问题内容: 我正在设计一个简单的调谐器,所以我的目标是显示音符名称(A,B,F#)以及理论声音和实际输入之间的 距离( 以分为单位)。 我是音频和信号处理的新手,所以我做了一些研究,发现 了一个 叫做快速傅立叶变换 的东西 ,它可以分析字节并给我频率。另外,我发现了一些Java库,例如通用数学和JTransforms,所以我不会自己编写硬代码。 我相信就这样,因为每个范围的频率都可以以相同的气质直
但是我将ffmpeg更新到了最新版本(ffmpeg version git-2012-06-16-809d71d),现在在这个版本中参数不起作用。 请告诉我如何使用将新音频添加到视频(不是混合)中。
问题内容: 我有几个与Sun,音频播放器和声音输入/输出有关的问题 为什么该软件包不属于Java API?此处是一些信息:http : //grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6b14/sun/audio/AudioPlayer.java但这仍然是默认JDK构建I的一部分正在使用。 我已经尝试过使用JMF,
问题内容: 我有一个声音文件,我想修改音高。该文件存储在MP3中。我已经搜索了互联网,但是未能找到任何可以修改音高的库或算法。 任何示例和/或文献将不胜感激 问题答案: 从您的问题中并不清楚,您是否只想更改播放速度(就像转盘上的音调衰减器一样),还是要更改音高而不影响播放速度。如果是后者,则需要使用时间拉伸/音高偏移算法。参见:http : //en.wikipedia.org/wiki/Audi