我即将开始一个记录和编辑音频文件的项目,我正在寻找一个好的库(最好是Ruby,但会考虑除Java或.NET以外的任何东西)来实现波形的即时可视化.
有谁知道我应该从哪里开始搜索?
我正在将MATLAB代码调整为R并尝试使用ARMA公式生成波形.是否有一个简单的R等效函数用于MATLAB filter采用AR/MA系数来构建波形?
npts = 100;
a = [1 0.6]; % AR coeffs
b = [1 0.25 3]; % MA coeffs
e = randn(npts,1); % generate gaussian white noise
waveform = filter(b,a,e); % generate waveform
Run Code Online (Sandbox Code Playgroud) 我知道这里有一些类似的问题,但大多数都是关于生成波形图像,这不是我想要的。
我的目标是为音频文件生成波形可视化,类似于 SoundCloud,但不是图像。我希望获得数组中音频剪辑每秒(或半秒)的最大幅度数据。然后我可以使用这些数据创建基于 CSS 的可视化。
理想情况下,我希望获得一个数组,其中包含每秒的所有幅度值作为整个音频文件最大幅度的百分比。这是一个例子:
[
0.0, # Relative max amplitude of first second of audio clip (0%)
0.04, # Relative max amplitude of second second of audio clip (4%)
0.15, # Relative max amplitude of third second of audio clip (15%)
# Some more
1.0, # The highest amplitude of the whole audio clip will be 1.0 (100%)
]
Run Code Online (Sandbox Code Playgroud)
我想我至少必须使用numpyPython 的wave模块,但我不知道如何获取我想要的数据。我想使用 Python,但我并不完全反对使用某种命令行工具。
我想在java中创建一个基于时间轴的编辑GUI - 以视频编辑软件的风格(例如adobe premiere).下面是一张图片,我如何记住GUI(抱歉不直接包含它 - 作为禁用该功能的新用户):

目前实现的只是顶部的时间线滑块(带JSlider) - 所有其余部分仅由Photoshop(也就是从滑块向下穿过层的黑线)组成.
现在我的问题不是很具体,我只是想得到一些输入,我可以尽可能好地实现其余的.为了更精确一点,我非常感谢以下主题的提示:
你看我还有一些工作要提前,任何好的建议或指向正确的方向都会非常友善!
例如,如果每个像素有200个样本(垂直线),我应该从200个样本的那个部分中绘制最低和最高样本吗?或者我应该绘制低和高样本的平均值?也许两者都有不同的颜色?
我正在尝试将WAV文件(PCM,48kHz,4通道,16位)转换为单通道WAV文件.
我尝试将WAV文件拆分成4个字节数组,就像这个答案一样,并创建了一个WaveMemoryStream,如下所示,但不起作用.
byte[] chan1ByteArray = new byte[channel1Buffer.Length];
Buffer.BlockCopy(channel1Buffer, 0, chan1ByteArray, 0, chan1ByteArray.Length);
WaveMemoryStream chan1 = new WaveMemoryStream(chan1ByteArray, sampleRate, (ushort)bitsPerSample, 1);
Run Code Online (Sandbox Code Playgroud)
我在创建WAVE标题时遗漏了什么?或者更多的是将WAV分成单声道WAV文件?
像soundcloud和zippyshare 1一样,如何使用Java生成音频波形图像?是否有适用于这种情况的框架或开源库?
我想将音频波形生成为图像,并且在加载轨道后,将加载带有的波形图像。

我正在生成正弦波并将其发送到SDL音频缓冲器以生成声音.可以使用键盘的箭头键更改幅度和频率等所有参数.
现在,问题在于当我改变频率时,我会听到"划痕".我理解为什么会发生这种情况:当我在函数本身发生变化时继续迭代我x的f(x)时候,我得到一个完全错误的值.但我没有看到或理解如何通过相移来解决这个问题.
任何提示如何开始?
#include "WaveGenerator.h"
#include <thread>
#include <iostream>
#include <sstream>
#include <string>
#include <algorithm> // std::min
int main(int argc, char* argv[]){
WaveGenerator* wg = new WaveGenerator();
int i;
std::cin >> i;
return 0;
}
int graphThreadFunc(void *pointer){
WaveGenerator* wg = (WaveGenerator*)pointer;
wg->init();
return 0;
}
// SDL calls this function whenever it wants its buffer to be filled with samples
// length = 2048
void SDLAudioCallback(void *data, Uint8 *buffer, int length){
uint8_t *stream = (uint8_t*)buffer; …Run Code Online (Sandbox Code Playgroud) 我也问过这个位置 上的音响设计论坛,但问题是沉重的计算机科学/数学所以它可能实际上属于在这个论坛:
因此,通过读取文件中的二进制文件(不幸的是,这正是我正在寻找的内容),我能够成功找到有关 WAV 文件的所有信息,但大罪函数的幅度和频率(赫兹)除外。只是为了验证我在说什么,该文件仅使用以下方程生成一个波:
F(s) = A * sin(T * s)
其中 s 是当前样本,A 是幅度,T 是周期。现在 T(周期)的方程是:
T = (2? * Hz) /(? * ?)
其中Hz是以赫兹为单位的频率,?是每秒采样数,而 ? 是频道数量。
现在我知道要解决振幅,我可以简单地找到 F(s) 的值,其中
s = (?/2)/T
因为那时正弦函数的值将是 1,最终值将等于 A。问题是要除以 T,我必须知道赫兹(或赫兹)。
有什么方法可以读取 WAV 文件以从数据中发现赫兹,假设文件只包含一个波。
我在过去两周内用谷歌搜索了这个问题,但未能找到算法或解决方案。我有一些短的 .wav 文件,但它有 MULAW 压缩,而 python 内部似乎没有wave.py可以成功解压缩它的函数。所以我自己用 python 构建了一个解码器。
我在基本元素中找到了一些关于 MULAW 的信息:
\n\n所以我需要一些指导,因为我不知道如何从有符号短整数转换为全波信号。这是我迄今为止收集到的初步想法:
\n\n所以从 wiki 我得到了 u-law 压缩和解压缩的方程:
\n\n\n\n\n\n因此,从压缩方程来看,输出似乎限制在float-1 到 +1 的范围内,并且有符号短整数从 \xe2\x80\x9332,768 到 32,767 所以看起来我需要将其转换为short int到float特定范围内。
现在,说实话,我以前听说过量化,但我不确定是否应该首先尝试去量化然后解压缩或以其他方式,或者即使在这种情况下它是同一件事......教程/文档的术语可能有点棘手。
\n\n我正在使用的波形文件应该包含“A”声音,就像语音合成一样,我可能可以通过比较某些音频软件和自定义波形分析器中的 2 个波形来验证成功,但我真的很想减少尝试和错误部分这个过程的。
\n\n所以我的想法是:
\n\nu = 0xff\ndata_chunk = b\'\\xe7\\xe7\' # -6169\ndata_to_r1 = unpack(\'h\',data_chunk)[0]/0xffff # I suspect this is wrong,\n# …Run Code Online (Sandbox Code Playgroud)