PCM 数据 画波形

不用了的号 2011-09-07 05:06:43
向各位求教了,我现在已经录制出了一段音频PCM数据,在电脑上用工具可以播放,也可以用AudioTrack播放,
不明白PCM是什么意思,在网上搜到一段画波形的代码是

byte[] buffer = new byte[bs]; isRun = true; while (isRun) {
int r = ar.read(buffer, 0, bs);
int v = 0;
// 将 buffer 内容取出,进行平方和运算
for (int i = 0; i < buffer.length; i++) {
// 这里没有做运算的优化,为了更加清晰的展示代码
v += buffer[i] * buffer[i];
}
// 平方和除以数据总长度,得到音量大小。可以获取白噪声值,然后对实际采样进行标准化。
// 如果想利用这个数值进行操作,建议用 sendMessage 将其抛出,在 Handler 里进行处理。
Log.d("spl", String.valueOf(v / (float) r));


这里的这个 v/(float)r 这个值是什么意思,

...全文
854 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
gaosunqiong 2014-03-07
  • 打赏
  • 举报
回复
楼主能不能发源码参考一下,602119163@qq.com
zhoupf05 2011-11-08
  • 打赏
  • 举报
回复
楼主能给我你的代码吗?我最近也在弄这个,用audiorecord 来进行录音,用audioTrack播放,录音得到了pcm文件,但是用audioTrack播放没反应,不知道是我的pcm文件录制有问题还是Track用得不对。
不用了的号 2011-09-08
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 raistlin010 的回复:]
PCM什么格式的?多是bit量化的。buffer归一化没?
[/Quote]PCM 是没有压缩的原始格式
半兽人写程序 2011-09-07
  • 打赏
  • 举报
回复
PCM什么格式的?多是bit量化的。buffer归一化没?
半兽人写程序 2011-09-07
  • 打赏
  • 举报
回复
PCM什么格式的,多是bit量化的?你都不知道,怎么归一化处理?
念茜 2011-09-07
  • 打赏
  • 举报
回复
[Quote=引用楼主 smilezkangel 的回复:]
向各位求教了,我现在已经录制出了一段音频PCM数据,在电脑上用工具可以播放,也可以用AudioTrack播放,
不明白PCM是什么意思,在网上搜到一段画波形的代码是
Java code

byte[] buffer = new byte[bs]; isRun = true; while (isRun) {
int r = ar.read(buffer, 0, bs);
int v = 0……
[/Quote]

这段代码是 画音量的
念茜 2011-09-07
  • 打赏
  • 举报
回复
这是原创作者为了清晰的表现出波形的特征而自己写的一个简单的算法,之前在论坛也有讨论过,不是必须的也不是定死的,更不是什么定理公式,但是的确是根据音频音量的转换相关知识定的,如果你想确切的了解缘由,还得进一步学习下信号频谱分析等知识了,我是不会……
不用了的号 2011-09-07
  • 打赏
  • 举报
回复
我现在要的是得到一个反映声音数据的值,根据这个画出波形
使用jdk16编译 import java.awt.Graphics; import java.awt.GridLayout; import java.io.File; import javax.sound.sampled.AudioFormat; import javax.sound.sampled.AudioInputStream; import javax.sound.sampled.AudioSystem; import javax.sound.sampled.DataLine; import javax.sound.sampled.SourceDataLine; import javax.swing.GroupLayout; import javax.swing.JFrame; /** * */ /** * @author Administrator * */ public class Musicline extends JFrame implements Runnable { private byte[] audioData = null; private int intBytes = 0; private byte[] ml = new byte[1]; private int[] drawl = null; /** Creates new form Musicline */ public Musicline() { initComponents(); Graphics g; g = this.getGraphics(); } public void paint(Graphics g) { g.clearRect(0, 0, 900, 900); // System.out.print(drawl.length); if (audioData != null) { drawl = new int[audioData.length]; for (int i = 0; i < audioData.length; i++) { ml[0] = audioData[i]; // String s=new String(ml); drawl[i] = Math.abs((int) ml[0]); } System.out.println(drawl[0]); for (int i = 0; i < drawl.length - 1; i++) { g.drawLine(i * this.getWidth() / 256, drawl[i] + 100, (i + 1) * this.getWidth() / 256, drawl[i + 1] + 100); } } } /* * (non-Javadoc) * * @see java.lang.Runnable#run() */ public void run() { // TODO Auto-generated method stub while (intBytes != -1) { try { synchronized (this) { this.wait(10); } } catch (InterruptedException ex) { ex.printStackTrace(); } repaint(); } } public void play() { try { AudioInputStream ais = AudioSystem.getAudioInputStream(new File( "F:/perl/key2.wav"));// 获得音频输入流 ais = AudioSystem.getAudioInputStream( AudioFormat.Encoding.PCM_SIGNED, ais); AudioFormat baseFormat = ais.getFormat();// 指定声音流中特定数据安排 System.out.println("baseFormat=" + baseFormat); DataLine.Info info = new DataLine.Info(SourceDataLine.class, baseFormat); System.out.println("info=" + info);

80,349

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧