使用Java进行音频操作

时间:2014-01-09 14:11:29

标签: java javasound audio

数字图像的最小单位是像素。 什么是最小的数字声音单位? 什么可以被认为是声音的像素? 我们如何使用java来操作它?

3 个答案:

答案 0 :(得分:5)

最小的声音单位称为帧。对于8位单声道,它将是一个字节。对于立体声16位,它将是4个字节。

  

我们如何使用Java来操作它?

这取决于你想用它做什么。你需要更加具体才能得到合理的答案。

一些可能的操作是:

  • 体积变化
  • 加速或减慢播放速度,无论是否......
  • 音高转换
  • 频谱分析..
  

..扬声器能产生多少赫兹或样本?

这在很大程度上取决于发言者。扬声器具有所有不同类型的动态范围,通常采用一种没有绝对上限或下限的“钟形曲线”。

  

这是否意味着存储1秒音乐CD质量需要44KB?

每个CD质量声音帧包含4个字节,因为它是立体声,16位。将4个字节乘以44100以计算每秒的字节数。

  

单声道和立体声有什么区别?

Mono有一个频道,立体声有两个。

  

我想要做的是操纵单个声音单位,以及 - 创建自定义乐器/合成器。

在代码中生成简单的正弦声音并不困难。有关示例,请参阅Beeper

通过使用声音的ADSR(Attack,Decay,Sustain,Release)包络可以创建许多其他效果。例如,将吉他音符的ADSR包络应用于钢琴音符会使其听起来像钢琴一样神奇,反之亦然。

  

什么是频道?它是否像扬声器 - 左扬声器是一个声道,右扬声器是另一个?

差不多。单声道听起来像垃圾(IMO),而立体声可以使不同的乐器听起来像来自不同的位置,就像乐队坐在你面前一样。

5.1声道声音稍微复杂一点,通常 1 它只是简单地“欺骗”。

  • 将左声道穿过左扬声器。
  • 将右声道穿过右扬声器。
  • 将它们均匀混合并将其放入中央扬声器。
  • 过滤低频声音并将其放入单个低音扬声器或低音扬声器。人耳不能轻易分辨低频声音的来源,因此这是可以接受的。低音扬声器可以放在房间的任何地方,听起来也一样。

  1. 说实话,我不知道实际存储 5或6声道的声音格式,我认为它全部被分开(对于低音扬声器)或混合在一起(对于中心扬声器)在运行时的硬件。无论如何,Java Sound只会直接处理一个或两个通道。

答案 1 :(得分:2)

数字声音的最小单位是一个样本 - 特定时间点的信号电平。 [但请参阅下面的附录。]

使用Java来操作它:如果你不得不问这个问题,你可能想去寻找别人写的库。

但是如果你想知道一般涉及什么:读入声音文件。如果是压缩格式(如MP3),请将其解压缩。这将为您提供非常长的样本数组/向量。您可以对其中的部分进行剪切和粘贴以编辑录制,或者对其进行缩放以使其更柔和或更响亮(注意“剪裁”,当您尝试超过最大音量时会产生“剪裁”)。更复杂的操作是可能的,但这是digital signal processing中的完整课程,我不打算在这里尝试 - 网络搜索该短语,特别是与soundaudiomusic应该找到更多信息。

您还可以通过编程方式生成示例来生成自己的音频。从样品到样品的正弦变化的信号产生纯音。其他重复形状添加各种泛音。改变重复的频率会改变音高。将几个信号加在一起(同时注意剪切)将它们混合成一个信号。等等。

请注意,MIDI不是“数字声音” - 它是数字得分。它描述了什么时候应该播放的音符,但是由合成器将它变成声音。

ADDENDUM:我之前没有听过“框架”一词(请参阅安德鲁的回答),但我会相信的。我想到了样本,因为我正在思考硬件层,但是从样本中区分出音频剪辑是一件好事,所以我敢打赌帧确实更正确/最新。

答案 2 :(得分:0)

在java中,您通常使用AudioInputStream实例(您从Java声音API定义的类中获取)。这些是按字节读取的,用于播放。 我自己从未做过操作,但据我所知,这主要是通过Java sound的混音器类完成的。

下面的教程应该包含您要查找的所有信息: http://docs.oracle.com/javase/tutorial/sound/playing.html

相关问题