当前位置:首页 » 安卓系统 » android播放pcm

android播放pcm

发布时间: 2022-08-07 15:52:25

‘壹’ android audiotrack 可以播放什么格式

播放mp3的总是噪音,不知道原因,后来播放wav的倒是可以,
wav是没有压缩的pcm
java代码
package com.lp;
import java.io.IOException; import java.io.InputStream;
import android.app.Activity; import android.content.Context;
import android.media.AudioFormat; import android.media.AudioManager;
import android.media.AudioTrack;
import android.media.AudioTrack.;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
public class MainActivity extends Activity {
private Button play;
private Button stop;
private AudioTrack at;
private AudioManager am; @Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
am = (AudioManager)getSystemService(Context.AUDIO_SERVICE);
play = (Button)findViewById(R.id.main_play);
stop = (Button)findViewById(R.id.main_stop);
play.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if(am.isSpeakerphoneOn()){
am.setSpeakerphoneOn(false);
}
setVolumeControlStream(AudioManager.STREAM_VOICE_CALL);
am.setMode(AudioManager.MODE_IN_CALL); System.out.println(am.getStreamMaxVolume(AudioManager.STREAM_VOICE_CALL));
System.out.println("&&&&&&&&&&&&&"); System.out.println(am.getStreamVolume(AudioManager.STREAM_VOICE_CALL)); int bufferSizeInBytes = AudioTrack.getMinBufferSize(44100, AudioFormat.CHANNEL_OUT_MONO, AudioFormat.ENCODING_PCM_16BIT); if(at==null){
at = new AudioTrack(AudioManager.STREAM_VOICE_CALL, 44100, AudioFormat.CHANNEL_OUT_MONO, AudioFormat.ENCODING_PCM_16BIT, bufferSizeInBytes, AudioTrack.MODE_STREAM);
System.out.println("22222");
new AudioTrackThread().start();
}else{
if(at.getPlayState()==AudioTrack.PLAYSTATE_PLAYING){
System.out.println("111111111");
}else{
System.out.println("33333");
at = new AudioTrack(AudioManager.STREAM_VOICE_CALL, 44100, AudioFormat.CHANNEL_OUT_MONO, AudioFormat.ENCODING_PCM_16BIT, bufferSizeInBytes, AudioTrack.MODE_STREAM);
new AudioTrackThread().start();
}
} }
});
stop.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
at.stop();
at.release();
am.setMode(AudioManager.MODE_NORMAL);
}

});

}

class AudioTrackThread extends Thread{

@Override
public void run() {
byte[] out_bytes = new byte[44100];
InputStream is = getResources().openRawResource(R.raw.start);
int length ;
at.play();
try {
while((length = is.read(out_bytes))!=-1){
System.out.println(length);
at.write(out_bytes, 0, length);
}
} catch (IOException e) {
e.printStackTrace();
}
if(at.getPlayState()==AudioTrack.PLAYSTATE_PLAYING){
at.stop();
at.release();
am.setMode(AudioManager.MODE_NORMAL);
}

}
}
}

‘贰’ ffplay如何播放pcm文件

pcm文件是模拟音频信号经过数模转换后直接形成的二进制序列。这是一种十分罕见的音频文件格式。
可以通过以下步骤播放:
1、右键菜单第一个选项是“打开”,是因为我安装了可以打开该文件的Au。也可以直接双击打开。
2、之后就会有导入配置的选择
3、如果声道重合,波形就会叠加。听起来是粗犷的。
4、声音调整正常后,可以导出成文件,以后可以使用音频播放器直接播放。依次选择“文件-导出-文件”,或者直接快捷Ctrl加Shift加E,打开导出设置。
5.点击“格式设置”右侧的“更改”进行格式更改。格式设置界面,选择“波形音频”,导出的会是WAV文件。
6、直接在导出设置界面点击“格式”的下拉菜单,选择“MP3音频”。这里面也有无损输出的,选择“WavePCM”即是。
7、选择完成后,点击“确定”开始到处,等待导出完成即可。有损导出会有有损导出的警告提示弹窗,点击“是”继续即可。
8、最后就可以使用ffply进行播放了。

‘叁’ 在做Android与pc服务器通信,使用socket,udp协议,发送PCM语音,

This method blocks until a packet is received or a timeout has expired

‘肆’ android中怎么对音频数据pcm进行解码

工程代码结构较为简单:

简单说下思路,先把PCM音频数据从指定的路径文件读到内存,然后给AudioPlayer设置数据源,音频参数等,最后执行播放,暂停,停止等操作

贴上部分类代码片段:

publicclassAudioParam{

intmFrequency;//采样率

intmChannel;//声道

intmSampBit;//采样精度

}

publicinterfacePlayState{

publicstaticfinalintMPS_UNINIT=0;//未就绪

publicstaticfinalintMPS_PREPARE=1;//准备就绪(停止)

publicstaticfinalintMPS_PLAYING=2;//播放中

publicstaticfinalintMPS_PAUSE=3;//暂停

}

‘伍’ android能播放pcm文件吗

原生系统应该不行,但毕竟是开源系统,你可以下载支持这个文件的播放器

‘陆’ android直接播放pcm语音为什么会有噪音

最近在做手机客户端用G726编码库向机台发送语音消息的DEMO,弄了一周左右才解决.

中间碰到的问题贼多,主要是用AudioRecord采集声音的时候,然后用AudioTrack播放经常会出现噪音,这样的情况让人实在是无法接受。

后来查谷歌实在是没折了,于是再次翻查了下sipdroid的代码,发现sipdroid在采集声音后,每次都会调用一个函数,于是我猜测,这个函数应该跟去除噪音有关,于是写了个DEMO,测试了一下,发现噪音还真消除了.

噪音消除算法:

void calc1(short[] lin,int off,int len) {
int i,j;
for (i = 0; i < len; i++) {
j = lin[i+off];
lin[i+off] = (short)(j>>2);
}
}

自己录制PCM,播放PCM的DEMO。

‘柒’ android 怎么播放wav音频文件

下面这个方法就是如何读取一个WAV文件的头部:

private static final String RIFF_HEADER = "RIFF";
private static final String WAVE_HEADER = "WAVE";
private static final String FMT_HEADER = "fmt ";
private static final String DATA_HEADER = "data";

private static final int HEADER_SIZE = 44;

private static final String CHARSET = "ASCII";

/* ... */

public static WavInfo readHeader(InputStream wavStream) throws IOException,
DecoderException {

ByteBuffer buffer = ByteBuffer.allocate(HEADER_SIZE);
buffer.order(ByteOrder.LITTLE_ENDIAN);

wavStream.read(buffer.array(), buffer.arrayOffset(), buffer.capacity());

buffer.rewind();
buffer.position(buffer.position() + 20);
int format = buffer.getShort();
checkFormat(format == 1, "Unsupported encoding: " + format); // 1 means
// Linear
// PCM
int channels = buffer.getShort();
checkFormat(channels == 1 || channels == 2, "Unsupported channels: "
+ channels);
int rate = buffer.getInt();
checkFormat(rate <= 48000 && rate >= 11025, "Unsupported rate: " + rate);
buffer.position(buffer.position() + 6);
int bits = buffer.getShort();
checkFormat(bits == 16, "Unsupported bits: " + bits);
int dataSize = 0;
while (buffer.getInt() != 0x61746164) { // "data" marker
Log.d(TAG, "Skipping non-data chunk");
int size = buffer.getInt();
wavStream.skip(size);

buffer.rewind();
wavStream.read(buffer.array(), buffer.arrayOffset(), 8);
buffer.rewind();
}
dataSize = buffer.getInt();
checkFormat(dataSize > 0, "wrong datasize: " + dataSize);

return new WavInfo(new FormatSpec(rate, channels == 2), dataSize);
}
上面的代码中,缺少的部分应该是显而易见的。正如你所看到的,仅仅支持16位,但在你可以修改代码以支持8位(AudioTrack不支持任何其他分辨率的)。

下面这个方法,则是用来读取文件剩余的部分 – 音频数据。

public static byte[] readWavPcm(WavInfo info, InputStream stream)
throws IOException {
byte[] data = new byte[info.getDataSize()];
stream.read(data, 0, data.length);
return data;
}
我们读取的WavInfo结构体,包含采样率,分辨率和声道数已经足够让我们去播放我们读取的音频了。

如果我们不需要将全部音频数据一次性放入内存中,我们可以使用一个InputStream,一点一点地读取。

‘捌’ 安卓手机上pcm格式的文件有什么用,能不能删除占的空间很大。

可以删除。

PCM文件具有流媒体特性,是数字通信的编码方式之一,删除后不会影响系统运行。

PCM文件被广泛用于素材保存及音乐欣赏,CD、DVD以及我们常见的 WAV文件中均有应用,PCM文件能够一边读一边播放,而不需要把这个文件全部读出后然后回放,这样就可以做到不用下载 就可以实现收听了。也可以做到一边编码一边播放。

(8)android播放pcm扩展阅读

PCM中文称脉冲编码调制(Pulse Code Molation),是70年代末发展起来的,记录媒体之一的CD,在80年代初由飞利浦和索尼公司共同推出。

脉码调制的音频格式也被DVD-A所采用,它支持立体声和5.1环绕声,1999年由DVD讨论会发布和推出的。脉冲编码调制的比特率,从14-bit发展到16-bit、18-bit、20-bit直到24-bit;采样频率从44.1kHz发展到192kHz。

‘玖’ android开发,怎么把amr格式的字节数组转为pcm望大神赐教

先看下amr格式android支不支持播放,这个可能涉及到版权问题, google不支持。amr转pcm这个只能找第三方软件了

热点内容
c语言单元测验 发布:2025-01-19 07:58:56 浏览:990
c语言贪吃蛇源代码 发布:2025-01-19 07:58:53 浏览:879
c语言char数组长度 发布:2025-01-19 07:46:23 浏览:10
淘宝如何清理缓存垃圾 发布:2025-01-19 07:42:07 浏览:438
电脑输入密码阶段如何改语言 发布:2025-01-19 07:42:05 浏览:786
存储器国产率 发布:2025-01-19 07:04:36 浏览:567
锐程cc蓝鲸版选什么配置 发布:2025-01-19 06:56:28 浏览:169
城镇居民医保卡的原始密码是多少 发布:2025-01-19 06:55:54 浏览:788
wifi密码如何修改密码 发布:2025-01-19 06:39:06 浏览:962
sqlserver认证 发布:2025-01-19 06:34:30 浏览:815