是否有可能编写一个程序,可以提取由多个乐器组成的波(或其他音乐格式)文件中的特定乐器提供的旋律/节拍/节奏?
哪种算法可用于此以及哪种编程语言最适合它?
这是我想做的.我想在.wav文件的每个1ms处找到.wav文件的音频和幅度,并将其保存到文件中.我已经绘制了频率与幅度的图表,并且随着时间的推移绘制了幅度,但我无法计算频率超时.我的最终目标是能够读取文件并使用它们调整变量和频率以触发正在使用的变量,这似乎是最简单的部分.我一直在使用numpy,audiolab,matplotlib等...使用FFT,但我只是想不出这个,任何帮助表示赞赏!谢谢!
所以我试图在iOS 5.1.1中以不同的速率播放声音文件,并且绝对没有运气.到目前为止,我已经尝试设置AVAudioPlayer的速率:
player = [[AVAudioPlayer alloc] initWithContentsOfURL:referenceURL error:&error];
player.enableRate = YES;
player.rate = 1.5;
player.numberOfLoops = 0;
player.delegate = self;
[player prepareToPlay];
[player play];
Run Code Online (Sandbox Code Playgroud)
没有运气,声音只会忽略我给它的速度.我也试过AVPlayer:
avPlayer = [[AVPlayer alloc] initWithURL:referenceURL];
avPlayer.rate = 0.5;
[avPlayer play];
Run Code Online (Sandbox Code Playgroud)
再次,它播放但只是忽略我设置的速率.我尝试了很多不同的音频文件但是为了这个帖子我从这个目录中选择了Rooster-mono.wav:http://sig.sapp.org/sounds/wave/
有没有人在改变iOS 5.1.1的播放速度方面取得了哪些成功?或者有人知道我在这里失踪了吗?
我这样做是为了改变音高的轻微我的一些样品,我知道我可以通过使用RemoteIO或类似的东西做到这一点,但似乎总矫枉过正我想实现(一个简单的播放速度调整).
这次我有很多问题,虽然它们都与同样的问题有关:我想在Android中构建一个基本的声纳,并且不知道如何做这样的事情.
只是想在这里定位,因为我对移动应用程序中的声音处理真的很陌生.提前致谢!
我正在尝试构建一个 C# 应用程序来检测视频中何时出现音乐。我可以找到任何需要的格式的音频。然而,我在音乐检测方面遇到了障碍。
有大量关于音频指纹识别以及如何用 C#/任何语言执行此操作的帖子。然而,我想要电影中音乐出现的大致进出时间,我不关心音乐是什么。
该音乐不太可能存在于任何指纹数据库中。因此可能是完全计算分析。
有什么巧妙的想法吗?或者我会最好地实现节拍检测算法并逐段处理它。然后估计入点/出点?
我编写了一个小程序,需要检测声音级别,如果级别高于设置中设置的级别,则将其写入,我通过 portaudio 进行声音捕获,通过 libvorbis 压缩,但程序的一部分尚未完成,我坚持下去,我需要检测声音原始 pcm 数据的级别,我对 pcm 数据是什么不太了解,并且不知道任何音频分析/处理算法,我们是否有现有的 c/c++ 库可以做到这一点?或者是一些可以在其中实现的简单算法c/c++ 存在吗?
我试图用C#编写音频应用程序并需要实现一个实时卷积混响处理器.我目前使用的方法是在使用长度超过~16,000个样本(44.1kHz)的脉冲响应时发生故障.我需要能够使用至少2秒或88,200个样本的脉冲响应.这是我尝试绘制我正在使用的方法的最佳尝试:

我使用的块大小是2048个样本.我正在使用NAudio库进行FFT,并且在负载时预先计算脉冲响应的FFT.
我的方法有什么问题?我知道我所追求的是可能的,因为我已经使用了大量的音频应用来完成它.
编辑:原来有两个问题:我使用的FFT库不够快,而且,对于这种类型的应用程序,C#通常不够快.在切换到非托管代码(C++)和更好的FFT库(FFTW)之后,问题得以解决.
我的主要任务是实时识别麦克风中的人类嗡嗡声。作为识别一般信号的第一步,我对手机上的应用程序生成的 440 Hz 信号进行了 5 秒的记录,并尝试检测相同的频率。
我使用 Audacity 绘制并验证了同一个 440Hz wav 文件的频谱,我得到了这个,这表明 440Hz 确实是主频率:( https://i.stack.imgur.com/c3DWD.png )
为了使用 python 执行此操作,我使用PyAudio库并参考此博客。到目前为止,我使用 wav 文件运行的代码是这样的:
"""PyAudio Example: Play a WAVE file."""
import pyaudio
import wave
import sys
import struct
import numpy as np
import matplotlib.pyplot as plt
CHUNK = 1024
if len(sys.argv) < 2:
print("Plays a wave file.\n\nUsage: %s filename.wav" % sys.argv[0])
sys.exit(-1)
wf = wave.open(sys.argv[1], 'rb')
p = pyaudio.PyAudio()
stream = p.open(format=p.get_format_from_width(wf.getsampwidth()),
channels=wf.getnchannels(),
rate=wf.getframerate(),
output=True)
data = wf.readframes(CHUNK)
i …Run Code Online (Sandbox Code Playgroud) 我有从服务器到客户端的音频数据流。它以 Node.js 缓冲区(Uint8Array)开始,然后通过 port.postMessage() 发送到 AudioWorkletProcessor,在其中转换为 Float32Array 并存储在 this.data 中。我花了几个小时尝试将输出设置为 Float32Array 中包含的音频数据。记录 Float32Array 预处理会显示准确的数据,但在处理期间记录它会显示在发布新消息时数据不会发生变化。这可能是我低级音频编程知识的一个空白。
当数据到达客户端时,将调用以下函数:
process = (data) => {
this.node.port.postMessage(data)
}
Run Code Online (Sandbox Code Playgroud)
顺便说一句,(你可以让我知道)也许我应该使用参数描述符而不是 postMessage ?无论如何,这是我的 AudioWorkletProcessor:
class BypassProcessor extends AudioWorkletProcessor {
constructor() {
super();
this.isPlaying = true;
this.port.onmessage = this.onmessage.bind(this)
}
static get parameterDescriptors() {
return [{ // Maybe we should use parameters. This is not utilized at present.
name: 'stream',
defaultValue: 0.707
}];
}
convertBlock = (incomingData) => { // incoming data is a UInt8Array
let i, l = …Run Code Online (Sandbox Code Playgroud) javascript audio-streaming node.js audio-processing web-audio-api
我正在处理具有以下元数据的 M4a 文件:
Metadata:
major_brand : M4A
minor_version : 0
compatible_brands: M4A mp42isom
creation_time : 2019-08-14T13:45:39.000000Z
iTunSMPB : 00000000 00000840 00000000 00000000000387C0 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
Duration: 00:00:05.25, start: 0.047891, bitrate: 69 kb/s
Stream #0:0(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, mono, fltp, 65 kb/s (default)
Run Code Online (Sandbox Code Playgroud)
音频持续时间 = 5246.2585 毫秒
我正在尝试使用以下公式计算帧数:
duration * sampling rate / frame size = 5246.2585 * 44.1/1024 = 225.9375 frames
Run Code Online (Sandbox Code Playgroud)
我尝试了多个文件,它总是给出 xxx.9357 帧。
但是,使用 FFprobe:
ffprobe -i audio.m4a -show_streams …Run Code Online (Sandbox Code Playgroud) audio-processing ×10
audio ×4
algorithm ×2
python ×2
aac ×1
android ×1
avfoundation ×1
avplayer ×1
c# ×1
c++ ×1
convolution ×1
ffprobe ×1
fft ×1
frequency ×1
ios ×1
javascript ×1
m4a ×1
node.js ×1
optimization ×1
pcm ×1
pyaudio ×1
waveform ×1