标签: audio-processing

什么样的声音处理算法允许您进行这样的可视化?

我有兴趣为MP3作为宠物项目制作一个OpenGL可视化工具.

我偶然发现了这个youtube视频,该视频演示了有人展示了与增强现实结合使用的可视化工具.

http://www.youtube.com/watch?v=SnshyLJSpnc#t=1m15s

请观看该视频,但忽略该视频的增强现实方面.我只对制作展示台而不是增强现实感兴趣.

使用了哪种算法来生成与音乐相关的模式?如果你观看,你可以看到几种不同的可视化方法.第一个有一个独特的外观:

第一个看起来像是在渲染区域上移动的波浪: 替代文字

另一个"模式"似乎是可视化在中心圈内围绕中心移动: 替代文字

任何精通音频编程的人,可以使用哪种算法来生成类似的外观可视化?第一个使用什么样的算法?还是那个有同心圆的?

任何指导我使用什么算法来基于音乐生成这些可视化的帮助都会对我有所帮助!

opengl audio visualization audio-processing

6
推荐指数
1
解决办法
2130
查看次数

Verizon SongID - 如何编程?

对于不熟悉Verizon的SongID程序的人来说,它是一个可通过Verizon的VCast网络下载的免费应用程序.它会在歌曲中的任何一点听一首歌10秒钟,然后将这些数据发送给一些全知的算法兽,将其咀嚼起来并送回所有ID3标签(艺术家,专辑,歌曲等......)

前两部分和最后一部分是直截了当的,但在录制声音发送后的处理过程中会发生什么?

我认为它必须采取声音文件(什么格式?),解析它(如何?用什么?)一些关键标识符(这些是什么?波函数的常规属性?相位/移位/幅度/等),并检查它针对数据库.

我在网上找到的关于它是如何工作的一切都像我上面输入的一样通用.

来自audiotag.info

该服务基于先进的音频识别算法,结合了先进的音频指纹识别技术和大型歌曲数据库.上传音频文件时,音频引擎会对其进行分析.在分析期间,通过将音频"指纹"与音乐数据库进行比较来提取和识别其音频"指纹".在该识别过程完成时,在屏幕上显示关于具有匹配概率的歌曲的信息.

audio verizon-wireless audio-processing audio-analysis

6
推荐指数
1
解决办法
186
查看次数

修改音频样本缓冲区的音量增益

我想用语音数据增加缓冲区的音量.关键是我正在使用DirectSound,我有一个主缓冲区和一个辅助缓冲区 - 所有流混合都是手工完成的.在语音聊天中,所有参与者可以具有独立的音量级别.我将每个流数据乘以一个值(增益)并将其加到一个缓冲区.一切正常,但当我尝试将数据乘以大于1.0f的值时 - 我听到一些剪辑或什么.

我尝试过使用Audacity效果压缩器,但这无助于减少奇怪的噪音.

可能我应该以其他方式改变收益?或者只是使用另一种后处理算法?

更新:哇,我刚发现有趣的事情!在增加音量之前,我已经放弃了音频.

这是照片 剪辑的音频

对不起质量 - 我认为这应该是声音出现的方式(我自己画了红线).真的看起来像超过样本数据类型的值.但我无法理解为什么?我的samplebuffer是BYTE,但我只通过短指针访问它.它已签名但即使*ptr约为15-20万时也会发生剪辑.

c++ volume directsound audacity audio-processing

6
推荐指数
1
解决办法
4125
查看次数

Python NumPy - FFT和逆FFT?

所以我一直在使用FFT,我正在尝试从FFT文件中获取声音波形(最终修改它),然后将修改后的波形输出回文件.我已经获得了声波的FFT,然后在其上使用了逆FFT函数,但输出文件根本听不到.我没有对波形进行任何过滤 - 我只是测试获取频率数据然后将其放回文件中 - 听起来应该是相同的,但听起来差别很大.有任何想法吗?

- 编辑 -

从那以后我一直在研究这个项目,但还没有得到理想的结果.输出的声音文件是嘈杂的(两者都更大声,以及原始文件中不存在的额外噪声),并且来自一个声道的声音泄漏到另一个声道(之前是静音的).输入声音文件是立体声双声道文件,声音仅来自一个声道.这是我的代码:

 import scipy
 import wave
 import struct
 import numpy
 import pylab

 from scipy.io import wavfile

 rate, data = wavfile.read('./TriLeftChannel.wav')

 filtereddata = numpy.fft.rfft(data, axis=0)

 print (data)

 filteredwrite = numpy.fft.irfft(filtereddata, axis=0)

 print (filteredwrite)

 wavfile.write('TestFiltered.wav', rate, filteredwrite)
Run Code Online (Sandbox Code Playgroud)

我不太清楚为什么这不起作用......?

编辑:我已经压缩了问题.py文件和音频文件,如果这可以帮助解决这里的问题.

python audio numpy fft audio-processing

6
推荐指数
3
解决办法
9421
查看次数

将音频样本从时域转换为频域

作为一名软件工程师,我在处理信号处理问题时遇到了一些困难.我在这个领域没有多少经验.

我尝试做的是采用44100采样率对环境声音进行采样,并对固定尺寸的窗口进行采样,以测试是否存在特定频率(20KHz)且高于阈值.

根据如何使用C中的FFTW从PortAudio中提取样本中的频率信息,我将按照完美的答案执行此操作

从音频端口收集102400个样本(2320 ms),采样率为44100.样本值介于0.0和1.0之间

int samplingRate = 44100;
int numberOfSamples = 102400;
float samples[numberOfSamples] = ListenMic_Function(numberOfSamples,samplingRate);
Run Code Online (Sandbox Code Playgroud)

窗口大小或FFT大小为1024个样本(23.2 ms)

int N = 1024;
Run Code Online (Sandbox Code Playgroud)

窗口数是100

int noOfWindows = numberOfSamples / N;
Run Code Online (Sandbox Code Playgroud)

将样本拆分到noOfWindows(100)窗口,每个窗口的大小为N(1024)个样本

float windowSamplesIn[noOfWindows][N];
for i:= 0 to noOfWindows -1 
    windowSamplesIn[i] = subarray(samples,i*N,(i+1)*N);
endfor
Run Code Online (Sandbox Code Playgroud)

在每个窗口上应用汉宁窗函数

float windowSamplesOut[noOfWindows][N];
for i:= 0 to noOfWindows -1 
    windowSamplesOut[i] = HanningWindow_Function(windowSamplesIn[i]);
endfor
Run Code Online (Sandbox Code Playgroud)

在每个窗口上应用FFT(在FFT函数内完成复数转换)

float frequencyData[noOfWindows][samplingRate/2]; 
for i:= 0 to noOfWindows -1 
    frequencyData[i] = RealToComplex_FFT_Function(windowSamplesOut[i], samplingRate);
endfor
Run Code Online (Sandbox Code Playgroud)

在最后一步中,我使用此链接中实现的FFT函数:http://www.codeproject.com/Articles/9388/How-to-implement-the-FFT-algorithm ; 因为我无法从头开始实现FFT功能.

我不能确定的是,当给FFT输入N(1024)个样本时,samplingRate/2(22050)分贝值作为输出返回.这是一个FFT功能吗?

据我所知,由于奈奎斯特频率,我最多可以检测到一半的采样率频率.但是,每个频率的分贝值是否可以达到samplingRate/2(22050)Hz? …

audio signal-processing fft fftw audio-processing

6
推荐指数
1
解决办法
4141
查看次数

使用AVPlayer的MTAudioProcessingTap和远程URL进行AVFoundation音频处理

关于AVAudioMix和MTAudioProcessingTap的文档很少,它们允许将处理应用于AVFoundation(在iOS上)的媒体资产的音轨(PCM访问).这文章 和简单提一下在WWDC 2012届是我所发现的.

我在这里描述的设置适用于本地媒体文件,但它似乎不适用于远程文件(即HLS流式URL).这是预期的唯一迹象是本技术问答结尾处的注释:

AVAudioMix仅支持基于文件的资产.

有人知道更多吗?当资产不是基于文件时,真的没有办法访问音频PCM数据吗?任何人都可以找到与MTAudioProcessingTap相关的实际Apple文档吗?

avfoundation audio-processing ios avplayer ios6

6
推荐指数
1
解决办法
2143
查看次数

scipy io读取wavfile错误

每当我尝试读取 .wav 文件时,都会出现以下错误。我到处寻找但没有任何进展。
代码:

import scipy as sp
import matplotlib.pyplot as plt
sr, y = sp.io.wavfile.read(MY_FILENAME)
print sr
Run Code Online (Sandbox Code Playgroud)


错误:

  File "/usr/local/lib/python2.7/dist-packages/scipy/io/wavfile.py", line 252, in read
    fmt_chunk = _read_fmt_chunk(fid, is_big_endian)
  File "/usr/local/lib/python2.7/dist-packages/scipy/io/wavfile.py", line 94, in _read_fmt_chunk
    raise ValueError("Unknown wave file format")
  ValueError: Unknown wave file format
Run Code Online (Sandbox Code Playgroud)

更新:

在我尝试使用 sox 按照 @velikodniy 的建议转换我的文件后:

sox MY_FILENAME.wav MY_FILENAME.wav
Run Code Online (Sandbox Code Playgroud)

但它引发了另一个警告:

sox WARN wav: Premature EOF on .wav input file
Run Code Online (Sandbox Code Playgroud)

现在,如果我尝试播放原始 .wav 文件,它会显示媒体播放器中不支持的格式(之前正在播放)

python wav scipy audio-processing python-2.7

6
推荐指数
1
解决办法
8310
查看次数

通过移动扬声器播放低频心跳信号

我正在制作一个应用程序来听心跳.我可以通过耳机收听过滤的心跳信号,但不能通过移动扬声器收听,因为移动扬声器不支持这样的低频,我尝试了频移,但它会产生更清晰的音调.

我需要帮助通过移动扬声器播放输出信号,但没有更清晰的音调.

任何帮助表示赞赏

audio android audio-processing time-frequency

6
推荐指数
0
解决办法
89
查看次数

使用python向wav文件添加静音帧

第一次在这里发帖,让我们看看这是怎么回事。

我试图用 python 编写一个脚本,它会在 wav 文件的开头添加一秒钟的静音,但到目前为止没有成功。

我试图做的是在 wav 标头中读取,然后使用 wave 模块在开头添加一个 \0 ,但这并不能很好地工作。这是基于这里的代码http://andrewslotnick.com/posts/audio-delay-with-python.html

import wave
from audioop import add

def input_wave(filename,frames=10000000): #10000000 is an arbitrary large number of frames
    wave_file = wave.open(filename,'rb')
    params=wave_file.getparams()
    audio=wave_file.readframes(frames)
    wave_file.close()

    return params, audio

#output to file so we can use ipython notebook's Audio widget
def output_wave(audio, params, stem, suffix):
    #dynamically format the filename by passing in data
    filename=stem.replace('.wav','_{}.wav'.format(suffix))
    wave_file = wave.open(filename,'wb')
    wave_file.setparams(params)
    wave_file.writeframes(audio)

# delay the audio
def delay(audio_bytes,params,offset_ms):
    """version 1: delay after 'offset_ms' …
Run Code Online (Sandbox Code Playgroud)

python audio wave audio-processing

6
推荐指数
1
解决办法
7363
查看次数

了解频谱图和 n_mels 的形状

我正在浏览这两个 librosa 文档:melspectrogramstft

我正在研究可变长度的音频数据集,但我不太了解形状。例如:

(waveform, sample_rate) = librosa.load('audio_file')
spectrogram = librosa.feature.melspectrogram(y=waveform, sr=sample_rate)
dur = librosa.get_duration(waveform)
spectrogram = torch.from_numpy(spectrogram)
print(spectrogram.shape)
print(sample_rate)
print(dur)
Run Code Online (Sandbox Code Playgroud)

输出:

torch.Size([128, 150])
22050
3.48
Run Code Online (Sandbox Code Playgroud)

我得到的有以下几点:

  1. 采样率是每秒获取 N 个样本,在本例中每秒获取 22050 个样本。
  2. 窗口长度是针对该音频长度周期计算的 FFT。
  3. STFT 是在音频的小时间窗口内进行 FFT 计算。
  4. 输出的形状为(n_mels, t)。t = 持续时间/fft 窗口。

我试图理解或计算:

  1. n_fft是什么?我的意思是它到底对音频波做了什么?我在文档中读到以下内容:

    n_fft : int > 0 [标量]

    用零填充后加窗信号的长度。STFT 矩阵 D 的行数为 (1 + n_fft/2)。默认值 n_fft=2048 个样本,对应于 22050 Hz 采样率下的 93 毫秒物理持续时间,即 librosa 中的默认采样率。


    这意味着在每个窗口中采集 2048 个样本,这意味着 --> 1/22050 * 2048 = 93[ms]。每 …

python audio spectrogram audio-processing librosa

6
推荐指数
1
解决办法
1万
查看次数