我正在制作一个采样器程序,其中从1到9的每个键将发出不同的声音.一切正常,但当我同时按下两个(或更多)声音时,第二个"杀死"第一个声音.
我正在使用.WAV文件播放声音SoundPlayer.我怎么解决这个问题?
我正在构建一个应该在服务器上运行并分析声音文件的工具.我想在Ruby中这样做,因为我的所有其他工具也都是用Ruby编写的.但我找不到一个完成这个的好方法.
我发现的很多例子都是可视化器和图形化的东西.我只需要FFT数据,仅此而已.我需要获取音频数据,并对其进行FFT.我的最终目标是计算一些东西,如平均值/中位数/模式,第25百分位数和第75百分位数,所有频率(加权幅度),BPM,以及可能还有一些其他好的特性,以便以后能够将类似的声音聚集在一起.
首先我尝试使用ruby-audio和fftw3,但我从来没有让两者真正合作.文档也不好,所以我真的不知道什么数据被洗牌.接下来,我试图用bplay/BREC和限制我的Ruby脚本只使用STDIN和对(仍然使用fftw3)执行FFT.但我无法让bplay/brec工作,因为服务器没有声卡,我没有设法直接将音频直接发送到STDOUT,而无需先进入音频设备.
这是我得到的最接近的:
# extracting audio from wav with ruby-audio
buf = RubyAudio::Buffer.float(1024)
RubyAudio::Sound.open(fname) do |snd|
while snd.read(buf) != 0
# ???
end
end
# performing FFT on audio
def get_fft(input, window_size)
data = input.read(window_size).unpack("s*")
na = NArray.to_na(data)
fft = FFTW3.fft(na).to_a[0, window_size/2]
return fft
end
Run Code Online (Sandbox Code Playgroud)
所以现在我陷入困境,无法在Google上找到更好的结果.那么也许你们这些家伙可以帮助我吗?
谢谢!
我正在尝试将MIDI文件转换为WAVOS X上的文件.
到目前为止,我有这个:
fluidsynth -F output_sound soundfont.sf2 note.mid
Run Code Online (Sandbox Code Playgroud)
这会创建一个output_sound文件,但是,该文件不是WAV,它似乎是sint16格式,因为我得到了这个输出:
~ $ fluidsynth -O help
FluidSynth version 1.1.6
Copyright (C) 2000-2012 Peter Hanappe and others.
Distributed under the LGPL license.
SoundFont(R) is a registered trademark of E-mu Systems, Inc.
-O options (audio file format):
's16'
Run Code Online (Sandbox Code Playgroud)
有没有一种简单的方法可以将终端(或任何可编写脚本的方式)转换output_sound为WAV文件?
如果我想将WAV文件的幅度降低25%,我会写这样的东西:
for (int i = 0; i < data.Length; i++)
{
data[i] *= 0.75;
}
Run Code Online (Sandbox Code Playgroud)
然而,我读到的很多关于音频技术的文章都以分贝的形式讨论了振幅.我原则上理解分贝单元的对数性质,但在实际代码方面却没有那么多.
我的问题是:如果我想减少一个WAV文件的音量,比如20分贝,我会如何像上面的例子一样在代码中这样做?
更新:公式(基于Nils Pipenbrinck的答案)用于衰减给定数量的分贝(输入为正数,例如10,20等):
public void AttenuateAudio(float[] data, int decibels)
{
float gain = (float)Math.Pow(10, (double)-decibels / 20.0);
for (int i = 0; i < data.Length; i++)
{
data[i] *= gain;
}
}
Run Code Online (Sandbox Code Playgroud)
因此,如果我想衰减20分贝,增益因子是.1.
我需要各种仪器的完整样品.提供此资源的一个这样的网站(http://theremin.music.uiowa.edu/MIS.html)很好,但是没有足够的非古典乐器(例如钢吉他,鼓).
我需要一个不同的资源来提供乐器样本,例如MIDI规范支持的样本.
附注:我只需要为每种仪器提供中间C样品.
我是这个领域的新手 - 但我需要在java中执行WAV-to-MIDI转换.有没有办法知道WAV-to-MIDI转换涉及的步骤究竟是什么?我有一个非常粗略的想法,因为你需要; 对wav文件进行采样,对其进行滤波,使用FFT进行频谱分析,进行特征提取,然后将提取的特征写入MIDI.但我找不到如何做到这一切的可靠来源或论文?有人可以给我提供线索,如何以及从何处开始?是否有任何开源API可用于此WAV-to-MIDI转换过程?
谢谢
出于安全原因,我不允许在服务器上存储WAV文件以供浏览器访问.我所拥有的是一个字节数组包含服务器上的音频数据(我相信WAV文件的数据部分),我希望它通过JavaScript(或Applet,但首选JS)在浏览器上播放,我可以使用JSON- PRC发送整个byte [],或者我可以打开一个套接字来流过它,但在任何一种情况下我都不知道在浏览器中播放byte []的人是谁?
所以我最近成功构建了一个系统,它将完全用python录制,绘制和播放音频wav文件.现在,我正试图在录制时和开始绘制并将文件输出到扬声器之间进行一些滤波和音频混合.但是,我不知道从哪里开始.现在我要读取初始wav文件,应用低通滤波器,然后将新过滤的数据重新打包到新的wav文件中.这是我用来绘制初始数据的代码.
import matplotlib.pyplot as plt
import numpy as np
import wave
import sys
spf = wave.open('wavfile.wav','r')
#Extract Raw Audio from Wav File
signal = spf.readframes(-1)
signal = np.fromstring(signal, 'Int16')
plt.figure(1)
plt.title('Signal Wave...')
plt.plot(signal)
Run Code Online (Sandbox Code Playgroud)
以下是我用来生成单音测试音频文件的一些代码:
import numpy as np
import wave
import struct
freq = 440.0
data_size = 40000
fname = "High_A.wav"
frate = 11025.0
amp = 64000.0
sine_list_x = []
for x in range(data_size):
sine_list_x.append(np.sin(2*np.pi*freq*(x/frate)))
wav_file = wave.open(fname, "w")
nchannels = 1
sampwidth = 2
framerate = int(frate)
nframes = …Run Code Online (Sandbox Code Playgroud) 尝试在 python 中打开 RIFF 文件(据我所知它是一种 WAV)时出现此错误。
Failed to open file file.wav as a WAV due to: file does not start with RIFF id
Run Code Online (Sandbox Code Playgroud)
当我用各种工具检查它这使我相信,这是一个真正的WAV / RIFF文件。
$ file file.wav
file.wav: MBWF/RF64 audio, stereo 96000 Hz
$ file -i file.wav
file.wav: audio/x-wav; charset=binary
$ mediainfo file.wav
General
Complete name : file.wav
Format : Wave
Format profile : RF64
File size : 4.10 GiB
Duration : 2h 7mn
Overall bit rate mode : Constant
Overall bit rate : 4 608 …Run Code Online (Sandbox Code Playgroud) 使用Firefox 36.0.1
文件类型:
file.wav:setgid RIFF(小端)数据,WAVE音频,ITU G.711 A-law,单声道8000 Hz
Firefox无法显示<audio>标记,并在控制台中抱怨为:
媒体资源http://.../file.wav无法解码.
从Chrome开始工作.
有什么建议?