用Java实现音频处理
数字图像的最小单位是像素。 数字声音的最小单位是什么? 什么可以被认为是声音的像素?用Java实现音频处理,java,javasound,audio,Java,Javasound,Audio,数字图像的最小单位是像素。 数字声音的最小单位是什么? 什么可以被认为是声音的像素? 我们如何使用java来操作它?在java中,您通常使用AudioInputStream实例(从java声音API定义的类中获得)。这些是按字节读取的,用于播放。 我自己从来没有做过任何操作,但据我所知,这主要是通过JavaSound的mixer类完成的 下面的教程应该包含您要查找的所有信息: 最小的声音单位称为帧。对于8位单声道,它将是一个单字节。对于立体声16位,它将是4字节 我们如何使用Java来操作它 这
我们如何使用java来操作它?在java中,您通常使用AudioInputStream实例(从java声音API定义的类中获得)。这些是按字节读取的,用于播放。 我自己从来没有做过任何操作,但据我所知,这主要是通过JavaSound的mixer类完成的 下面的教程应该包含您要查找的所有信息:
最小的声音单位称为帧。对于8位单声道,它将是一个单字节。对于立体声16位,它将是4字节 我们如何使用Java来操作它 这取决于你想用它做什么。你需要更具体一些才能得到合理的答案 一些可能的操作包括:
- 体积变化
- 平底锅
- 加快或减慢播放速度,有无
- 音高偏移
- 频谱分析
这是否意味着需要44KB才能存储1秒CD质量的音乐 每帧CD音质的声音包含4个字节,如果是立体声,则为16位。将4字节乘以44100以计算每秒的字节数 单声道和立体声有什么区别 单声道有一个声道,立体声有两个声道 我想做的是操纵单个的声音单位,并创建一个定制的乐器/合成器 在代码中生成简单的正弦声音并不难。有关示例,请参见 通过播放声音的ADSR(攻击、衰减、维持、释放)包络线,可以产生许多其他效果。例如,将吉他音符的ADSR信封应用于钢琴音调,将使其听起来不可思议地像吉他,反之亦然 什么是频道?它是否像扬声器-左扬声器是一个通道,右扬声器是另一个通道 差不多。单声道听起来像垃圾(IMO),而立体声可以让不同的乐器听起来像来自不同的位置,就像乐队正坐在你面前一样 5.1声道声音稍微复杂一点,通常只是简单地“欺骗”
- 将左声道穿过左扬声器
- 将正确的频道穿过正确的扬声器
- 将二者均匀混合,并通过中央扬声器播放
- 仅对低频声音进行过滤,并通过单低音扬声器或低音扬声器进行过滤。人耳无法轻易辨别低频声音来自何处,因此这是可以接受的。低音扬声器可以放在房间的任何地方,但声音仍然一样
数字声音的最小单位是一个样本——特定时间点的信号电平。[但见下文增编。] 使用Java来操作它:如果你不得不问这个问题,你可能想去寻找其他人编写的库 但是,如果你想知道一般涉及到什么:读入声音文件。如果是压缩格式(如MP3),请将其解压缩。这将为您提供非常长的样本数组/向量。您可以剪切并粘贴其中的部分以编辑录音,或将其缩放以使其更柔和或更响亮(注意“剪辑”,当您试图超过最大音量时会出现这种情况)。更复杂的操作是可能的,但这是
数字信号处理
中的一门完整课程,我在这里不打算尝试这么做——Web搜索该短语,特别是与声音
或音频
或音乐
结合使用,应该可以找到更多信息
您还可以通过编程方式生成示例来生成自己的音频。一个信号在不同样本之间呈正弦变化,产生纯音。其他重复形状添加了各种泛音。改变重复频率会改变音高。将几个信号加在一起(同时注意削波)会将它们混合成一个信号。等等
请注意,MIDI不是“数字声音”——它是数字乐谱。它描述了什么样的音符应该在什么时候播放,但这取决于合成器将其转换成声音
附录:我以前没听说过“框架”这个词(见安德鲁的回答),但我相信它。我想到样本是因为我在硬件层思考,但区别于样本意味着音频剪辑是一件好事,所以我打赌帧确实更正确/最新。这肯定是一个太宽泛的主题,声音是一个连续波。你可以用数学方法来处理它,但你要从时间到频谱。关于这一点,你可以选修整个大学课程。我同意。例如,我在压缩的avi文件中根本找不到任何像素。从广义上讲,音频文件的最小单位是1“”(或示例)。CD质量音频中每秒有44100赫兹。您可能想参考这些API示例了解更多信息。这是否意味着需要44KB才能存储1秒CD质量的音乐?等等,扬声器能产生多少赫兹或样本?称之为“帧”,而不是“赫兹”。赫兹就像英里/小时或公里/小时,它是一种速度。数字音频数据的最小部分是一个帧,它(我认为)是一个1/44100秒(给定)信号振幅的测量值