标签: audioeffect

即使api> = 9,也不总是支持均衡器?

在启用均衡器功能之前,我检查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)

我不知道是否有解决方案,如果不是,我可以捕获这些异常并禁用均衡器,但我需要知道究竟是什么造成了这种情况,所以我可以通知我的用户而不会让他们感到沮丧.

谢谢你的帮助

android operation equalizer audioeffect

12
推荐指数
1
解决办法
2376
查看次数

Android音频对wav文件的影响并保存

需求

Android在SD卡中打开一个.wav文件,播放它,添加一些效果(如回声,音高移等),保存文件有效.简单:(

我知道的

  1. 我可以使用Soundpool或MediaPlayer打开和播放文件.
  2. 我可以在使用两者时发挥一些效果.即对于Media Player我可以设置环境混响效果.使用SoundPool我可以设置播放速率,这有点像音高变换.我现在成功地实现了这些.
  3. 但是这个类中的任何一个都没有任何保存播放文件的方法.所以我只能玩,我无法保存音乐效果.

我想知道什么

  1. 除了MediaPlayer或SoundPool之外,还有其他感兴趣的类吗?没关系保存,你只要提一下课,我会做关于用它们保存文件的研究.
  2. 任何第三方库我可以添加效果并保存?如果它是开源和免费的,请高兴.但即使它是专有的,也要提及它们.
  3. 我可以研究的任何其他领域.OpenAL是否支持语音过滤和语音定位?它适用于Android吗?

准备做肮脏的工作.你请把路径借给我..

编辑:

做了一些搜索,并遇到了AudioTrack.但它也不支持保存到文件.所以那里也没有运气..

编辑

好的,如果我自己做的怎么办?从wav文件中获取原始字节,并对其进行处理.我使用AudioRecord录制了一个wav文件,得到了一个wav文件.是否有任何资源描述低级音频处理(我的意思是在字节级别).

编辑

好的赏金时间到了,我正在给予我得到的唯一答案赏金.7天后,我理解的是

  1. 我们无法使用MediaPlayer,AudioTrack等保存我们播放的内容.
  2. 没有可用的音频处理库.
  3. 您可以获取原始的wav文件,并自己进行音频处理.答案为读/写wav文件提供了一个很好的包装类.一个好的java代码来读取和WAV文件的变化间距是在这里.

android soundpool audio-processing android-mediaplayer audioeffect

8
推荐指数
1
解决办法
4306
查看次数

带有AudioEffect的Android MediaPlayer:出错(-22,0)

嗯,这只是我的要求..

我有一个WAV文件,我想打开它,添加一些效果,然后播放.

我使用MediaPlayer播放文件,而PresetReverb则添加一些效果.

这是我的代码

public void playSound(){
   String fullPath = MainActivity.this.filePath + "tmpaudio.wav";

   final MediaPlayer player = new MediaPlayer();
   player.setDataSource(this, Uri.parse(fullPath));

   PresetReverb pReverb = new PresetReverb(0,player.getAudioSessionId());
   pReverb.setPreset(PresetReverb.PRESET_LARGEROOM);
   pReverb.setEnabled(true);
   player.attachAuxEffect(eReverb.getId());
   player.setAuxEffectSendLevel(1.0f);

   //prepare for playback
   player.prepare();

   // Media prepared listener
   player.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
      public void onPrepared(MediaPlayer mp) {
         //play
         player.start();
      } 
   });
}
Run Code Online (Sandbox Code Playgroud)

当我运行此代码时,我正在登录logcat(我没有记录.)

05-02 12:02:42.356:E/MediaPlayer(17250):错误(-22,0)

但是当我评论这些线条时

PresetReverb pReverb = new PresetReverb(0,player.getAudioSessionId());
pReverb.setPreset(PresetReverb.PRESET_LARGEROOM);
pReverb.setEnabled(true);
player.attachAuxEffect(eReverb.getId());
player.setAuxEffectSendLevel(1.0f);
Run Code Online (Sandbox Code Playgroud)

MediaPlayer正在成功播放该文件.所以我的WAV文件没有错.

有点失望,我尝试了EnvironmentalReverb,而不是PresetReverb,

EnvironmentalReverb eReverb = new EnvironmentalReverb(1, player.getAudioSessionId());
eReverb.setDecayHFRatio((short) 1000); …
Run Code Online (Sandbox Code Playgroud)

java audio android android-mediaplayer audioeffect

7
推荐指数
1
解决办法
7176
查看次数

Android应用程序不断崩溃audioEffect错误代码-1

我在我的应用程序的主要活动中添加了一些代码用于连续生成和回放正弦波,并创建了一个PresetReverb对象以在正弦波上测试它.但是,每次启动它时,应用程序崩溃,并在logcat中生成:

08-08 14:36:10.566: E/AudioEffect(19466): set(): AudioFlinger could not create effect, status: -1
08-08 14:36:10.566: E/AudioEffects-JNI(19466): AudioEffect initCheck failed -1
08-08 14:36:10.566: E/AudioEffect-JAVA(19466): Error code -1 when initializing AudioEffect.
08-08 14:36:10.566: W/dalvikvm(19466): threadid=11: thread exiting with uncaught exception (group=0x40ac2228)
08-08 14:36:10.576: E/AndroidRuntime(19466): FATAL EXCEPTION: Thread-11436
08-08 14:36:10.576: E/AndroidRuntime(19466): java.lang.RuntimeException: Cannot initialize effect engine for type: 47382d60-ddd8-11db-bf3a-0002a5d5c51bError: -1
08-08 14:36:10.576: E/AndroidRuntime(19466):    at android.media.audiofx.AudioEffect.<init>(AudioEffect.java:387)
08-08 14:36:10.576: E/AndroidRuntime(19466):    at android.media.audiofx.PresetReverb.<init>(PresetReverb.java:136)
08-08 14:36:10.576: E/AndroidRuntime(19466):    at me.kevinossia.mystuff.MainScreen$2.run(MainScreen.java:47)
Run Code Online (Sandbox Code Playgroud)

以下是活动的代码:

package me.kevinossia.mystuff;


import me.kevinossia.mystuff.tutorial.R;
import android.app.Activity;
import android.content.Intent; …
Run Code Online (Sandbox Code Playgroud)

crash android audioeffect

7
推荐指数
1
解决办法
2776
查看次数

android AcousticEchoCanceler 似乎不适用于大多数设备

我正在构建一个应用程序,它需要麦克风取消来自扬声器的任何声音。似乎这个问题几乎是一个在线阴谋,因为其他有完全相同问题的人在很长一段时间内都没有得到回应。

Android 的原生硬件加速 AcousticEchoCanceler 似乎不适用于大多数设备。在许多设备上进行的测试以及似乎可以正常工作的设备包括 Nexus 5 和 Moto X,而几乎所有测试的三星设备都无法去除背景声音。注意:所有测试的手机都返回 trueAcousticEchoCanceler.isAvailable()

然而,必须有一个解决方案,因为诸如 Skype 或 WhatsApp 之类的应用程序似乎会取消其应用程序上下文之外的声音,即扬声器上有呼叫并且麦克风会取消收到的任何反馈。

这个简化的录音应用程序将声音录制到文件中,然后在单击播放时播放。

主活动.java

public class MainActivity extends Activity {

Button startRec, stopRec, playBack;
int minBufferSizeIn;
AudioRecord audioRecord;
short[] audioData;
Boolean recording;
int sampleRateInHz = 48000;
private String TAG = "TAG";

/**
 * Called when the activity is first created.
 */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    startRec = (Button) findViewById(R.id.startrec);
    stopRec = (Button) findViewById(R.id.stoprec);
    playBack = (Button) findViewById(R.id.playback);

    startRec.setOnClickListener(startRecOnClickListener);
    stopRec.setOnClickListener(stopRecOnClickListener);
    playBack.setOnClickListener(playBackOnClickListener);
    playBack.setEnabled(false); …
Run Code Online (Sandbox Code Playgroud)

java audio android aec audioeffect

7
推荐指数
1
解决办法
4521
查看次数

UnsupportedOperationException AudioEffect:参数操作无效

我在这行代码上的均衡器上遇到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)

如何解决此问题,以便应用程序不会崩溃.我的意思是我如何检查设备是否支持此操作,如果它不支持,我会跳过这一行.谢谢.

java android equalizer android-fragments audioeffect

7
推荐指数
1
解决办法
850
查看次数