在下面的代码中,我的audioRecord对象没有初始化.我尝试将其移动到该onCreate方法并使其成为全局的.我已记录状态,并返回一个值1,表示可以使用.调试器表示startRecording正在未初始化的对象上调用它.它还说它无法获得音频源.
为什么我会收到这些错误?
package com.tecmark;
import java.io.BufferedOutputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import android.app.Activity;
import android.media.AudioFormat;
import android.media.AudioRecord;
import android.media.MediaRecorder;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
import android.view.View;
import android.widget.TextView;
public class recorder extends Activity {
private Thread thread;
private boolean isRecording;
private AudioRecord recorder;
private FileOutputStream os;
private BufferedOutputStream bos;
private DataOutputStream dos;
private TextView text;
private int audioSource = MediaRecorder.AudioSource.MIC;
private int sampleRate = 22050;
private int channel = AudioFormat.CHANNEL_CONFIGURATION_MONO; …Run Code Online (Sandbox Code Playgroud) 我正在设计一个Android应用程序,我需要实现一个AudioRecord类来记录用户的声音.经过一些研究(没有提供足够的信息)和几次失败的尝试,我想知道是否有人可以通过发布关于如何使用AudioRecord捕获高质量声音的示例(代码)来帮助我.我真的很感激.谢谢
我正在尝试使用AudioRecord类来记录WAV文件.问题是它只提供原始PCM数据,如果我将其写入文件,则没有标题信息,因此它不会在任何媒体播放器中播放.如何从这些原始数据创建WAV文件?
或者,有没有其他方法将Android中的声音录制到WAV文件(或者MP3)?
哦,我知道MediaRecorder无法使用,因为它不支持WAV或MP3格式.
我目前正在开发一个具有录音和播放功能的Android应用程序.我是处理音频的新手,我在编码和格式方面遇到了一些麻烦.
我能够在我的应用程序中录制和播放音频,但在导出时我无法重现音频.我找到的唯一方法是导出我的.pcm文件并使用Audacity进行转换.
这是我记录音频的代码是:
private Thread recordingThread
private AudioRecord mRecorder;
private boolean isRecording = false;
private void startRecording() {
mRecorder = new AudioRecord(MediaRecorder.AudioSource.MIC,
Constants.RECORDER_SAMPLERATE, Constants.RECORDER_CHANNELS,
Constants.RECORDER_AUDIO_ENCODING, Constants.BufferElements2Rec * Constants.BytesPerElement);
mRecorder.startRecording();
isRecording = true;
recordingThread = new Thread(new Runnable() {
public void run() {
writeAudioDataToFile();
}
}, "AudioRecorder Thread");
recordingThread.start();
}
private void writeAudioDataToFile() {
// Write the output audio in byte
FileOutputStream os = null;
try {
os = new FileOutputStream(mFileName);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
while (isRecording) { …Run Code Online (Sandbox Code Playgroud) 我是Android的新手,我正在尝试创建一个捕获音频声音的程序,然后显示其中存在的频率.我找到了一个绘制图形均衡器图形部分的示例.在此示例中,它使用AudioRecord类型的对象来捕获音频声音.用于将音频信号分解为分量频率的技术采用称为离散傅立叶变换(DFT)的数学变换,并且为了执行DFT,使用快速傅里叶变换(FFT).此示例使用实现FFT的包.该软件包链接到www.netlib.org/fftpack/jfftpack.tgz.问题是,在我运行此示例后,按下开始按钮后,图形均衡器不会出现在显示屏上.
以下是活动类的源代码:
package com.audio.processing;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.media.AudioFormat;
import android.media.AudioRecord;
import android.media.MediaRecorder;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageView;
import ca.uol.aig.fftpack.RealDoubleFFT;
public class AudioProcessing extends Activity implements OnClickListener{
int frequency = 8000;
int channelConfiguration = AudioFormat.CHANNEL_CONFIGURATION_MONO;
int audioEncoding = AudioFormat.ENCODING_PCM_16BIT;
private RealDoubleFFT transformer;
int blockSize = 256;
Button startStopButton;
boolean started = false;
RecordAudio recordTask;
ImageView imageView;
Bitmap bitmap;
Canvas canvas;
Paint paint; …Run Code Online (Sandbox Code Playgroud) 一些特殊的情况迫使我做那种变态的事情.
是否可以在不同的频道上播放2个不同的音频流.想象一下耳机,我需要同时播放左扬声器的第一首歌和右扬声器的第二首歌.
经过一些研究,我发现可以在某个单一频道播放.甚至可以关闭其中一个.但我没有找到任何有关如何同时播放2个音频流的信息.
它甚至可能吗?如何?一些代码示例和链接赞赏!
研究结果.
1)AudioTrack能够在不同的频道上播放
// only play sound on left
for(int i = 0; i < count; i += 2){
short sample = (short)(Math.sin(2 * Math.PI * i / (44100.0 / freqHz)) * 0x7FFF);
samples[i + 0] = sample;
samples[i + 1] = 0;
}
// only play sound on right
for(int i = 0; i < count; i += 2){
short sample = (short)(Math.sin(2 * Math.PI * i / (44100.0 / freqHz)) * 0x7FFF);
samples[i …Run Code Online (Sandbox Code Playgroud) 我需要能够在Android中使用麦克风创建WAV文件.目前,我遇到了很多麻烦.到目前为止,这是我的情况.我正在使用micDroid项目代码的一部分进行记录:
//read thread
int sampleRate = 44100;
int bufferSize = AudioRecord.getMinBufferSize(sampleRate,android.media.AudioFormat.CHANNEL_CONFIGURATION_MONO,android.media.AudioFormat.ENCODING_PCM_16BIT);
AudioRecord ar = new AudioRecord(AudioSource.MIC,sampleRate,android.media.AudioFormat.CHANNEL_CONFIGURATION_MONO,android.media.AudioFormat.ENCODING_PCM_16BIT,bufferSize);
short[] buffer = new short[bufferSize];
ar.startRecording();
while(isRunning){
try{
int numSamples = ar.read(buffer, 0, buffer.length);
queue.put(new Sample(buffer, numSamples));
} catch (InterruptedException e){
e.printStackTrace();
}
}
//write thread
int sampleRate = 44100;
WaveWriter writer = new WaveWriter("/sdcard","recOut.wav",sampleRate,android.media.AudioFormat.CHANNEL_CONFIGURATION_MONO,android.media.AudioFormat.ENCODING_PCM_16BIT);
try {
writer.createWaveFile();
} catch (IOException e) {
e.printStackTrace();
}
while(isRunning){
try {
Sample sample = queue.take();
writer.write(sample.buffer, sample.bufferSize);
} catch (IOException e) {
//snip
}
}
Run Code Online (Sandbox Code Playgroud)
这似乎工作正常,但最终结果可识别地包含我所说的,但它是可怕的扭曲.这是大胆的屏幕上限(WMP拒绝播放文件).

任何帮助将不胜感激,如果您需要更多代码/信息,请告诉我. …