android音频录制和播放不了,Android音频录制和播放已损坏

博客内容涉及到Android平台上音频录制和播放的问题。作者在尝试创建一个PCM音频文件并播放时遇到问题,录音回放速度变慢且播放时间比实际录音时间长。记录代码使用了AudioRecord进行录音,而播放代码则通过AudioTrack进行。问题可能存在于录音或播放的参数配置中,如采样率、通道配置或编码格式等。
摘要由CSDN通过智能技术生成

我试图录制一个PCM音频文件并播放它。当我回放时,它听起来很慢并且需要比记录更长的时间。我不确定错误是在记录还是播放代码中。任何想法是什么问题?Android音频录制和播放已损坏

这里是记录代码(isRecording标志由停止按钮在GUI线程设置)。

android.os.Process.setThreadPriority(android.os.Process.THREAD_PRIORITY_URGENT_AUDIO);

int sampleRateInHz = 8000;//8000 44100, 22050 and 11025

int channelConfig = AudioFormat.CHANNEL_CONFIGURATION_MONO;

int audioFormat = AudioFormat.ENCODING_PCM_16BIT;

File sd = Environment.getExternalStorageDirectory();

File file = new File(sd, "msg.wav");

if (file.exists())

file.delete();

try {

file.createNewFile();

} catch (IOException e) {

Log.e("create file:", e.toString());

}

try {

OutputStream os = new FileOutputStream(file);

BufferedOutputStream bos = new BufferedOutputStream(os);

DataOutputStream dos = new DataOutputStream(bos);

int bufferSize = AudioRecord.getMinBufferSize(sampleRateInHz,channelConfig, audioFormat);

short[] buffer = new short[bufferSize];

audioRecord = new AudioRecord(MediaRecorder.AudioSource.MIC,

sampleRateInHz,channelConfig, audioFormat,bufferSize);

audioRecord.startRecording();

isRecording = true;

while (isRecording) {

int bufferReadResult = audioRecord.read(buffer, 0, bufferSize);

for (int i = 0; i < bufferReadResult; i++)

{

dos.writeShort(buffer[i]);

}

}

dos.close();

这是播放代码。

File file = new File(SendAlert.voiceFile);

// Get the length of the audio stored in the file (16 bit so 2 bytes per short)

// and create a short array to store the recorded audio.

int musicLength = (int)(file.length()/2);

short[] music = new short[musicLength];

try {

// Create a DataInputStream to read the audio data back from the saved file.

InputStream is = new FileInputStream(file);

BufferedInputStream bis = new BufferedInputStream(is);

DataInputStream dis = new DataInputStream(bis);

// Read the file into the music array.

int i = 0;

while (dis.available() > 0) {

music[i] = dis.readShort();

i++;

}

// Close the input streams.

dis.close();

// Create a new AudioTrack object using the same parameters as the AudioRecord

// object used to create the file.

AudioTrack audioTrack = new AudioTrack(AudioManager.STREAM_MUSIC,

8000,

AudioFormat.CHANNEL_CONFIGURATION_MONO,

AudioFormat.ENCODING_PCM_16BIT,

musicLength,

AudioTrack.MODE_STREAM);

// Start playback

audioTrack.play();

// Write the music buffer to the AudioTrack object

audioTrack.write(music, 0, musicLength);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值