当前位置: 首页 > 面试题库 >

Java-下采样WAV音频文件

郜玉石
2023-03-14
问题内容

嗨,我需要将wav音频文件的采样率从44.1kHz下采样到8kHz。我必须使用字节数组手动完成所有工作…这是出于学术目的。

我目前正在使用2个类(接收器和源)来弹出和推送字节数组。一切顺利,直到到达需要使用线性插值对数据块进行下采样的部分为止。

由于我是从44100降采样到8000 Hz,因此我该如何插入一个包含约128000000字节的字节数组?现在,我弹出5、6或7个字节,具体取决于i%2 ==
0,i%2 == 1和i%80 == 0,并将这5、6或7个字节的平均值推入新文件。

结果确实是一个比原始音频文件小的音频文件,但无法在Windows Media
Player上播放(说读取文件时出错),并且尽管我能听到正确的声音,但噪音很大。

因此,总而言之,我需要有关线性插值部分的帮助。提前致谢。


问题答案:

我认为您不应该使用这些样本的平均值,因为那将是一个中值滤波器,而不是精确的下采样。只需使用每5th / 6th / 7th个样本并将其写入新文件即可。

那可能会有一些混淆现象,但总体上是可以识别的。

另一个更复杂的解决方案,但从质量角度来讲可能会获得更好的结果,这是首先使用FFT或DFT将您的样本转换为频率分布,然后以适当的采样率将其转换回。自从我做了这样的事情已经有一段时间了,但这绝对是可行的。不过,您可能需要花些时间才能使其正常工作。

另外,当不进行完整数组的FT运算时,而是在分段中,您会遇到分段边界为0的问题。几年前,当我玩这些东西时,我并没有为此提出一个可行的解决方案(因为也会产生伪像),但是如果您阅读正确的书,可能会有一种伪像:-)

至于WMP抱怨文件:您 确实 修改了相应编写的标头,对吗?



 类似资料:
  • 我无法从sd卡播放wav音频文件: 这是我的代码: 文件名路径的格式为:/storage/emulated/0/MyApp/name。wav 这是我得到的错误代码: 我希望你能帮我? 谢谢

  • 本文向大家介绍Python对wav文件的重采样实例,包括了Python对wav文件的重采样实例的使用技巧和注意事项,需要的朋友参考一下 例如从2channel,4.41k hz 重采样到 1 channel,16k hz 若in和out都是单通道: 方案二 y为下采样的结果,类型np.ndarray You can use Librosa's load() function, import lib

  • 我正在用ffmpeg从flac文件制作mp3。这对我来说通常是哼哼。 今晚,由于某种原因,当我使用我一直使用的相同命令时,转换后的音频会失真。_故障排除后,出现“采样率”标志。 我的命令: MP3中的音频然后被一个顶起的增益所扭曲,导致数字剪辑。 我尝试更新ffmpeg,然后问题仍然存在。我尝试过转换各种采样率(44.1k源文件,48k源文件,96k源文件)44.1k和48kmp3,问题仍然存在,

  • 据我所知,html5中没有可用的音频流。即使有音频标签。 也就是说,您必须始终提供一个文件,而不是传递某种音频流。 所以,我们知道最常用的格式是ogg和mp3(不是免费的)。也可以使用wav,但由于其尺寸不常用。 我的问题是,我可以把一个文件假装成一个流,比如说创建wav文件(带有riff头)并指定PCM格式细节(频率、频道、等等),然后将其作为前几个字节传递,然后通过线路发送PCM流(实际上是音

  • 这是我的问题,有人给了我一个函数,如果我理解得很好,它会把一些声音样本放入数组列表中。 我想创建一个。wav文件的音频曲目,我真的不知道如何做到这一点。 这是代码,因为也许我根本不懂。。。 下面是示例,在上面的代码中导入。