- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在尝试在 android 上一次录制和播放音频。但是录制的音频有更多的噪音,如 zzzzz....
我想过滤掉音频中的噪音。我的代码是
private void record() {
// Get the minimum buffer size required for the successful creation
// of an AudioRecord object.
int N = AudioRecord.getMinBufferSize(RECORDER_SAMPLERATE, RECORDER_CHANNELS, RECORDER_AUDIO_ENCODING);
audioTrack = new AudioTrack(AudioManager.STREAM_MUSIC, 8000, AudioFormat.CHANNEL_OUT_MONO, AudioFormat.ENCODING_PCM_16BIT, N * 10,
AudioTrack.MODE_STREAM);
AudioRecord audioRecorder = null;
int bufferSizeInShorts;
int shortsRead;
short audioBuffer[];
try {
bufferSizeInShorts = (N / 2);
// Initialize Audio Recorder.
audioRecorder = new AudioRecord(MediaRecorder.AudioSource.VOICE_RECOGNITION, RECORDER_SAMPLERATE, RECORDER_CHANNELS,
RECORDER_AUDIO_ENCODING, N * 10);
NoiseSuppressor.create(audioRecorder.getAudioSessionId());
// Start Recording.
audioBuffer = new short[bufferSizeInShorts];
audioRecorder.startRecording();
isRecording = true;
audioTrack.play();
while (isRecording) {
shortsRead = audioRecorder.read(audioBuffer, 0, bufferSizeInShorts);
if (shortsRead == AudioRecord.ERROR_BAD_VALUE || shortsRead == AudioRecord.ERROR_INVALID_OPERATION) {
Log.e("record()", "Error reading from microphone.");
isRecording = false;
break;
}
audioTrack.write(audioBuffer, 0, audioBuffer.length);
}
} finally {
if (audioRecorder != null) {
audioRecorder.stop();
audioRecorder.release();
}
if (audioTrack != null) {
audioTrack.stop();
audioTrack.release();
}
}
}
如何过滤背景噪音,以便我只能听到声音。
最佳答案
为了清晰和优质的语音尝试使用 *44100 或 16000 采样率 *
注意:- 44100 采样率可能不适用于 Amulator。还要确保你有正确的标题格式
忽略与此无关的变量
使用AudioRecord类来录音
public class Mediarec extends Activity {
public static final int SAMPLE_RATE = 44100;
public static int count=0;
private AudioRecord mRecorder;
private File mRecording;
private byte[] mBuffer;
private final String startRecordingLabel = "Start recording";
private final String stopRecordingLabel = "Stop recording";
private boolean mIsRecording = false;
OnGainSelected gs;
SharedPreferences sp;
String Shared = "Shared";
String stored_gain;
AudioManager am;
protected int bitsPerSamples = 16;
private Button show_gain;
Switch bluetooth;
Button button;
@Override
public void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.fragment_mediarec);
sp = getSharedPreferences(Shared, Context.MODE_PRIVATE);
button = (Button) findViewById(R.id.start);
bluetooth = (Switch) findViewById(R.id.switch1);
initRecorder();
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(final View v) {
Log.d("Normal()","Recordng frm Normal MIC");
Normal();
}
});
}
protected void Normal() {
// TODO Auto-generated method stub
if (!mIsRecording ) {
button.setText(stopRecordingLabel);
mIsRecording = true;
Log.d("Normal","Rec Started");
mRecorder.startRecording();
mRecording = getFile("raw");
startBufferedWrite(mRecording);
} else {
button.setText(startRecordingLabel);
mIsRecording = false;
mRecorder.stop();
File waveFile = getFile("wav");
try {
rawToWave(mRecording, waveFile);
} catch (IOException e) {
Toast.makeText(Mediarec.this, e.getMessage(),
Toast.LENGTH_SHORT).show();
}
Toast.makeText(Mediarec.this, "Recorded to " + waveFile.getName(),
Toast.LENGTH_SHORT).show();
}
}
@Override
public void onDestroy() {
mRecorder.release();
super.onDestroy();
}
private void initRecorder() {
int bufferSize = AudioRecord.getMinBufferSize(SAMPLE_RATE,
AudioFormat.CHANNEL_IN_MONO, AudioFormat.ENCODING_PCM_16BIT);
mBuffer = new byte[bufferSize];
mRecorder = new AudioRecord(MediaRecorder.AudioSource.MIC, SAMPLE_RATE,
AudioFormat.CHANNEL_IN_MONO, AudioFormat.ENCODING_PCM_16BIT,
bufferSize);
}
private void startBufferedWrite(final File file) {
new Thread(new Runnable() {
@Override
public void run() {
DataOutputStream output = null;
try {
output = new DataOutputStream(new BufferedOutputStream(
new FileOutputStream(file)));
while (mIsRecording) {
int readSize = mRecorder.read(mBuffer, 0,
mBuffer.length);
for (int i = 0; i < readSize; i++) {
output.write(mBuffer[i]);
}
}
} catch (IOException e) {
Toast.makeText(Mediarec.this, e.getMessage(),
Toast.LENGTH_SHORT).show();
} finally {
if (output != null) {
try {
output.flush();
} catch (IOException e) {
Toast.makeText(Mediarec.this, e.getMessage(),
Toast.LENGTH_SHORT).show();
} finally {
try {
output.close();
} catch (IOException e) {
Toast.makeText(Mediarec.this, e.getMessage(),
Toast.LENGTH_SHORT).show();
}
}
}
}
}
}).start();
}
private void rawToWave(final File rawFile, final File waveFile)
throws IOException {
byte[] rawData = new byte[(int) rawFile.length()];
DataInputStream input = null;
try {
input = new DataInputStream(new FileInputStream(rawFile));
input.read(rawData);
} finally {
if (input != null) {
input.close();
}
}
DataOutputStream output = null;
try {
output = new DataOutputStream(new FileOutputStream(waveFile));
// WAVE header
// see http://ccrma.stanford.edu/courses/422/projects/WaveFormat/
writeString(output, "RIFF"); // chunk id
writeInt(output, 36 + rawData.length); // chunk size
writeString(output, "WAVE"); // format
writeString(output, "fmt "); // subchunk 1 id
writeInt(output, 16); // subchunk 1 size
writeShort(output, (byte) 1); // audio format (1 = PCM)
writeShort(output, (byte) 1); // number of channels
writeInt(output, SAMPLE_RATE); // sample rate
writeInt(output, SAMPLE_RATE * 2); // byte rate
writeShort(output, (byte) 2); // block align
writeShort(output, (byte) 16); // bits per sample
writeString(output, "data"); // subchunk 2 id
writeInt(output, rawData.length); // subchunk 2 size
output.write(rawData);
} catch (Exception e) {
Toast.makeText(getApplicationContext(), "" + e, Toast.LENGTH_LONG)
.show();
} finally {
if (output != null) {
output.close();
}
}
}
private File getFile(final String suffix) {
Time time = new Time();
time.setToNow();
return new File(Environment.getExternalStorageDirectory(),
time.format("%Y%m%d%H%M%S") + "." + suffix);
}
private void writeInt(final DataOutputStream output, final int value)
throws IOException {
output.write(value >> 0);
output.write(value >> 8);
output.write(value >> 16);
output.write(value >> 24);
}
private void writeShort(final DataOutputStream output, final short value)
throws IOException {
output.write(value >> 0);
output.write(value >> 8);
}
private void writeString(final DataOutputStream output, final String value)
throws IOException {
for (int i = 0; i < value.length(); i++) {
output.write(value.charAt(i));
}
}
}
关于android - 从录制的音频中去除背景噪音,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23888480/
我今天尝试使用噪声在处理中生成伪随机角度,但它没有像我希望的那样工作。 float xoff = 0; float inc = 0.01; void draw(){ float vx = cos(
我正在使用 OpenCV 和 Python 处理图像。我需要去除图像中的点/噪声。 我尝试了使点变小的膨胀,但是文本被损坏了。我还尝试了两次循环扩张和一次腐 eclipse 。但这并没有给出令人满意的
我需要使用我编写的 perlin 噪声程序在 Java 中生成 3D 行星(球体)的纹理。但问题是左侧和右侧需要相同,上下也必须相同,这样您才能将纹理放在球体上。 我无法将柏林噪声源放在这里,因为它太
我想构建一个 android 应用程序,它可以识别我的声音,将其转换为文本,并显示我刚刚说的 toast 。我可以通过使用一个按钮来为我启动语音识别器来做到这一点。但现在我想让它只根据我的声音工作。
嗨,我正在使用我发现的算法来生成柏林噪声。我想做的是用更少的曲线创建更锐利的边缘Picture 。 private static final double F2 = 0.5*(Math.sqr
我正在尝试用 C++ 编写一个程序来播放一个小的 .wav 文件。我已经按照 DirectX SDK 文档对其进行了编程,以在辅助静态缓冲区上编写和播放。它运行正常,除了在任何 .wav 文件播放结束
在这个 short video 中听我的问题. 现在我更详细地解释: 在那个视频中,我已经播放了(点击按钮)一个音频文件三次,连续两次,最后一次有一点停顿。第一次听起来像 radio 正在调谐,第二次
所以在过去的几个小时里,我一直在尝试用 Dart 制作一个简单的 Perlin 噪声发生器。为此,我决定在 this page 上使用二维生成的伪代码。 (很棒的阅读!) 这是我的 Dart 实现的样
我正在为 android 开发一个 OCR 应用程序(构建为 java 应用程序)。我想从相机捕获的图像中检测文本并进行预处理我正在使用 OpenCV,但我得到了一些额外的行,这些行被读取为文本,我采
我正在使用 Ruby on Rails 3.1.1 和 pg gem。 在我的 Gemfile.lock 中,这是我拥有的 pg (0.11.0) 我的日志中充满了如下所示的信息。我没有用 sqlit
我在 javascript 中创建了一个带有实时对话模块的应用程序。我正在使用 WebRTC 设置对等连接。信号和候选人似乎都工作正常。对等点不在同一个网络上。 在某些时候,音频开始向流中添加点击。质
我在基于 android 的 csipsimple 应用程序中使用了一个 PJSIP 库。除一个问题外,一切正常。当我打开扬声器时,通话中有很多回声/噪音,无法进行通话。可能是什么问题以及如何处理这个
当您按下 alt+几乎任何其他键时,它会发出 clang 。噪音说“你已经尝试做一些你做不到的事情” 我想在多个组合中使用 alt 键作为网络应用程序的键盘快捷键。 尽管在按下 alt+* 时有一些事
我的目标是创建一个 SDL 窗口,绘制不同的波形并播放该波的不确定声音。通过按下特定的键,可以修改波的幅度、频率或波形等参数。 问题在于,即使是绘制时看起来不错的简单正弦波,听起来也很嘈杂。我不明白为
我收到大量这样的消息,围绕着我故意不支持的 SSL 协议(protocol),例如SSLv3、TLS1.0 等 2020-02-06 13:08:30,600 ERROR [io.undertow.r
我有错误s的情况通常是从 3rd-party JS 发出的,例如 Chartbeat 等。我想捕获并丢弃/静音这些错误以及相关的噪音。 所有此类 3rd 方脚本都会执行以下操作: 创建 DOM 标签
我对新 ffmpeg 中的重采样结果感到困惑。我将 AAC 音频解码为 PCM,ffmpeg 显示音频信息为: Stream #0:0: Audio: aac, 44100 Hz, stereo, f
我是一名优秀的程序员,十分优秀!