我正在尝试处理音频数据.我正在使用Java.我已将音频数据提取到数组中.现在我应该将N个数据样本传递给计算离散傅里叶变换(或快速傅里叶变换,这样更有效)的函数.我读过文档,但是我越来越困惑了.我想要计算的是幅度谱(| X(k)|).谁能帮我?谢谢
我有一个目录,其中有大约50个wav文件,我需要转换为caf,因为AudioServicesCreateSystemSoundID()为其中一些(但不是全部)返回错误.
以下是我成功用于单个文件的命令示例:
afconvert -f caff -d LEI16@44100 -c 1 whistle.wav whistle.caf
Run Code Online (Sandbox Code Playgroud)
如何快速完成此操作 - 不是每个文件一个接一个?
我正在尝试破译WAV文件.从标题到PCM数据.
我找到了一个PDF(http://www.tdt.com/T2Support/technical_notes/tn0132.pdf),详细说明了WAV文件的解剖结构,我已经能够使用提取和理解相应的标题数据Ghex2.但我的问题是:
为什么整数字节向后存储?即十二月 20存储为0x14000000而不是0x00000014.
PCM数据的整数是否也向后存储?
我想用Java读取wav文件,我将用K-means对它们进行分类.
如何用Java读取wav文件并将它们分配到一个数组或类似的东西(你可以建议它的想法)来对它们进行分类?
编辑:我想使用API来读取wav文件和K-means.
编辑:纳入改变的uv001的答案.
我只能发现ICS 4.0支持FLAC解码,但编码.我需要一些编码器将wav转换为flac,但是当前我找不到它.我发现有一个jFlac avaible,但我不知道如何使用这个库,只是简单地转换文件.
有人能帮我一把吗?
今天,我只是自己一些想法,使用JavaFlacEncoder.它适用于WAV的某些比特率.
我将值更改为现在正在运行的硬编码值.
/*
* Copyright (C) 2010 Preston Lacey http://javaflacencoder.sourceforge.net/
* All Rights Reserved.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will …Run Code Online (Sandbox Code Playgroud) 我通过谷歌搜索about.wav文件格式,我所能想到的是帧是由样本(某些定义的位深度)组成的,而wav立体声文件有多个称为通道的东西....混淆是否是一个通道是由框架组成的?播放音频文件时,所有频道都播放吗?如果一个通道由帧组成,那么所有通道的长度是否相等(按比特)?如果有人可以回答,我必须在播放波形的wav文件时单独显示每个通道
我正在使用以下方法来播放包含wav数据的字节数组.该函数正在从GWT项目中调用.
此功能播放声音,但它听起来像某种地狱怪物.采样率肯定是正确的(声音是由neospeech生成的)我已经为numberOfSamples尝试了各种值,这似乎只代表音频数据的长度.
numberOfSamples的值大于30000将播放音频文件的全长,但它是乱码且可怕的.
那么,我做错了什么?
function playByteArray(byteArray, numberOfSamples) {
sampleRate = 8000;
if (!window.AudioContext) {
if (!window.webkitAudioContext) {
alert("Your browser does not support any AudioContext and cannot play back this audio.");
return;
}
window.AudioContext = window.webkitAudioContext;
}
var audioContext = new AudioContext();
var buffer = audioContext.createBuffer(1, numberOfSamples, sampleRate);
var buf = buffer.getChannelData(0);
for (i = 0; i < byteArray.length; ++i) {
buf[i] = byteArray[i];
}
var source = audioContext.createBufferSource();
source.buffer = buffer;
source.connect(audioContext.destination);
source.start(0);
}
Run Code Online (Sandbox Code Playgroud) 我已经使用波形模块从波形文件中读取样本,但它将样本作为字符串给出,它不在波形中,因此它是小端(例如,\x00).
将此转换为python整数或numpy.int16类型的最简单方法是什么?(它最终将成为numpy.int16,所以直接进入那里很好).
代码需要适用于小端和大端处理器.
我们说我有一个WAV文件.在此文件中,是精确1秒间隔的一系列正弦音.我想使用FFTW库按顺序提取这些音调.这特别难吗?我该怎么做?
另外,将这种音调写入WAV文件的最佳方法是什么?我假设我只需要一个简单的音频库来输出.
我选择的语言是C.
我正在尝试在app引擎网站上使用recorderjs,用户上传短音频录音(比如说,长达1到12秒).我注意到我上传的WAV文件比我预期的要大得多.例如,我刚刚创建了一个持续大约9秒的记录,上传的blob是1736769字节,大于1.5兆字节.
题:
如何修改recorderjs代码(或我自己的代码 - 也许我正在使用recorderjs),以便我的音频blob具有较低的比特率?我希望10秒钟的录音能够安全地低于1 MB.
我的猜测是我需要在这里修改encodeWAV函数,或者可能是exportWAV,但我不确定如何.在exportWAV中删除交错缓冲区的每个其他元素是否有意义?有更聪明的方法吗?导出的WAV的比特率如何取决于我的计算机的属性(例如我的声卡的采样率)?
如果它可能有用,我可以在我自己的代码上添加一些细节.
编辑:如果您想查看实际示例,请安装Google Chrome测试版并尝试此页面.在我的电脑上,5-10秒长的录音超过1 MB.
非常感谢,
阿德里安